2010-11-15 81 views
7

我正在使用git-svn桥接器,并在我的存储库中重新编排了大量文件,因此它的组织性能更好一些。是否安全地中断似乎挂断的dcommit呼叫?

我运行了git svn dcommit将更改放回SVN服务器,并且进程似乎挂起。我在过去45分钟内没有使用CPU,也没有网络使用dcommit电话。输出卡在:

> git svn dcommit 
...snip... 
    R  zlib/vs2005/zconf.h => tools/zlib/vs2005/zconf.h 
    R  zlib/vs2005/zlib.h => tools/zlib/vs2005/zlib.h 
    R  zlib/vs2005/zlib_ds.lib => tools/zlib/vs2005/zlib_ds.lib 
    R  zlib/vs2005/zlib_ds.pdb => tools/zlib/vs2005/zlib_ds.pdb 
    R  zlib/vs2005/zlib_s.lib => tools/zlib/vs2005/zlib_s.lib 
    R  zlib/vs2005/zlib_s.pdb => tools/zlib/vs2005/zlib_s.pdb 

而这就是现在已经有45分钟了。

编辑:它最终结束说HTTPS连接超时。这花了大约一个半小时才能发生。

我似乎无法找到,如果我打断这个dcommit呼吁,什么我需要做之前,我试图从我的本地库重新提交更改回SVN服务器会发生什么任何明确信息。

我可以回答我的问题的一部分:在再次尝试之前我需要做什么?

连接超时后,我的提示被返回,我必须做一个git svn fetch,然后我才能再次运行git svn dcommit。我所有的重命名操作都在SVN存储库中找到,但在洗牌后留空的目录未被删除。我不得不使用我的SVN客户端删除它们。我不确定这是一个git-svn的事情还是因为dcommit调用期间的HTTPS超时。

我仍然不知道答案:是否打断dcommit调用安全?

+1

如果你想让git-svn删除空目录,你应该使用'--rmdir'命令行选项或'svn.rmdir'配置选项。 – ninjalj 2010-11-15 20:55:09

+0

至于你的主要问题,你可能应该在git邮件列表上询问,可能是抄送git-svn的作者。 – ninjalj 2010-11-15 20:56:12

+0

谢谢@ninjalj - 我会试试邮件列表。 – 2010-11-15 20:56:52

回答

5

是的,它是安全的。

dcommit基本上做到这一点每个提交你推到SVN:

  1. 计算的承诺与其父之间的差异。 (本质上,为提交创建补丁。)
  2. 通过SVN协议发送此差异作为要提交的更改集。一旦完成,提交现在位于SVN服务器上。
  3. 获取新提交以及其他用户在此期间创建的任何其他新提交,并将它们本地存储为适当的Git提交。 git-svn分支ref将被更新为指向最新的一个。
  4. 在刚刚处理的git-svn分支引用之后重新提交所有提交。 (由于提交正在处理,现在应该住在服务器上,这将导致本地提交刚处理被丢弃,按照任何其他底垫。)

如果第2步中中断(这是什么听起来像),那么当前的提交将在svn服务器上中止。你应该可以不用担心再次提交。但是,如果你是偏执狂(你应该是在像这样的VCS之间进行互操作时),你可能首先需要运行git svn rebase。这将拉下SVN上的任何新提交(包括您尝试推送的提交,如果它实际上成功地在服务器端)并重新绑定您的本地分支。

+0

谢谢@cdhowie。超时终于回到我的提示后,我确实尝试了rebase。希望我能抓住我从它那里得到的错误。它不愿意从SVN服务器更新我的本地git repo。如果我可以重新创建它,我会发布错误。 – 2010-11-16 20:46:25

+0

这是一个直接的错误还是只是一个补丁冲突? – cdhowie 2010-11-16 20:47:05

+0

这是一个冲突,但我无法弄清楚如何解决它。我最终使用'svn'验证提交,然后用另一个'git svn clone'调用从头开始重新创建本地git存储库。 – 2010-11-17 14:57:27