Подтвердить что ты не робот

Git -svn: создать и нажать новую ветку/тег?

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

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

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


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

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

4b9b3361

Ответ 1

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

$ 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

Ответ 2

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

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

    $ svn cp http://svn-repo/my_app/[email protected] 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

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

Ответ 3

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

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