Ответ 1
см. этот вопрос для введения в git svn branch
и этот вопрос о том, как удалять удаленные ветки - или ниже для полного резюме основ git svn
(включая информацию из упомянутых двух вопросов).
Чтобы дать вам более полное руководство (полная настройка для локальных и удаленных веток, коммандирование, объединение локальных ветвей - см. ниже горизонтальную линию только для настройки ветки), здесь, как легко работать с svn repo:
- Инициализируйте локальное репо git с помощью
git svn clone <url>
либо с параметром-s
(stdlayout), либо с параметрами--trunk, --tags, --branches
, чтобы указать каталог туловища, тегов и ветвей внутри каталога svn.
-s
означает, что svn repo имеет макет каталога, подобный этому
/trunk
/branches/new_feature
/branches/long_fix
/tags/0.0.9
/tags/0.1.0
Если нет, вы можете указать местоположение соединительной линии, ветвей и тегов с приведенными выше аргументами.
Когда вы клонируете репо, вы автоматически приземляетесь в локальную ветку с именем master, которая автоматически отслеживает багаж.
В этом вы делаете свои коммиты так же, как не знаете, что вы клонировали репо с помощью git svn
, за исключением того, что вы не нажимаете commits:
- Используйте
git commit
для совершения транзакций в вашей ветке - Используйте
git branch <branch name>
для создания локальных ветвей - Используйте
git merge <branch name>
для объединения изменений из локальных ветвей - и др.
Вам не нужно беспокоиться о том, что вы находитесь в git svn
-repo, , пока не захотите нажать свои изменения.
Из вышеприведенной настройки у нас есть мастер локального ветки, который отслеживает соединительную линию. Таким образом, после совершения коммитов внутри локальной главной ветки они могут быть перенесены в магистраль с помощью следующей команды:
-
git svn dcommit
(внутри вашего локального мастера)
(Обратите внимание на d в dcommit
).
Чтобы проверить, где вы совершаете транзакции, выполните
-
git svn dcommit -n
Теперь идет интересная часть: создавайте ветки на вашей стороне, которые отслеживаются. На самом деле простое чтение вопроса выше, я просто скопирую и вставлю пример:
-
git svn branch -n -m "Branch for authentication bug" auth_bug
Обратите внимание, что этот пример имеет флаг -n
, который выполняет только сухой запуск. Удалите этот флаг, чтобы сделать это по-настоящему. Команда создает ветку auth_bug в svn repo в каталоге ветвей, который вы указали выше, и
-
git checkout -b auth_bug auth_bug
создает локальную ветвь auth_bug (первый параметр) и позволяет ей следовать удаленной ветке auth_bug (второй параметр), которая сопоставляется с dir /branches/auth_bug
в svn repo. Удаленная ветвь 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" ), вы можете переустановить свою ветку поверх изменения с помощью:
-
git svn rebase
Выполняет новые коммиты в svn, переустанавливает вашу ветку и воспроизводит ваши локальные коммиты (если есть).