Бесконечная история GIT - что я здесь не так делаю? - PullRequest
2 голосов
/ 25 октября 2009

Я бы хотел синхронизировать локальный GIT-репозиторий с удаленным GIT и SVN-репозиторием.

Я выполняю следующие шаги:

> git push
Everything up-to-date

> git pull
Already up-to-date.

Хорошо, мои удаленные репозитории GIT пока что в порядке.

> git svn rebase
First, rewinding head to replay your work on top of it...
Applying: Fixing some javadoc problems.
Using index info to reconstruct a base tree...
<stdin>:13: trailing whitespace.
\t
<stdin>:21: trailing whitespace.
\t\t\t\t<configuration>
<stdin>:22: trailing whitespace.
\t\t\t\t\t<links>
<stdin>:23: trailing whitespace.
\t\t\t\t\t\t<link>http://java.sun.com/javase/6/docs/api/</link>
<stdin>:24: trailing whitespace.
\t\t\t\t\t</links>
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging lilith-parent/pom.xml
Я заменил вкладки на \ t для ясности.

Это слияние, которое я уже сделал, ранее ...
Теперь у меня есть новая локальная версия.

> git svn dcommit
[commits the new version to SVN... again...]

Теперь master и trunk находятся во главе моего локального хранилища.

> git push
To ssh://huxhorn@lilith.git.sourceforge.net/gitroot/lilith/lilith
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'ssh://huxhorn@lilith.git.sourceforge.net/gitroot/lilith/lilith'

Это означает, AFAIK, что я должен сначала выполнить тягу. Тааак ....

> git pull
Already uptodate!
Merge made by recursive.

что возвращает меня к самому началу ... :( Сполосните и повторите.

У меня такое ощущение, что я упускаю здесь довольно важный момент. Кто-нибудь может мне это объяснить?

Ответы [ 3 ]

4 голосов
/ 25 октября 2009

Самая большая подсказка - ошибка в толчке:

! [rejected] master -> master (non-fast forward)

Это означает, что вы - ветка subversion, и ваша удаленная ветка master git ни о чем не договаривается. Некоторое изменение было перенесено / зафиксировано для одного, которого нет в другом. Запустите gitk --all, и это должно дать вам ключ к пониманию того, что пошло не так - ищите «вилки» в истории. Ищите ветви [origin/master], [master] и [trunk]. Источник может находиться в другой ветке от вашего текущего мастера - git svn rebase может вызвать это.

Обычно, если вы выполняете коммит через svn и git, лучше оставить ветку master git идентичной ветке subversion и работать над другой веткой в ​​git. Смотрите этот другой вопрос о работе с git и subversion .

4 голосов
/ 25 октября 2009

Одна ветка не может быть отслежена как с svn через git-svn, так и с git через push / pull. Вы должны разделить эти две ветви и сделать git rebase на синхронизированных ветках локально, когда вы хотите передать коммиты между этими ветками

1 голос
/ 27 октября 2009

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

Если вы хотите избавиться от предупреждений о пробелах, выполните

$ git config --global apply.whitespace nowarn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...