【问题标题】:How can I keep a local svn-git repo in sync with .svn?如何使本地 svn-git 存储库与 .svn 保持同步?
【发布时间】:2012-12-04 09:40:22
【问题描述】:

我正在开发一个使用 SVN 作为存储库的项目,我将它与 Netbeans SVN 插件结合使用。我发现 Netbeans SVN diff 缺少显示彼此下方的几个 diff,因此想使用 git-svn 以便能够使用 git gui

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

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

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

    git commit
    git commit ...
    git svn dcommit
    

这些基本案例确实有效,但如果我有本地未暂存/未提交的更改,则效果不佳。

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

【问题讨论】:

  • 这本 Pro Git 书籍的 Git and Subversion chapter 可能会有所帮助。
  • @Mightymuke 不,它没有给我新的见解或解决问题。

标签: git svn git-svn


【解决方案1】:

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

更新文件的命令,后跟 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

【讨论】:

    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多