永无止境的GIT故事 - 我在这里做错了什么?

时间:2009-10-25 19:32:02

标签: svn git

我想让本地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,我必须首先执行拉动。 SOOOO ....

> git pull
Already uptodate!
Merge made by recursive.

让我回到最开始...... :(冲洗并重复。

我觉得我在这里错过了一些非常重要的观点。任何人都可以向我解释这个吗?

3 个答案:

答案 0 :(得分:4)

无法使用svn通过git-svn和git通过push / pull跟踪一个分支。当你想在这些分支之间传递提交时,你应该将这两个分支分开并在本地的同步分支上执行git rebase

答案 1 :(得分:4)

最大的线索是推送错误:

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

这意味着你是subversion分支,你的远程git master分支不同意某事。某些更改被推送/提交到一个不在另一个中的更改。启动gitk --all,它应该给你一个关于出了什么问题的线索 - 在历史中寻找“叉子”。请注意分支[origin/master][master][trunk]。原点可能与您当前的主人不同的分支 - git svn rebase可能导致该原因。

一般来说,如果你通过svn和git提交,你最好保持git master分支与subversion one相同并在git中处理另一个分支。请参阅this other SO question about working with git and subversion

答案 2 :(得分:1)

您可能还想查看博文Best branching practices with git-svn,其中包含一些与此相关的有用提示。

如果您想摆脱空白警告,请执行

$ git config --global apply.whitespace nowarn