Git-SVN Merge потерял мою ссылку на транк - PullRequest
0 голосов
/ 09 февраля 2012

РЕДАКТИРОВАТЬ: я вижу, что этот вопрос был задан ранее! git-svn: сброс отслеживания для мастера Кто-то с правами доступа может закрыть его как дубликат.

Я использую git-svn. Я недавно закончил работу над веткой в ​​git, которая отслеживала ветку в SVN. Работая в ветке, я использовал следующие две команды

$ git svn rebase
$ big svn dcommit

и все было хорошо. "master" в git отслеживал svn / trunk, а "myBranch" в git отслеживал svn / branch / myBranch. Но после того как я все локально слил в git

$ git checkout master
$ git merge myBranch

Я пошел, чтобы нажать ... и предположил, что мастер будет нажимать на SVN / trunk. Но это не так. Вместо этого «master» теперь также отправляет svn / branch / myBranch. Каким-то образом, когда я слил «myBranch» в «master», отслеживание «master» изменилось.

Возможно, я делаю это неправильно - но я пытался явно "протолкнуть" к транку ...

$ git svn dcommit remotes/trunk master

Но этот синтаксис не удался, и теперь у меня есть

$ Committing to http://<repo>/trunk ...
dcommitted on a detached HEAD because you gave a revision argument.
The rewritten commit is: b461234...

со стволом SVN, все еще не обновленным.

Как мне объединить git, а затем отправить его в SVN? Я следовал руководству здесь , которое подразумевает, что я могу слиться с обычным синтаксисом git. Он просто не отслеживает и не объясняет, почему мой «мастер» не отслеживает ветвь, в которую я сливаюсь.

У меня также есть git-tower , который я использую параллельно с командной строкой, и после того, как я вручную слил, как указано выше, tower теперь «показывает» все удаленные ветви в выпадающем меню, чтобы «нажать» или dcommit to, но я не могу изменить выбор из svn / myBranch ... что может означать, что я не могу?

Ответы [ 2 ]

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

Нет, вы не можете совершить git-слияния в Subversion.

Прочтите этот параграф о проблемах с ветвлением git svn по ссылке, которую вы дали:

Когда вы освоитесь с рабочим процессом Git, вы, скорее всего, создадите ветки тем, поработаете над ними, а затем объедините их. Если вы отправляетесь на сервер Subversion через git svn, вы можете захотеть перебазировать вашработать на одну ветку каждый раз вместо слияния ветвей вместе.Причиной предпочтения перебазирования является то, что Subversion имеет линейную историю и не обрабатывает слияния, как это делает Git, поэтому git svn следует только за первым родителем при преобразовании снимков в коммиты Subversion.

Запуск dcommit в веткес объединенной историей работает нормально, за исключением того, что когда вы смотрите историю своего проекта Git, она не переписывает ни один из коммитов, сделанных вами в ветви эксперимента - вместо этого все эти изменения появляются в SVN-версии одного коммита слияния.

Когда кто-то еще клонирует эту работу, все, что он видит, это коммит слияния со всей работой, вложенной в него;они не видят данные коммита о том, откуда он и когда был зафиксирован.

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

Если master отслеживает ваш svn пульт, вы можете просто сделать:

git svn dcommit

Пока вы на master. Используйте --dry-run, чтобы увидеть, куда направляется ваш коммит, чтобы быть уверенным! Если он не работает, вы можете отредактировать .git/config и исправить запись svn-remote:

[svn-remote "svn"]
     url = svn+ssh://some.machine.net/svn/path/to/tree
     fetch = trunk:refs/remotes/trunk

Или как там должно быть.

...