Использование git pull для отслеживания удаленной ветви без слияния - PullRequest
4 голосов
/ 16 июня 2010

Я использую git для отслеживания контента, который некоторые люди изменяют и делится с другими «только для чтения». «Читатели» могут время от времени вносить изменения, но в основном это не так.

Я хочу разрешить git-«писателям» перебазировать выдвинутые ветви **, если это необходимо, и гарантировать, что «читатели» никогда не получат случайное слияние. Это обычно достаточно просто.

git pull origin +master

Есть один случай, который, кажется, вызывает проблемы. Если читатель вносит локальные изменения, приведенная выше команда объединит . Я хочу, чтобы pull был полностью автоматическим, если читатель не сделал локальных изменений, а если они сделали локальные изменения, он должен остановиться и запросить ввод. Я хочу отслеживать любые изменения в восходящем потоке, при этом внимательно следя за тем, чтобы объединить последующие изменения.

В некотором смысле, я не хочу тянуть. Я хочу точно отслеживать главную ветку.


** (Я знаю, что это не лучшая практика, но она кажется необходимой в нашем случае: у нас есть одна основная ветвь, которая содержит большую часть работы и некоторые тематические ветки для конкретных клиентов с небольшими изменениями, которые необходимо изолировать. Кажется, проще всего часто перебазировать, чтобы поддерживать актуальность тем.)

Ответы [ 6 ]

7 голосов
/ 16 июня 2010

Вы ищете команду git-fetch.

4 голосов
/ 16 июня 2010

Вы также можете найти git pull --rebase полезным.

Обновление: --rebase можно сделать поведением по умолчанию pull, установив branch.<name>.rebase = true в отдельных ветвях. Установка branch.autosetuprebase = true установит это для новых веток по умолчанию, хотя существующие ветки необходимо будет обновить вручную. Или вы всегда можете по умолчанию установить --rebase, установив pull.rebase = true глобально.

2 голосов
/ 18 января 2011

Как насчет:

  git pull --ff-only origin master

Я часто этим пользуюсь. К сожалению, как заметил ниже richard-hansen @, этот псевдоним не работает:

[alias]
pull = pull --ff-only
0 голосов
/ 25 марта 2014

Я думаю, что вы хотите рабочий процесс с использованием двух ветвей. Объединенная локальная ветвь (главная) и удаленная ветвь отслеживания «только для чтения» (удаленная).

Использование двух удаленных пультов в основной ветке позволяет продолжить работу и быть в курсе удаленного проекта. Ваши локальные изменения и объединенные удаленные изменения могут быть отправлены на ваш локальный git-сервер.

 git push localserver master

В ваших ветках удаленного отслеживания можно создавать и улучшать исходные патчи и отправлять в проект.

Отдельная ветвь отслеживания для удаленного «только для чтения» позволяет подготовить исправления и коммиты для восходящего потока в удаленный проект.

# Master branch is merge of local changes, and remote changes
git checkout master
git pull -m origin master
# Set up a local tracking branch for the 'read-only' remote.
git checkout -b remote remote master
# Start reviewing changes between the two branches.
git diff --name-status ..master

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

git diff master..remote -- files >patch
git checkout remote
patch -p1 <patch
git commit -m "Your patch"
git format-patch -1

Отправка отформатированного файла исправления в удаленный проект. Если вам нужно изменить и повторно выполнить удаленный проект, вы можете выполнять эту работу в своей ветви удаленного отслеживания, пока она не будет утверждена.

(Настройка git dual remote включает редактирование .git / config и объясняется в другом месте)

0 голосов
/ 12 марта 2014

Git 2.0 (Q2 2014) добавит в commit b814da8 a config push.ff:

pull.ff::

По умолчанию Git не создает дополнительный коммит слияния, когдаобъединение коммита, который является потомком текущего коммита.Вместо этого кончик текущей ветви быстро пересылается.

  • Если задано значение false, эта переменная указывает Git создать дополнительный коммит слияния в таком случае (эквивалентно - --no-Опция ff из командной строки).
  • Если задано значение только, допускаются только такие быстрые слияния (эквивалентно предоставлению опции --ff-only из командной строки).
0 голосов
/ 17 июня 2010

Поскольку вы не хотите, чтобы слияние читателей выполнялось вручную, вы можете написать ловушку, чтобы проверить, что произошло, и предложить пользователю:

http://git -scm.com / docs/ githooks

Я бы по-прежнему рекомендовал выбрать и заставить читателей управлять своими слияниями или перебазированием локально.Это более простое решение вашей проблемы.

...