Я использовал Git в качестве толстого клиента для репозитория Subversion, и это было здорово. Я должен следовать методологии «один коммит на Trac-билет», но я предпочитаю иметь богатую историю атомарных коммитов для моей собственной выгоды, поэтому у меня появилась следующая привычка:
- Создать ветку темы для билета Trac
- взломать, сделать несколько коммитов
- Используйте
git rebase -i
на отключенном HEAD, чтобы объединить всю работу в один коммит (сохраняя ветку темы без изменений)
- Используйте
git svn dcommit
для фиксации в SVN
- Объединить элемент обратно с
master
, затем объединить с trunk
до master
(этот второй шаг обычно не используется, так как ствол и ветвь объекта должны совпадать)
Это прекрасно синхронизирует master
и trunk
, сохраняя всю историю, которую я хочу. Единственная проблема в том, что Git считает, что master
всегда намного опережает trunk
, поскольку, насколько он знает, я ни разу не зафиксировал ни ветку темы, ни master
назад к trunk
- шаг # 3 проигрывает Происхождение изменений, так что все, что видит Git, - это trunk
, напевающее само по себе и master
сливающееся как из него, так и из веток темы:
Switched to branch 'master'
Your branch and 'trunk' have diverged,
and have 232 and 1 different commit(s) each, respectively.
Теперь я на самом деле не знаю , что это проблема. Я в основном только один, работающий в этом репозитории SVN, так что не так уж сложно, чтобы иметь дело с хитрыми слияниями. Но это беспокоит меня, просто в принципе (я такой). Я бы хотел, чтобы trunk
зафиксировал отражение их «истинной» родословной - каждый из них является слиянием с предыдущей версией SVN в качестве одного родителя и ветвью темы в качестве другого.
И, о чудо, есть .git/info/grafts
, который, кажется, делает именно то, что я хочу. Я могу даже объединить trunk
в master
как ускоренное слияние , что морально обычно так и есть. Но, несмотря на то, что результаты могут быть, они кажутся грязными, тем более что это может быть совершенно необязательно.
Так что я хочу знать, есть ли что-нибудь опасное в этой идее? Если, скажем, у меня появляется привычка делать прививку каждый раз, когда я танцую rebase
/ dcommit
, я прошу о проблеме? Должен ли я просто покончить с собой? : -)