Как сделать Git pull использовать rebase по умолчанию для всех моих репозиториев?

Есть ли способ настроить Git-репозиторий хоста так, чтобы при любом git pull из его (локальных) клонов по умолчанию использовался --rebase? branch.autosetuprebase поиск по переполнению стека, я узнал о branch.autosetuprebase, но его нужно настраивать для каждого клона индивидуально.

Мой проектный поток настроен так, что мы pull ветвь develop перед тем, как merge с ней ветку компонентов. Это pull почти всегда использует --rebase, поэтому я пытаюсь выяснить, может ли это быть по умолчанию.

Ответ 1

Теперь есть 3 различных уровня конфигурации для поведения по умолчанию. От самых общих до самых мелкозернистых они:

1. pull.rebase

git pull --rebase true означает, что git pull всегда эквивалентно git pull --rebase (если для branch.<branchname>.rebase явно не задано значение false). Это также может быть установлено для репозитория или глобально.

2. branch.autosetuprebase

Установка этого значения always означает, что при создании ветки отслеживания для нее будет создана запись конфигурации, подобная приведенной ниже. Для более точного управления это также может быть установлено как never, local или remote и может быть установлено для репозитория или глобально. Смотрите git config --help для более подробной информации.

3. branch.<branchname>.rebase

Установка в true означает, что эта конкретная ветвь будет всегда вытягивать из своего восходящего потока через перебазирование, если только git pull --no-rebase --no-rebase не используется явно.

Заключение

Таким образом, хотя вы не можете изменить поведение по умолчанию для всех будущих клонов репозитория, вы можете изменить значение по умолчанию для всех текущих пользовательских (существующих и будущих) репозиториев с помощью git config --global pull.rebase true.

Ответ 2

Как насчет

git config --global --bool pull.rebase true

Это сообщит git, чтобы всегда тянуть с rebase.

Ответ 3

Ответ - нет.

Невозможно настроить удаленный репозиторий, чтобы все, кто его клонировал, изменили поведение по умолчанию git pull.

Вы можете, однако, настроить крючок на стороне сервера, который проверяет, что никто не нажимает на комманды (что-то вроде этого, возможно).

Существуют также некоторые параметры конфигурации, которые могут вас заинтересовать. Все разработчики, которые клонируются из удаленного репозитория, должны будут сами установить его вручную.

1. Вариант branch.<name>.rebase

Вы можете настроить локальную ветвь, всегда использующую --rebase, например, заменяя <name> именем ветки:

git config branch.<name>.rebase true

После выполнения этого на master раздел master в .git/config выглядел следующим образом:

[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

2. Вариант branch.autosetuprebase

Запуск этой предыдущей команды конфигурации для каждой ветки Git может быть проблемой, поэтому вы можете настроить Git на автоматическую настройку для каждой новой ветки:

git config branch.autosetuprebase always

(Вы также можете указать never, remote и local, подробнее см. man git-config.)

Без параметра --global конфигурация сохраняется в .git/config, и затрагивается только текущий репозиторий. С помощью --global конфигурация сохраняется в ~/.gitconfig, и каждый неконфигурированный репозиторий затронут.

Этот параметр не влияет на уже существующие ветки.

3. Вариант pull.rebase

git config --bool pull.rebase true

(Вы также можете указать параметр --global.)

Если эта опция истинна, запуск git pull эквивалентен git pull --rebase, если только branch.<name>.rebase не установлен на false.

Ответ 4

Это делает параметр --rebase значением по умолчанию при выдаче git pull в данной ветке.

@Flimm, мне нужно было добавить true, чтобы ваш первый вариант работал.

Итак, правильный синтаксис:

git config branch.<branch>.rebase true

Чтобы запустить эту команду в ветке develop:

git config branch.develop.rebase true

И теперь раздел develop в .git/config выглядит следующим образом:

[branch "develop"]
        remote = origin
        merge = refs/heads/develop
        rebase = true

Ответ 5

В настоящее время нет способа установить политику по умолчанию для хранилища.

Если вы хотите это для себя и используете хотя бы git 1.7.9, вы можете глобально настроить конфигурацию pull.rebase следующим образом:

git config --global pull.rebase true

Но вам придется делать на каждой машине. Одним из вариантов может быть настройка шаблона/скелета домашнего пользователя по умолчанию с этим параметром. Однако пользователи могут изменить эту опцию.

Если вы не хотите слияния, вы можете определить ловушку на стороне сервера, чтобы отклонять толчки с слияниями.

Для справки: его исходная документация для pull.rebase:

Если задано значение true, перебазировать ветки поверх выбранной ветки вместо объединения ветки по умолчанию с удаленного по умолчанию при запуске "git pull". Смотрите "branch..rebase" для установки этого для каждой ветки.

При слиянии передайте параметр --rebase-merges для git rebase, чтобы локальные коммиты слияния были включены в rebase (подробности см. В git-rebase).

При сохранении также передайте --preserve-merges вместе с git rebase, чтобы локально зафиксированные коммиты слияния не сгладили при запуске git pull.

Когда значение является интерактивным, перебазирование выполняется в интерактивном режиме.

ПРИМЕЧАНИЕ: это возможно опасная операция; не используйте его, если вы не понимаете его последствий (подробности см. в git-rebase).