2014-09-03 60 views
1

我的团队当前使用svn。我希望将git用于我的项目,并且有几个需要一起工作的遥控器。我正在使用一个纯粹的git仓库来为各种git遥控器进行协调。我偶尔需要将我的更改推送给整个团队的svn存储库。我目前有一个现有的svn remote和一个现有的git remote。我用这个方法来SVN添加到我的纯git的克隆(从远程Git):在GIT远程和SVN远程中使用GIT

http://www.draconianoverlord.com/2010/03/05/existing-git-into-svn.html

现在,我得到的一切承诺SVN,但是当我尝试从git的原点变基,就是了合并我的所有变化,并在所有事情上发生冲突。似乎每次我想与其中一个进行交互时,都需要合并并发生冲突。有没有办法避免这种情况?我解开了整个历史的合并和原产地/开发不是任何地方,在我的历史中可以看出...(我想要推送到)

更新:

看来我的历史是由这个搞砸了过程,基本上创建两个单独的历史时间表。所有svn端的变化都与git端发生冲突。那么,是svn远程和git远程不兼容?因为,如果我使用svn,我必须把它变成我的权威遥控器,就是这样吗?

回答

1

那么,svn remote和git remote是不兼容的吗?如果我使用 svn,我必须把它变成我的权威遥控器,就是这样吗?

概括地说,是的。由于manpage解释说:

CAVEATS 

     For the sake of simplicity and interoperating with Subversion, it is 
     recommended that all git svn users clone, fetch and dcommit directly 
     from the SVN server, and avoid all git clone/pull/merge/push operations 
     between Git repositories and branches. The recommended method of 
     exchanging code between Git branches and users is git format-patch and 
     git am, or just 'dcommit’ing to the SVN repository. 

     Running git merge or git pull is NOT recommended on a branch you plan 
     to dcommit from because Subversion users cannot see any merges you’ve 
     made. 

所以,是的,使用时git svn为了简单起见,SVN回购的应该是你的唯一上游库。

这种情况有解决办法,但它们是复杂的,需要的git和git-svn的内部工作机制的良好的知识,所以一般你应该坚持的建议之上。

+0

这很糟糕,但它是有道理的。提交uniqueID不相关,因此它将它们视为两个不同的历史记录。 – 2014-09-04 13:54:25

+0

我认为一个仓库使用git-svn克隆,所有其他git仓库使用它作为它们的起源,它应该工作。这个存储库将是一个薄弱的环节,因为它需要被维护,如果丢失了,所有其他git存储库的git-svn reclone和reclone将是必要的。 – 2014-09-04 14:42:41

+0

@ user197766:git-svn repo仍然会定期重新绑定(git svn rebase) - 这会混淆以其为原点的其他git repos。是的,有办法应付,但它们并不简单。 – sleske 2014-09-04 21:25:28