Можно ли заставить git svn dcommit привести к одному svn commit?
Вопрос
Согласно руководство пользователя, git dcommit
“создаст ревизию в SVN для каждой фиксации в git”. Но есть ли способ избежать нескольких ревизий Subversion?То есть заставить git объединить все изменения перед выполнением svn commit
?
Решение
Если вы работаете над веткой в git, вы можете git-merge --squash
, который делает это внутри git.Затем вы могли бы передать этот сжатый коммит в SVN.
Конечно, множество небольших коммитов хороши, так зачем же вам их уничтожать?
Другие советы
Команда git rebase -i
могу сделать это и многое другое.Эта команда чрезвычайно мощная, поэтому с ней приятно подружиться.
Синтаксис таков: git rebase -i <commit ID>
.Откроется ваш текстовый редактор с опциями (и инструкциями) для изменения всех коммитов вплоть до (не включая) указанного идентификатора.
Например, чтобы изменить предыдущие 5 коммитов, вы можете сделать это:
git rebase -i HEAD~5
Или, если ваша ветвь SVN называется "svn / trunk", то этот синтаксис тоже хорош:
git rebase -i svn/trunk
Затем появится окно текстового редактора.Чтобы раздавить все, измените первое слово в каждой строке после первого с "выбрать" на "раздавить" (если это звучит непонятно - это станет более понятным, когда вы это увидите).Затем сохраните и закройте редактор.Затем у вас будет возможность отредактировать сообщение о фиксации для сжатого коммита.
Среди других вещей, которые вы можете сделать с git rebase -i
, переупорядочивают коммиты, сжимают коммиты различными способами и удаляют коммиты.
Я постоянно использую эту команду;это убийственная функция Git.
Райан Томайко написал немного о git rebase -i
, что он и сказал:
... [это] немного похоже на git commit – изменить, накачавшись кислотой и держа в руках бензопилу - совершенно безумно и довольно опасно, но способно выявить совершенно новые состояния ума.Здесь вы можете редактировать, сквошировать, изменять порядок, разделять и комментировать существующие коммиты таким образом, чтобы это было проще и интуитивно понятнее, чем должно быть.
У меня есть склонность часто совершать коммиты в git, но не обязательно хочу dcommit каждый привязываюсь к svn, и сворачивание всей моей работы имеет столь же мало смысла.Сейчас я пытаюсь изменить порядок и объединить некоторые из них в более логичные блоки фиксации.