Я использую Git-Svn для взаимодействия с хранилищем Svn на работе, и я не могу найти способ эффективно разрешать конфликты на всю жизнь. Я читал другие вопросы по этой теме, но, очевидно, мне нужно что-то еще более коррективное, потому что я всегда оказываюсь в каком-то бесконечном цикле. Я перезагружаюсь, использую mergetool (meld) для разрешения моих конфликтов и, когда дохожу до конца всего этого, я пытаюсь выполнить dcommit и получаю конфликт слияния во время ошибки фиксации.
Я знаю, что это похоже на дубликат, но разочарование заставляет меня снова спрашивать, с некоторыми очень конкретными деталями о том, как я поступаю по этому поводу, так что, надеюсь, кто-то может сказать мне, где мой процесс облажался.
Моя настройка:
У меня есть удаленный филиал (svn / trunk), локальный филиал (trunk) и другой локальный филиал, в котором я обычно работаю (working-trunk). транк был извлечен из svn / trunk, а рабочий транк был извлечен из trunk.
Вот что я делал:
- На моем сундуке
git svn rebase
(возвращает конфликты)
git mergetool
- [разрешить конфликты для этого файла]
- Сохранить объединенный файл из слияния и закрыть слияние.
git add .
git rebase --continue
- [промыть, повторить]
- Если я получаю сообщение с вопросом, использовал ли я
git add
, я git rebase --skip
Когда я заканчиваю все зарегистрированные изменения, все просто останавливается, и я думаю, может быть, я не уверен, что делать в этот момент. Git не показывает ничего, чтобы быть совершенным, и я, кажется, вернулся в багажник. Затем Git позволяет мне выполнять коммит, но если я сразу же после этого пытаюсь выполнить перебазирование, я в конечном итоге заново разрешаю только что разрешенные конфликты.
Здесь явно есть критическая часть, которую я пропускаю, но я просто ее не вижу, и это вызывает много проблем и разочарований. Слияния в Git могут быть простыми, но я не уверен, что это так.
Спасибо.
ОБНОВЛЕНИЕ: Просто хотел выпустить быстрое обновление, чтобы описать мой рабочий процесс на случай, если это часть (или все) проблемы.
Для начала, после клонирования моего хранилища с префиксом svn/
, у меня есть удаленная ветка svn/trunk
. Учитывая, что:
- Я
git co -b trunk svn/trunk
чтобы проверить мой пульт в местном филиале.
- I
git co -b working-trunk
для создания рабочей ветви, которую я использую для создания еще одной степени разделения, чтобы моя локальная магистраль всегда могла отражать мою удаленную магистраль.
- Я удаляю основную ветку по умолчанию (при работе с svn мне легче думать в терминах "trunk", а не "master").
После того, как у меня есть все мои ветви, мой типичный рабочий процесс выглядит так:
- На рабочий ствол , я делаю свои изменения и фиксирую их.
- Я
git co trunk
и делаю git svn rebase
.
- Предполагая, что новый код был перебазирован, я
git rebase working-trunk
.
git co working-trunk
git merge trunk
git rebase trunk
git co trunk
git merge working-trunk
git svn dcommit
Это много шагов, я знаю, но это то, что рекомендовали все здесь и в других местах. Может ли мой роковой недостаток быть где-то в этом процессе?
Еще раз спасибо.