Как использовать git-svn в качестве промежуточного инструмента просмотра для хранилища SVN? - PullRequest
1 голос
/ 08 декабря 2010

В компании, в которой я работаю, у нас есть политика, согласно которой весь код должен проверяться, прежде чем он будет зарегистрирован в репозитории SVN. Обычно, перед тем как сделать коммит, я просто прошу коллегу проверить, но в этот момент никого нет рядом в течение нескольких дней, и у меня есть несколько задач для одного и того же класса.

Я установил git и использовал git-svn для создания локального хранилища. Я зафиксировал каждое изменение, которое я собираюсь предложить через некоторое время, и с помощью git-svn dcommit я могу синхронизировать свои вещи в главном репозитории.

Теперь возникает вопрос: что произойдет, если мой коллега, который рассмотрит мои материалы в течение нескольких дней, не согласен с одним коммитом или попросит меня внести некоторые дополнительные изменения (например, комментарии к коду)? Как мне это сделать без необходимости делать дополнительный коммит, который в конечном итоге будет отображаться в моем основном репозитории SVN?

Пример, скажем, ради ясности, что я работаю над одним файлом.

  • SVN извлечено rev 1000
  • Добавлено изменение кода A, git commit.
  • Добавлено изменение кода B, git commit.
  • Добавлено изменение кода C, git commit.

Теперь, мой коллега принимает изменения A и C, но не согласен с изменением B и хочет, чтобы больше комментариев было внесено вместе с изменением B. В конечном итоге я хочу получить результат:

  • SVN rev 1001 - Изменение кода A
  • SVN rev 1002 - Модифицированная смена кода B + дополнительные комментарии
  • SVN rev 1003 - Изменение кода C.

Я не очень знаком с git, и довольно хорошо знаком с SVN. Как изменить внесенные мной вклада в изменение кода B без четвертого коммита?

Ответы [ 3 ]

2 голосов
/ 08 декабря 2010

Ключ не должен толкать ваши изменения в SVN, пока они не будут одобрены.После запуска git svn dcommit вы теряете способность Git редактировать и переупорядочивать свои коммиты.dcommit делает ваши изменения общедоступными, а история svn (по большей части) неизменна.

Обычно я делаю свои изменения в ветке и отправляю их в общедоступный репозиторий git, местоположение которого я предоставляю рецензентам кода,Затем я могу продолжить работу над другим проектом в отдельной ветке.Основываясь на отзывах из обзора, я могу внести изменения в ветку в своем рабочем репозитории и переиздать для проверки, и когда все будет готово, я делаю окончательный git svn dcommit, чтобы завершить свои изменения в svn.

2 голосов
/ 08 декабря 2010

Просто создайте ветку и делайте коммиты на этой ветке. Позвольте вашему коллеге позднее просмотреть код, а затем объединить код обратно в транк (например,) или в другую ветку.

1 голос
/ 08 декабря 2010

Во-первых, вам не нужно иметь дополнительную VCS для выполнения проверки кода в вашей компании, прежде чем совершить trunk. Хмарбайз ответ правильный. Правильный (и вменяемый) способ сделать это - создать ветку , внести изменения в ветку, попросить коллегу проверить эту ветку, когда вы закончите, просмотреть код, внести исправительные изменения. ветвь, и тогда тот, кто имеет полномочия, объединит вашу ветвь в trunk. Это основной протокол VCS. Если это не то, как ваша компания делает это, это верный знак, что ваша компания делает это неправильно, когда дело доходит до VCS.

Если вам абсолютно необходимо использовать внешний инструмент, поскольку политика вашей компании бессмысленна, то для решения следующей части вашего вопроса

Пример, скажем, - ради понятность - что я работаю в одном файле.

  • SVN выбрана версия 1000
  • Добавлено изменение кода A, git commit.
  • Добавлено изменение кода B, git commit.
  • Добавлено изменение кода C, git commit.

Теперь мой сотрудник принимает изменения A и C, но не согласен с изменением B, и хочет больше комментариев, чтобы идти вместе с изменением Б. Результат я хочу в конечном итоге это:

  • SVN rev 1001 - Изменение кода A
  • SVN rev 1002 - Изменено изменение кода B + дополнительные комментарии
  • SVN rev 1003 - Изменение кода C.

Я не очень знаком с Git, и Я довольно знаком с SVN. Как я изменить взносы, которые я совершил в изменение кода B, не делая четвертый коммит?

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

Если вы действительно, действительно намереваетесь реализовать всю эту идею, тогда да, вы можете сделать это, и для этого вам необходимо очень осторожно использовать git rebase --interactive. Эта мощная команда может позволить вам вернуться к своим коммитам и полностью изменить изменения, внесенные в каждый из них. Я должен подчеркнуть, что это может привести к потере работы (или, по крайней мере, стоить вам значительного времени на восстановление), и это следует делать только в том случае, если вы очень хорошо знаете сам git.

Но вы действительно, действительно должны использовать SVN-ветвление и слияние, чтобы сделать все это.

...