如何让本地svn-git repo与.svn保持同步?

时间:2012-12-04 09:40:22

标签: git svn git-svn

我正在开发一个使用SVN作为存储库的项目,我将它与Netbeans SVN插件结合使用。我发现Netbeans SVN diff缺少彼此之下显示的几个差异,因此希望使用git-svn来使用git gui

问题是现在保持两个存储库同步。我目前的工作流程是:

  • 更新(没有本地更改):

    svn up
    git stash -u # include new files too
    git svn rebase
    git stash drop
    
  • Comitting:

    git commit
    git commit ...
    git svn dcommit
    

这些基本案例确实有效,但如果我有本地未经暂停/未经注册的更改,它就无法正常工作。

保持本地git-svn和.svn同步的更好方法是什么?

1 个答案:

答案 0 :(得分:0)

我找到了一个非常好的解决方法。我们的想法是使用subversion保持文件更新,并让git只更新其历史记录而不触及工作树中的任何文件。 git svn创建了一个特殊的git-svn分支,其中包含一次获取的最新subversion代码。

更新文件的命令,然后是git repo历史记录更新:

svn up
git svn fetch
git reset --mixed git-svn

最后git reset --mixed命令是确保git知道您的文件来自最后一个SVN修订版所必需的。请注意,此命令将重置您使用git commit进行的任何提交(删除提交消息,而不是更改)。作为解决方案,请通过svn commit提交并获取您的历史记录,如上所示。

git reset --mixed git-svn无法让你承诺使用dcommit。运行git reset --mixed git-svn后,按照以下顺序使用git:

进行提交
git stash
git svn rebase
git stash pop
git commit ...
git svn dcommit