Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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
SVN,在Im提交文件时查看详细信息_Svn - Fatal编程技术网

SVN,在Im提交文件时查看详细信息

SVN,在Im提交文件时查看详细信息,svn,Svn,svn专家的简单问题: 现在我正在做一个大项目的第一次提交(不需要解释细节),它几乎有2GB的文件 承诺需要很长时间,我看到点滴像往常一样向前推进。所以我的问题是,是否有一种方法可以显示我提交的详细进度,因为我不知道真正的进度,有多少已经上传,还有多少正在等待 谢谢简短的回答是:不,你看不到细节。在您看到句点时,Subversion客户端已经将您的更改传递到Subversion服务器。现在,服务器正在尝试查看是否可以提交这些更改。此时,一切都在服务器上,服务器和客户端之间的通信受到限制 你的Su

svn专家的简单问题:

现在我正在做一个大项目的第一次提交(不需要解释细节),它几乎有2GB的文件

承诺需要很长时间,我看到点滴像往常一样向前推进。所以我的问题是,是否有一种方法可以显示我提交的详细进度,因为我不知道真正的进度,有多少已经上传,还有多少正在等待


谢谢

简短的回答是:不,你看不到细节。在您看到句点时,Subversion客户端已经将您的更改传递到Subversion服务器。现在,服务器正在尝试查看是否可以提交这些更改。此时,一切都在服务器上,服务器和客户端之间的通信受到限制

你的Subversion客户就像上世纪60年代的情景喜剧《医院里的父亲》。没有人会告诉他一件该死的事情,直到事情结束。他只是在候诊室踱来踱去,抽着烟,直到有人告诉他最终结果

您的Subversion客户端已将更改传递给Subversion服务器。当你看到句点时,你的Subversion客户端来回踱步,直到它听到Subversion服务器传来的消息发生了什么(恭喜!这是一个提交!)

现在,一个大问题是:你到底在做什么,提交价值2 GB的文件?如果提交的文件中有一个文件无法提交,那么整个提交都将被拒绝。所有的等待都白费了

  • 提交应该是有意义的部分。它们越小,速度就越快,您最终被拒绝提交的可能性就越小。看看我网站上一个相当大的项目,所有的源文件都只有108兆字节。这是你拥有的20分之一,这是一个相当大的项目
  • 不要提交构建的工件。构建的工件通常非常大,而且它们的版本不太好,因为它们通常是二进制的。源代码中的一个微小更改将导致构建工件中的巨大差异,这意味着每个版本都将占用几乎相同的空间。我的构建创建了91Mb的构建工件。如果我提交这个,它将在我的Subversion归档中占用另外91Mb的空间。这样做几十次,我就将我的项目在Subversion服务器上所需的空间增加到超过1 GB。

    更糟糕的是,这个二进制文件无法与以前的版本有所不同,因此它在编程方面对我没有帮助,而且很快就会过时。我一年前写的一个源文件可能仍然与我的项目相关。但我一年前构建的二进制文件对任何人都没有用处
  • 还有一种可能性:您正在进行分支,并且做得不对。没有比这更糟糕的了。为此,我用一块陈腐的松饼殴打了开发人员,并被各种陪审团宣告无罪,因为他们认为这是完全正当的。

    不要创建目录,将源代码从主干复制到分支,执行
    svn add
    并提交更改。这会丢失分支上的整个历史记录,并阻止合并和扩散,因为就Subversion而言,分支上的文件与主干上的文件完全不同。你失去了你的分支的全部目的,那就是帮助你理解它与你的主干有什么不同。另外,这需要很长很长的时间,因为Subversion必须将整个项目再次添加到存档中。

    执行
    svn cp
    。更好的是,使用URL格式,而不是复制到您的工作目录中。这就是svncp的父母http://server/trunk/project http://server/branch/1.2/project。这会保持您的历史完整,Subversion几乎会立即创建分支

现在,您的提交可能已经完成。你要么被告知你的承诺发生了,要么它被拒绝了,你浪费了20到40分钟的时间看着这段时间一次又一次地打印出来。下次,不要尝试这么大的提交。别吵了。不要提交构建的工件。如果您需要一个构建的工件,您可以重建它。(您也可以将它们存储在不受Subversion控制的发布存储库中的其他项目中。)

目前无法查看命令行客户端的更多详细信息,但您当然可以通过向users@subversion.apache.org. 实际上,我们有打印更多数据的信息(传输速度和完成百分比可能很棘手,但我们至少可以提供正在传输的文件)。如果您不愿意等待Subversion本身,您可以修改客户端以打印您想要的任何内容,notify函数并不十分复杂

不幸的是,大卫·W.的答案并不准确。在服务器尝试执行提交时显示句点,并且数据已经在服务器上的印象是完全错误的。当文件内容(在某些情况下可能是全文)的每个文本增量开始传输时(如在周期开始之前打印的“传输文件数据”所示),显示周期。因此,第一个周期将在发送第一个文本时显示,第二个周期在发送完成后显示,第二个周期即将开始,依此类推。因此,如果您知道要提交多少个文件,就可以知道它离输出有多远

超技术的内部细节如下。输出在中设置的notify回调函数中实现(ctx是上下文的缩写)。对于提交,您可以看到它是从svn_client__do_commit函数调用的,如下所示:

  if (ctx->notify_func2)
    {
      svn_wc_notify_t *notify;
      notify = svn_wc_create_notify(item->path,
                                    svn_wc_notify_commit_postfix_txdelta,
                                    iterpool);
      notify->kind = svn_node_file;
      notify->path_prefix = notify_path_prefix;
      ctx->notify_func2(ctx->notify_baton2, notify, iterpool);
    } 
该代码发送的事件是一个事件,如果您查看该代码的上下文,您将看到该事件是在传输路径的文本增量之前发送的

这里有一个小小的
case svn_wc_notify_commit_postfix_txdelta:
  if (! nb->sent_first_txdelta)
    {
      nb->sent_first_txdelta = TRUE;
      if ((err = svn_cmdline_printf(pool,
                                    _("Transmitting file data "))))
        goto print_error;
    }

  if ((err = svn_cmdline_printf(pool, ".")))
    goto print_error;
  break;