Как вы используете 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. Подробнее здесь.