如何同步git svn存储库

如何同步git svn存储库,git,git-svn,rsync,Git,Git Svn,Rsync,过去三周我一直在使用git svn 目前我的工作流程是这样的。 ssh进入我的开发盒 在那里创建/编辑/删除文件(git svn rebase、git checkout-b主题分支) 检查web应用程序是否工作正常 提交到svn。(git rebase主机、git签出主机、git合并主题分支、git svn DCOMIT) 问题 此工作流非常容易在dev box(ssh)上进行快速编辑。但是,随着远程编辑变得越来越慢,它变得越来越困难 注意:我无法在本地计算机上设置web应用程序的精确副本(因为

过去三周我一直在使用git svn

目前我的工作流程是这样的。

  • ssh进入我的开发盒
  • 在那里创建/编辑/删除文件(git svn rebase、git checkout-b主题分支)
  • 检查web应用程序是否工作正常
  • 提交到svn。(git rebase主机、git签出主机、git合并主题分支、git svn DCOMIT)
  • 问题

  • 此工作流非常容易在dev box(ssh)上进行快速编辑。但是,随着远程编辑变得越来越慢,它变得越来越困难
  • 注意:我无法在本地计算机上设置web应用程序的精确副本(因为它从各种来源提取数据,以及许多其他配置)
  • 我想要的是在本地编辑文件、将文件移动到服务器、测试、提交。

    这方面有什么好的工作流程

    我以前的尝试包括,

  • 本地编辑文件、scp文件、测试、DCOMIT
  • 在本地编辑文件、与开发框rsync、测试、dcommit
  • 本地编辑文件、git推送到开发盒、测试、dcommit(由于本地盒在路由器后面,所以无法将git从本地盒拉到开发盒)
  • 我还没有试过最后一步,因为git svn提到如果使用git svn,从另一个git回购中推/拉/合并是危险的

    您能用示例命令建议一些有效的工作流吗


    谢谢

    我可能遗漏了一些东西,但我认为
    git svn
    文档中的警告不适用于我下面建议的工作流。(顺便说一句,我假设您只愿意从dev box中提交
    git svn dcommit

  • 将存储库从dev box克隆到本地计算机上。假设您随后在本地创建了一个名为
    excellent
    的新主题分支。你在那家新分店做些工作

  • 现在,您希望在dev box上测试它,但为了避免推入非裸存储库的问题,您可以使用一种技术,在
    refs/remotes/
    下直接推入ref。例如,您可以执行以下操作:

    git push origin excellent:refs/remotes/from-desktop/excellent
    
  • 现在您应该登录到dev框。然后,您可以根据刚才使用桌面上的“
    git checkout-b excellent/excellent”推送的ref创建一个新分支

  • 您可以像处理示例中的主题分支一样处理此分支,如果您对它满意,请确保在执行
    git svn dcommit
    之前仍然执行相同的顺序,即
    git rebase master
    git checkout master
    git merge-excellent
    git svn dcommit


  • 我不明白为什么该工作流会给
    git svn
    带来问题,因为在执行
    git svn dcommit

    之前,您会小心地重新确定工作基础,并将其合并到
    master
    中。我使用的工作流与您的工作流相反,而且效果很好

    我的意思是,我的git-svn-repo在本地框中,我推到dev框

    有三种回购协议:

  • git svn回购在本地框上
  • 我在dev-box上创建了一个裸repo,然后将它从git-svn-repo推到这一个
  • 在dev框中,我将裸repo克隆到一个用于测试的工作目录中。在最初创建回购协议后,我从上文第2条所述的裸回购协议中提取
  • 我很少在测试报告中进行编辑(#3)。如果我做了一个简单的编辑,我通常只会在本地框的repo#1上手动进行相同的编辑。我有时会将测试回购(#3)中的提交推回到裸回购(#2)中,然后从本地框中将它们拉到git svn回购(#1)中。更常见的情况是,我正在寻找一个难以找到的bug,并直接在测试repo(#3)中进行一系列小的更改,当我找到bug时,我只是扔掉所有这些调试更改,直接在git svn repo(#1)中修复bug,然后推到#2,拉到#3并进行测试

    工作流程是:

  • [本地]git co-b myfeature
  • [本地]黑客
  • [本地]git提交-m'did stuff'-a
  • [本地]git推送devbox myfeature
  • [dev]cd-myapp;git-pull;git共同来源/myfeature
  • [dev]测试
  • 重复2-6次
  • [本地]git联席主管
  • [本地]git svn rebase
  • [本地]git co myfeature
  • [本地]git rebase主机
  • [本地]git联席主管
  • [本地]git合并--仅限ff myfeature
  • [本地]git svn DCOMIT
  • [本地]git br-d myfeature

  • 有时,我会在第8步之前进行交互式重基,以清理历史记录。

    “开发框有一个裸回购,工作区有应用程序签出。”工作区有应用程序签出意味着,你可以从裸回购克隆你的应用程序?。您能详细说明一下吗?当您必须在devbox(快速编辑)中进行编辑时,您会怎么做?您会提交并将其推送到裸回购?从您的本地邮箱发送svn数据文件?当我想要一台本地机器(比如笔记本电脑)时该怎么办。谢谢。@someisaac-为了清晰起见进行了编辑,如果您还有问题,请告诉我。关于另一台本地机器的使用:注意引入另一个回购协议增加的复杂性。一切都必须回到svn,您希望保持一个良好的线性历史记录。你可以在笔记本电脑上创建一个新的git svn repo,也可以克隆我在回答中描述的repo#1。在这种情况下,您必须找出同步到dev box最适合您的方式。谢谢,我将尝试此方式,如果有任何问题,请告诉您。您的工作流程很有趣,就我所尝试的而言,它工作得很好。但目前我正在使用@Mark Longair建议的方法。谢谢。在第三步进行更改后,我如何进行更改以进入本地计算机?从我的本地机器上拉一个git?“git pull origin会没事的吗?”someisaac:如果你想得到y