Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 中断看似挂断的dcommit呼叫是否安全?_Git_Git Svn_Dcommit - Fatal编程技术网

Git 中断看似挂断的dcommit呼叫是否安全?

Git 中断看似挂断的dcommit呼叫是否安全?,git,git-svn,dcommit,Git,Git Svn,Dcommit,我正在使用git svn桥接器,并且已经在我的存储库中重新整理了大量文件,因此它的组织性更好 我运行了git svn dcommit将更改放回svn服务器,进程似乎已挂起。在过去的45分钟里,我的dcommit呼叫没有CPU使用和网络使用。输出卡在以下位置: > git svn dcommit ...snip... R zlib/vs2005/zconf.h => tools/zlib/vs2005/zconf.h R zlib/vs200

我正在使用git svn桥接器,并且已经在我的存储库中重新整理了大量文件,因此它的组织性更好

我运行了
git svn dcommit
将更改放回svn服务器,进程似乎已挂起。在过去的45分钟里,我的
dcommit
呼叫没有CPU使用和网络使用。输出卡在以下位置:

> 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分钟了

Edit:它最后说HTTPS连接超时。这花了大约一个半小时的时间。

我似乎找不到任何关于中断此
dcommit
调用会发生什么的确切信息,以及在尝试再次将更改从本地存储库重新提交回SVN服务器之前需要做什么

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

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

我仍然不知道以下问题的答案:中断dcommit呼叫是否安全?是的,它是安全的

dcommit
基本上对您要推送到SVN的每个提交执行此操作:

  • 计算提交和其父级之间的差异。(本质上是为提交创建修补程序。)
  • 通过SVN协议将此差异作为要提交的变更集发送。完成后,提交现在位于SVN服务器上
  • 获取新提交以及其他用户同时创建的任何其他新提交,并将它们作为适当的Git提交存储在本地。git svn branch ref将更新为指向最新版本
  • 在刚刚处理的提交到提交到的git svn branch ref之后,重新设置所有提交的基础。(由于正在处理的提交现在应该存在于服务器上,这将导致刚刚处理的本地提交被丢弃,正如任何其他重新基址一样。)
  • 如果在步骤2期间中断(听起来是这样的),那么当前提交将在svn服务器上中止。你应该可以放心地再次提交


    但是,如果您是偏执狂(在像这样的VCE之间进行互操作时,您应该是这样),那么您可能希望首先运行
    git svn rebase
    。这将删除SVN上的任何新提交(包括您尝试推送的提交,如果它实际上成功了服务器端),并在其上重新设置本地分支的基础。

    如果您希望git SVN删除空目录,您应该使用
    --rmdir
    命令行选项或
    SVN.rmdir
    配置选项。至于您的主要问题,你可能应该在git邮件列表上询问,可能是抄送git svn的作者。谢谢@ninjalj——我会在邮件列表上试试。如果你得到答案,请不要忘记在这里发布。(我很乐意投票。)我自己也在想同样的问题。谢谢@cdhowie。在超时最终返回我的提示后,我确实尝试了重新设置基址。但愿我能抓住从中得到的错误。它不愿意从SVN服务器更新我的本地git repo。如果我可以重新创建它,我会发布错误。这是一个冲突,但我不知道如何解决它。最后,我使用
    svn
    验证了提交,然后使用另一个
    git svn clone
    调用从头开始重新创建本地git存储库。接受这个答案是因为它确实回答了我的问题:dcommits可以安全地中断,因为它们不会使svn处于坏状态,但是他们可能会让SVN/git桥处于一种不好的状态,他们也不应该让桥处于一种不好的状态。这听起来像是与其他人的SVN活动发生了冲突?另外,作为旁注,对桥梁造成的任何损坏都应该可以通过一些重基魔法修复。。。