Git-SVN: создать и нажать новую ветку / тег? - PullRequest
54 голосов
/ 22 марта 2010

После клонирования репозитория SVN с помощью git-svn с опцией -s (git svn clone http://server/repo -s), как создать ветку или тег и перенести их в соответствующий каталог ветки / тега в репозитории при dcommit

Например; если бы я использовал git для создания ветки foobar локально (git checkout -b foobar), как я могу создать git-svn create ветку на сервере (http://server/repo/branches/foobar)?

Я использую Git 1.5.5.6.


Обратите внимание:

Принятый ниже метод не работает с Git 1.5.5.6 , так как метод git svn branch отсутствует. Я все еще ищу решение этой проблемы, которое не включает в себя решение работать с SVN напрямую.

Ответы [ 3 ]

71 голосов
/ 26 марта 2010

Вы можете прочитать все мельчайшие подробности в этом учебном пособии , но суть в основном следующая:

$ git svn branch -m "Topic branch" my_topic            # Create SVN branch called "my_topic"
$ git checkout --track -b my-topic remotes/my_topic    # Create the Git branch for "my_topic"
# Hack hack hack...
$ git svn dcommit --dry-run    # Make sure you're committing to the right SVN branch
$ git svn dcommit              # Commit changes to "my_topic" branch in SVN
55 голосов
/ 23 марта 2012

Если вы создали свою локальную ветку до того, как существовала ветка subversion, и теперь вы хотите перенести свою локальную ветку в ветку subversion, вы можете сделать следующее:

Получить версию ветки svn, назначенную для локальной ветки

$ git svn info

из выходных данных, поле URL будет текущим путем ветви svn, а поле Revision будет номером ревизии subversion

Создайте ветку svn из ревизии, в которой вы создали локальную ветку

$ svn cp http://svn-repo/my_app/trunk@123 http://svn-repo/my_app/branches/feature1

Получите новую ветку svn, чтобы ваш git-репозиторий знал об этом

$ git svn fetch

ветка svn теперь должна быть добавлена ​​в качестве удаленного в вашем репозитории git $ git branch -a * feature1 master remotes/feature1

На этом этапе ваш пульт все еще будет транком. Вам нужно указать локальную ветку на новую удаленную ветку. Вы можете сделать это, перебазировав свой локальный филиал из удаленного филиала: $ git rebase remotes/feature1

Теперь, когда ваша локальная ветвь ссылается на вашу удаленную ветку, вы можете зафиксировать свои изменения в ней. Сначала выполните пробный прогон, чтобы убедиться, что ваши изменения войдут в удаленную ветку: $ git svn dcommit --dry-run Commiting to http://svn-repo/my_app/branches/feature1

Теперь вы можете вносить изменения в вашу удаленную ветку $ git svn dcommit

Большинство инструкций скажут вам сначала развернуть ветку subversion, а затем создать локальную ветку, которая отслеживает удаленную ветку. Но я часто заранее не решаю, должен ли мой локальный филиал отслеживать удаленный филиал. Часто я разветвляюсь локально и делаю изменения без какого-либо намерения перенести в удаленную ветку. Если позже я решу зафиксировать свою локальную ветку в удаленной ветке, я выполню шаги, описанные выше.

0 голосов
/ 24 февраля 2012

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

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

...