2010-12-06 3 views
9

Я экспериментирую с git-svn, и пытаюсь придумать относительно не подверженный ошибкам рабочий процесс. Я думаю, что следующее должно работать, и это довольно просто, но я видел people using far more complicated workflows, поэтому я хочу понять, почему.Будет ли этот рабочий процесс git-svn работать?

  1. (master) $ git svn init <path>
  2. (master) $ git svn fetch
  3. (master) $ git svn rebase
  4. (master) $ git checkout -b topic-branch
  5. (topic-branch) $ # HACK HACK COMMIT HACK HACK HACK COMMIT HACK COMMIT
  6. (topic-branch) $ git checkout master
  7. (master) $ git merge topic-branch - это быстро вперед слияние, так что ни о слиянии не совершать
  8. (master) $ git svn rebase
  9. (master) $ # fix conflicts
  10. (master) $ git svn dcommit
  11. GOTO 4
+0

связанный: http://stackoverflow.com/questions/1129688/git-svn-workflow-feature-branches-and-merge – cregox 2011-02-14 20:16:15

ответ

5

Да, это в основном то, что я делаю при работе с Subversion хранилищ. Ключом к простоте этого является сохранение ветвей Git локально, а не попытка сопоставить их в ветвях Subversion вообще.

Я только заметил, что вы связались непосредственно с моим ответом в этом другом вопросе. Поэтому, возможно, я должен объяснить больше. :)

Я иногда делаю разрешение конфликта в ветке темы, если я ожидаю, что некоторые конфликты будут работать. В противном случае, если я не ожидаю много конфликтов, я мог бы скомпилировать сначала, прежде чем делать git svn rebase. Это не имеет большого значения.

Ключевым моментом является то, что Git настолько гибкий, что рабочий процесс минимальный очень прост. Вы добавили к нему ветку темы; Я добавил, что в ветке темы добавлено.

0

Безопасно, если вы делаете шаги 5, никогда не переключайтесь на мастер и не делаете «git svn rebase». Else, я бы порекомендовал сделать «git rebase master» между шагами 5 и 6.

2

Из моего краткого опыта я сделал небольшие изменения в свой рабочий процесс и добавил комментарии:

  1. (master) $ git svn init <path> (или (master) git svn clone <url>)
  2. (master) $ git svn fetch
  3. (master) $ git svn rebase (начать цикл, разрешения конфликтов)
  4. (master) $ git checkout -B topic-branch (тщательный перед этим)
  5. (topic-branch) ## HACK HACK COMMIT HACK COMMIT (использование третьего партия)
  6. (topic-branch) $ git checkout master
  7. (master) $ git rebase topic-branch (разрешения конфликтов)
  8. (master) $ git svn rebase (разрешать конфликты, если таковые имеются)
  9. (master) $ git svn dcommit (осторожны чтение здесь)
  10. GOTO 3 (или 4, если нет необходимости переустанавливать снова)

Я использую ведущий филиал только для интеграции с SVN и все работает на topic-branch, точно так же, как я считаю. Надеюсь, это имеет смысл, поскольку я не мог использовать ваш рабочий процесс так, как это было, даже если бы это было в основном то, что я хотел - очевидно! :-)

Более подробная информация о корректировках, которые были сделаны:

  • Внимание к капиталу -B на шаге 4, он будет сброс на тему-ветви, так что всегда новое от текущей SVN. без него цикл прерывается, давая ошибку «ветвь уже существует».
  • Этап 7 с использованием rebase, а не merge. да, это, вероятно, будет быстрое слияние, но лучше безопасно, чем жаль. если что-то сделано между этапами 6 и 7.
  • Петля до 3 вместо 4. Также просто играть на безопасной стороне. Кажется, что использование svn rebase никогда не является злоупотреблением, и поскольку это всегда делается на сервере, всегда есть ветви в качестве резервной копии.
Смежные вопросы