2012-04-10 3 views
10

Недостаточно того, что ниже: Я хочу нажимать сообщения фиксации на поддерево, но только сообщения, которые относятся к этому дереву. Как мне это сделать?git subtree push изменения обратно в проект поддерева


У меня есть два проекта, Master и Slave. Slave проверяются, как поддерева Master проверил на lib/slave через git subtree merge --prefix=lib/slave --squash projects/slave где projects/slave является ветвью, Slave извлечено в:

Отрасли:

мастера проектов/ведомый → ведомого

Теперь я Я работаю над своей веткой master, совершая фиксации файлов, которые являются частью обоих проектов, все идет гладко. Теперь я хочу, чтобы подтолкнуть изменения обратно Slave:

  • мерзавец контроль раб
  • мерзавец слияние ??? master

Если я делаю нормальное слияние, я получаю коммиты для каждой фиксации для управления, независимо от того, были ли изменены файлы в lib/slave. Или я могу сделать --squash и получить только одно сообщение, но я теряю сообщения журнала.

Как я могу получить соответствующие сообщения журнала? например если мой master история журнала:

  • добавленных изображения освоить
  • измененных файлов в ведомом только
  • более изменений освоить только
  • измененных файлы в ведущем и ведомом

Я d требуется, чтобы это было добавлено к Slave:

  • измененных файлы в ведомом только
  • измененных файлы в ведущем и ведомом
+0

Gitslave (http://gitslave.sourceforge.net/), возможно, был интересной альтернативой в вашем случае. – VonC

+0

@VonC. Одна из основных проблем, с которыми я сталкиваюсь с gitslave, заключается в том, что, по-видимому, команды fork обрабатывают каждое репо, эффективно выполняя «git commit -m» сообщение фиксации «» на каждом репо.Поэтому, если какие-либо разработчики не используют его, мы будем сталкиваться с проблемами синхронизации, правильно? –

+0

Возможно, самый глупый вопрос в мире, но почему это не 'git log ' достаточно здесь? Это даст вам только изменения, относящиеся к вашей подчиненной ветке, когда вы отправляете ее через свои каталоги. Является ли ваша боль беспорядочным изменением, или это просто на дисплее? – MrGomez

ответ

6

Для поведения вы хотите, я думаю, вы должны нажать от Master, я не знаю способ, чтобы тянуть изменения поддерева от Slave.

Чтобы подтолкнуть изменения:

(in Master) 
$ git subtree split --prefix=lib/slave -b split-branch 
$ git push <bare Slave repo> split-branch:master 
$ git branch -d split-branch 
$ cd /path/to/Slave/working/copy 
$ git pull # (now in Slave) 

Первая команда создает новое поддерево на основе каталога, который затем толкнул на другой проект.

Теоретически вы должны иметь возможность напрямую нажать на рабочую копию, но на практике это не сработало для меня.

+0

Я не был уверен, почему вы не показываете команду 'git subtree push', но затем я понял (из git-поддеревьев docs), что поддерево push - это просто разделение поддерева, за которым следует регулярное нажатие на альтернативный репозиторий. – yoyo