如何同步git-svn存储库

时间:2011-03-15 11:12:00

标签: git git-svn rsync

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

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

  1. ssh进入我的开发框,
  2. 在那里创建/编辑/删除文件(git svn rebase,git checkout -b topic branch)
  3. 检查网络应用是否正常运行。
  4. 提交给svn。(git rebase master,git checkout master,git merge topic branch,git svn dcommit)
  5. 问题

    1. 此工作流程非常便于在开发框(ssh)上快速编辑。但是随着远程编辑加速变慢,变得很困难。
    2. 注意:我无法在本地计算机上设置我的Web应用程序的确切副本(因为它从各种来源提取数据,以及许多其他配置)
    3. 我想要的是在本地编辑文件,将文件移动到服务器,测试,提交。

      这可能是一个很好的工作流程吗?

      我以前的尝试包括

      1. 在本地编辑文件,scp文件,测试,dcommit
      2. 在本地编辑文件,使用dev box编辑rsync,test,dcommit
      3. 在本地编辑文件,git push到开发框,测试,dcommit(git pull从本地框到开发框是不可能的,因为本地框在路由器后面)
      4. 我没有尝试过最后一步,因为git-svn提到如果你使用git-svn,从另一个git repo推/拉/合并是危险的。

        请您使用示例命令建议一些有效的工作流程吗?

        由于

2 个答案:

答案 0 :(得分:3)

我可能遗漏了一些内容,但我认为git svn文档中的警告不适用于我在下面建议的工作流程。 (顺便说一句,我假设您很乐意只从开发框中git svn dcommit开心。)

  1. 将存储库中的存储库克隆到本地计算机上。假设您然后在本地创建一个名为excellent的新主题分支。你在新的分支上做了一些工作。

  2. 现在你想在dev框中测试它,但为了避免推入非裸存储库的问题,你可以使用一种技术suggested in the git FAQ直接推送到{{{{}下的引用1}}。例如,您可以这样做:

    refs/remotes/
  3. 现在您应该登录开发框。然后,您可以根据刚刚使用git push origin excellent:refs/remotes/from-desktop/excellent

  4. 推送的参考创建新分支
  5. 您可以像在示例中的主题分支一样处理此分支,如果您对此感到满意,请确保在执行git checkout -b excellent from-desktop/excellent之前仍然执行相同的序列,即git svn dcommitgit rebase mastergit checkout mastergit merge excellent

  6. 我不明白为什么该工作流会导致git svn dcommit出现问题,因为在执行git svn之前,您需要小心工作并将其合并到master。< / p>

答案 1 :(得分:1)

我使用的工作流程与您的工作流程相反,效果很好。

通过倒置,我的意思是我的git-svn仓库在我当地的盒子上,然后我推送到开发箱。

有三个回购:

  1. 本地方框上的git-svn回购。
  2. 我在dev框中创建了一个裸仓库,然后从git-svn仓库推送到这个仓库。
  3. 在开发框中,我将裸仓库克隆到我用于测试的工作目录中。在最初创建回购后,我从上面#2中描述的裸仓库中撤出。
  4. 我很少在测试回购中编辑(#3)。如果我做了一个简单的编辑,我通常只需在本地框上的repo#1上手动进行相同的编辑。我偶尔将测试仓库(#3)的提交推回到裸仓(#2),然后从本地框中将它们拉入git-svn仓库(#1)。更常见的是,我正在寻找一个难以发现的错误并在测试仓库中直接进行一些小改动(#3),当我发现错误时,我只是抛出所有这些调试更改并且将bug直接修复到git-svn repo(#1)中,然后推送到#2,进入#3并进行测试。

    工作流程是:

    1. [local] git co -b myfeature
    2. [local] hack hack hack
    3. [local] git commit -m'did stuff'-a
    4. [local] git push devbox myfeature
    5. [dev] cd myapp; git pull; git co origin / myfeature
    6. [dev] test test test
    7. 重复2-6
    8. [local] git co master
    9. [local] git svn rebase
    10. [local] git co myfeature
    11. [local] git rebase master
    12. [local] git co master
    13. [local] git merge --ff-only myfeature
    14. [local] git svn dcommit
    15. [local] git br -d myfeature
    16. 我有时会在第8步之前进行交互式变基,以清理历史记录。