代码之家  ›  专栏  ›  技术社区  ›  dmkc

git svn和远程git repo同步

  •  10
  • dmkc  · 技术社区  · 16 年前

    在我的工作场所,我们使用SVN进行版本控制。当我发现这一点时,我切换到gitsvn,最近我决定将我的一些私有分支同步到另一个远程git repo。然后,工作流程包括通过git SVN从SVN repo重新调整并推送到SVN repo,同时处理推送到远程git repo的单独私有功能分支,以便我可以在家中处理它们(如果需要)。

    现在,每次我从gitsvn重设基础时,我的远程git回购都会要求首先被拉取。有时,在执行拉操作时,更改不会干净地合并,即使远程repo应该包含与本地同步svn的提交相同的提交。最近,我在将远程分支再次推送到远程回购之前删除了这些分支,但这是不对的。

    谢谢您!

    3 回复  |  直到 16 年前
        1
  •  7
  •   jstevenco    15 年前

    这样做是可能的,但需要注意的是,它需要一些小心,而且很可能在涉及的提交者数量方面有限制。我的用例基本上就是mitjak所描述的:一个用户需要和/或希望使用两个远程存储库,一个SVN,另一个Git。在我的例子中,前者在防火墙后面工作,而另一个在异地(也是私有的)。目标是能够使用Git处理存储库的本地副本,并让两个远程存储库都满意。

    我的程序:

    这一切都取决于 git svn dcommit git svn rebase 然后] git svn数据提交

    1. 从另一个本地“纯git”存储库推送到远程git存储库,然后
    2. 同步混合git/svn存储库,然后
    3. 将这些更改推送到SVN存储库。

    git push 到远程git存储库。

    第2步同样没有问题;回到您的git/svn混合存储库中, git pull

    第三步是过程变得有点棘手。你可以 git svn数据提交

    在拉入步骤2中,我注意到相关的开始SHA1;例如。,

      git pull
      someone@example.org's password: 
      remote: Counting objects: 5, done.
      remote: Compressing objects: 100% (3/3), done.
      remote: Total 3 (delta 0), reused 0 (delta 0)
      Unpacking objects: 100% (3/3), done.
      From ssh://example.org/pub/scm/demonstrate
        34b6260..17cd887  master     -> origin/master
      Updating 34b6260..17cd887
      Fast forward
        file3 |    2 +-
        1 files changed, 1 insertions(+), 1 deletions(-)
    

    git log origin 应该确认这是远程git存储库中最后一次提交,并且与git svn id关联。然后我执行以下操作:

    git push -f origin 34b6260:master
    

    执行远程存储库的强制更新以排除我从“pure-git”本地存储库中所做的“pure-git”提交—小心使用!在本例中,我知道我在本地有这些提交;它们只是有不同于dcommit的SHA1。那么我 git推送 向远程存储库中添加“git svn id”——我刚刚删除的提交版本,远程存储库是同步的。

    最后一步是将“纯git”本地存储库与远程git存储库重新同步,但类似的操作会产生令人满意的结果。在本例中,远程git存储库现在包含提交的“git svn id”版本,而本地“pure git”存储库仍然包含原始的SHA1 git fetch git reset --hard origin 强制本地git存储库镜像远程存储库的状态。

        2
  •  5
  •   alondono    10 年前

    chapter 9.1 of Pro Git

    不要重写你的历史并再次尝试推送,也不要推送到一个并行的Git存储库来同时与Git开发人员协作。颠覆只能有一个单一的线性历史,混淆它是非常容易的。如果你和一个团队一起工作,有些人在使用SVN,有些人在使用Git,确保每个人都在使用SVN服务器进行协作这样做会让你的生活更轻松。

    1. “不要推到并行Git存储库”,以及
    2. “Subversion只能有一个线性历史”,

    更新时间:2010年9月1日,晚上8:37

    你可能想看看这个部分 Advanced: Linking another, remote GIT repository to your GIT and GIT-SVN 同步存储库

        3
  •  0
  •   Bruno    16 年前

    也许 this thread 可能有兴趣,尽管git svn可能已经改变了。

    我也会用 fetch pull 并快速查看是否会使用以下工具发生冲突: gitk