см. этот вопрос для введения в git svn branch
и этот вопрос для того, как удалить удаленные ветви - или ниже для полного резюме основ git svn
(включая информация из двух упомянутых вопросов).
Чтобы дать вам более полное руководство (полная настройка, охватывающая локальные и удаленные ветви, коммиты, объединение локальных филиалов - см. Ниже горизонтальную линию только для настройки филиалов), вот как легко работать с репозиторием SVN:
- Инициализируйте ваше локальное git-репо с помощью
git svn clone <url>
, либо с параметром -s
(stdlayout), либо с параметрами --trunk, --tags, --branches
, чтобы указать каталог транка, тегов и ветвей внутри svn dir.
-s
означает, что репозиторий SVN имеет макет каталога, подобный этому
/trunk
/branches/new_feature
/branches/long_fix
/tags/0.0.9
/tags/0.1.0
Если нет, вы можете указать расположение соединительных линий , ответвлений и тегов с аргументами, приведенными выше.
Когда вы клонируете репо, вы автоматически попадете в местное отделение под названием master , которое автоматически отследит trunk .
В этом случае вы делаете свои коммиты так же, как если бы вы не знали, что вы клонировали репо с git svn
, за исключением того, что вы не выдвигаете коммиты :
- Используйте
git commit
, чтобы совершать коммиты в вашу ветку
- Используйте
git branch <branch name>
для создания локальных ветвей
- Используйте
git merge <branch name>
для объединения изменений из локальных веток
- и т.д. * * тысяча пятьдесят-одна
Вам не нужно беспокоиться о том, что вы находитесь в git svn
-репо, , пока вы не захотите нажать на изменения .
В приведенной выше настройке у нас есть локальная ветка master , которая отслеживает trunk . Поэтому после выполнения коммитов внутри локальной ветки master их можно отправить в trunk с помощью следующей команды:
git svn dcommit
(внутри вашего местного филиала master )
(обратите внимание на d в dcommit
).
Чтобы проверить, куда пойдут ваши коммиты, выполните
Теперь перейдем к интересной части: создайте ветви на вашей стороне, которые отслеживаются. Действительно простое чтение вопрос выше , я просто скопирую и вставлю пример:
git svn branch -n -m "Branch for authentication bug" auth_bug
Обратите внимание, что в этом примере есть флаг -n
, который выполняет только пробный прогон. Уберите этот флаг, чтобы сделать это по-настоящему. Команда создает ветку auth_bug в репозитории svn в директории branch , которую вы установили выше, и
git checkout -b auth_bug auth_bug
создает локальную ветку auth_bug (первый параметр) и позволяет ей следовать за удаленной веткой auth_bug (второй параметр), которая отображается в директорию /branches/auth_bug
в репозитории svn , Удаленная ветвь auth_bug существует, поскольку вы создали ее с помощью команды git svn branch
(и это может быть любая другая ветвь, уже существующая).
Внутри этой локальной ветви auth_bug все ваши коммиты будут отправлены в репозиторий svn в ветвях dir /branches/auth_bug
при выполнении git svn dcommit
(протестируйте его, добавив -n
к команде.)
Чтобы удалить ветку (я раньше этого не делал), похоже, git svn
не справляется с этим для вас, поэтому в соответствии с другим вопросом , вы должны перейти к следующему напрямую, используя команда svn
:
svn rm $URL/branches/the_branch
Это удаляет ветку из удаленного репозитория svn, а затем вы должны удалить ее из локального репозитория git, в зависимости от того, была ли это ветка (как в приведенной выше команде) или тег:
git branch -D -r the_branch
rm -rf .git/svn/the_branch
или
git branch -D -r tags/the_tag
rm -rf .git/svn/tags/the_tag
Чтобы обновить ветку с изменениями из восходящей ветки svn ("pull"), вы можете перебазировать свою ветку поверх изменения с помощью:
Это извлекает новые коммиты в svn, перебазирует вашу ветку и воспроизводит ваши локальные коммиты (если есть).