Git SVN рабочий процесс, делая ветви в GIT-SVN - PullRequest
3 голосов
/ 20 декабря 2010
git version 1.7.3.3

У меня был проект, который использовал git.

Наша компания изменила свою политику и хотела, чтобы все переключились на svn.

Поэтому я импортировал свой проект в Subversion, используя стандартныймакет (ствол, ветви и теги).

Итак, мой текущий рабочий процесс выглядит следующим образом:

Внесите некоторые изменения, поместите их в область подготовки, а затем передайте их в git.Тем не менее, я немного запутался, когда дело доходит до SVN.Сначала я делаю ребаз, чтобы получить последние изменения от Subversion.Затем я делаю dcommit.

то есть

Создайте файлы изменений

git stage app_driver.c

Передайте их в git

git commit -m"Added some changes"

Получите последние изменения отSVN

git svn rebase

зафиксировать мои последние изменения в SVN

git svn dcommit

отправить изменения в мой репозиторий Git

git push upstream my_project

Однако настоящая путаница возникает, когда ясоздать новую ветку в git, и как я могу зафиксировать эту ветку в subversion.

git checkout -b add_new_feature

Тогда как мне сделать новую ветку в svn и зафиксировать ее?

Большое спасибо залюбые предложения,

Ответы [ 2 ]

3 голосов
/ 20 декабря 2010

Обычно я создаю ветку в subversion, используя svn copy.

Например, предположим, что мой ствол находится в https://svnserver/svn/MyProject/trunk, и я хочу создать ветку в https://svnserver/svn/MyProject/branches/my-branch, Я бы сделал:

svn copy https://svnserver/svn/MyProject/trunk https://svnserver/svn/MyProject/branches/my-branch

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

Если вы начали свой проект с помощью git svn init --stdlayout, ваша ветка появится, когда вы выполните git branch -r.Затем вы можете оформить заказ следующим образом:

git checkout -b my_local_branch_name my_remote_branch_name

Примечание: не используйте одно и то же имя для вашего локального филиала и для вашего удаленного филиала, или git будет жаловаться (хотя это работает.)

Тогда вы можете работать как обычно.

1 голос
/ 21 декабря 2010

В этом случае я бы сначала сделал ветку в subversion, так как кажется, что вы хотите иметь ветку долгосрочной разработки, которая позже будет объединена с содержимым /trunk.

.

Когда я хочу сделать краткосрочное исправление для всего, что находится в / trunk, я делаю то, что вы хотите сделать:

git checkout -b add_quick_change

и переоденься.

Затем, когда я хочу поместить его в / trunk:

git checkout master
git pull --no-squash . add_quick_change
git svn dcommit

Это должно скопировать всю историю в master, чтобы она оказалась в subversion после dcommit.

...