Как вы используете git svn?

Пожалуйста, предоставьте советы для эффективного использования git с помощью svn. Каковы ваши "лучшие практики"?

Ответы

Ответ 1

Когда вы создаете клон, используйте --prefix=svn/. Он создает более приятные имена ветвей.

Кроме того, не следует пренебрегать аргументами --trunk, --tags и --branches при выполнении clone или init.

Извлечение является одним из наиболее трудоемких шагов, поэтому установите задание cron, чтобы сделать git svn fetch в фоновом режиме. Это безопасно, потому что выборка не влияет ни на одну из ваших рабочих ветвей.

(Фоновая информация о git svn fetch: эта команда выполняется сначала, когда вы делаете git svn rebase, поэтому, выполняя этот шаг заблаговременно, ваш вызов git svn rebase обычно будет быстрее. Команда fetch загружает SVN и прикрепляет их к специальным ветвям, управляемым git -svn. Эти ветки можно просмотреть, выполнив git branch -r, и если вы сделали вышеуказанный шаг, они начинаются с "svn/".)

Убедитесь, что вы знаете, как использовать git reflog. У меня было несколько случаев, когда git svn dcommit умер (обычно, потому что я пытался проверить что-то огромное), и мой коммит, казалось, был потерян. В каждом случае коммит был легко найден в reflog.

Ответ 2

Вот некоторые из которых я недавно узнал:

  • всегда делайте git svn rebase перед выполнением git svn dcommit
  • когда вы делаете dcommit, делайте это из временной промежуточной ветки - если вы (или git) испортились, ее намного легче восстановить, просто удалив ветку и начиная с

Когда svn dcommit умирает на полпути через большую фиксацию, и вы, кажется, потеряли всю свою историю, выполните это:

Как восстановить:

Сначала откройте .git/logs/HEAD

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

Вернитесь в текущую рабочую директорию:

git reset --hard < hash из журнала >

Это возвращает ваш рабочий где это было, прежде чем вы сделали git - svn dcommit. Тогда:

git -svn rebase git -svn dcommit

Ответ 3

Если в вашем репозитории SVN есть крюк post-commit, который может отклонить коммиты, то git svn dcommit прекратит обрабатывать, совершив первый раз, когда фиксация будет отклонена, и вам придется восстановить оставшиеся фиксации из git reflog.

Собственно, я думаю, что вышеупомянутая проблема была вызвана тем, что мой корова-оркер не запускал git rebase -i правильно, пытаясь исправить отклоненные коммиты. Но благодаря рефлогу мы смогли восстановить все!

Ответ 4

Я немного рассказывал о том, как жить с Subversion и Git, и я также создал пару рудиментарных скринкастов. Все собралось здесь: http://www.tfnico.com/presentations/git-and-subversion

Я попробую резюме:

  • Просто иди! Не помешает попробовать:)
  • Начните с небольшого проекта Git, чтобы узнать сначала.
  • Придерживайтесь командной строки, пока не освоите ее. Инструменты GUI могут вас просто смутить.
  • Если возможно, выполните одноразовые миграции, оставьте SVN позади, по одному проекту за раз, начиная с небольших.
  • Если вам нужно жить вместе с Git и SVN вместе, имейте в виду, что вам нужно отказаться от многих преимуществ, которые вы получаете от Git, таких как ветки, но вы получаете "локальные" преимущества (stash, index, скорость).
  • Если вы один пользователь Git, просто выполните git -svn rebasing и dcommitting самостоятельно.
  • Если вы несколько соавторов Git, настройте центральный Git/SVN, который извлекает только из SVN, а каждый git -user обращается непосредственно к SVN. Подробнее здесь.