我的队友和我正在努力让我们的svn存储库与我们的git同步。 我们正在开发一个项目,我们被要求在svn存储库(由assembla.com网站托管)上共享我们的代码。 由于我们习惯使用git对我们的代码进行版本控制,因此我们决定充分利用git提供的git svn功能。 为了分享我们的所有工作并将其分成正确的分支,我们还有一个远程存储库用于git(bitbucket)。
到目前为止,我们使用git承诺的所有工作都没有给我们带来任何问题,但是在错误出现后同步svn存储库错误。
我按照这个答案Pushing an existing git repository to SVN将svn存储库连接到git one,但经过几次合并和提交后,我收到错误,我无法再拒绝更改。
现在我有一个分支,它是svn / trunk
的副本$ git checkout -b assembla_copy -t svn/trunk
Branch assembla_copy set up to track local ref refs/remotes/svn/trunk.
Switched to a new branch 'assembla_copy'
$ git svn rebase svn/trunk
Current branch assembla_copy is up to date.
要与我的主分支同步,我都试图
git merge master
和
git rebase master
但是git rebase master
开始应用自第一次提交以来的所有更改并且提供了大量的冲突(当我已经在svn / trunk中进行了这些更改时,因为在某种程度上我设法推动了一些对在线存储库的更改;我们目前正在进行更新),git merge master
没问题,但是当我提交时,所有的更改都只在一个提交中汇总,其中它指出“合并分支'master'到assembla_copy “,虽然我更希望它会提交所有单独的提交(就像它在开始时一样......)。
如果我从主分支中提交,则所有提交都是分开的,但是主分支是重新分支的,因此所有具有主提交作为父分支的分支都显示为与主分支分开。
你能否向我解释一个正确的工作流程,让你拥有一个镜像git存储库的svn存储库,所有的工作都完成了(svn只是一个副本)? 您是否可以使用标准的git命令而不是复杂的bash脚本,正如我在上周搜索解决方案时在一些答案中看到的那样?
谢谢!
答案 0 :(得分:8)
我正在使用以下工作流程,目标是将本地git repo作为远程SVN存储库的某种奇特的svn客户端。
git svn clone ...
初始化存储库。这使得主分支跟随SVN中继 - 在你的情况下这应该是svn / trunk。git checkout -b local
。在您的情况下,这将是master
。git checkout -b feature
git checkout master
git svn rebase
- 获取SVN更新local
git rebase --onto master local feature
- 功能分支与local
基线相比所做的更改已应用于master
分支git checkout master
,git merge feature
git svn dcommit
- 提交对SVN的更改git checkout local
,git merge master
- 就像其他人已向SVN提交了某些内容一样。希望这有帮助。