在没有客户端工作区的情况下将库文件下载到本地磁盘

Kev*_*vin 6 .net perforce p4api.net

我在这里阅读了另一篇文章,我可以将文件从 Perforce depot 下载到本地磁盘,而无需客户端工作区。为了进一步扩展,我需要将仓库目录中的所有文件(文本和二进制文件)下载到我的本地磁盘中。这是正确的 p4 命令吗?

p4 打印 //depot/dir1/...

我有几个问题:

  1. 它会从 //depot/dir1/... 下载所有子目录和文件还是只下载文件?
  2. 它会保留将要下载的文件的原始名称吗?
  3. 如果没有指定本地路径,本地磁盘上的文件在哪里?

我正在使用 p4api.net 库。这段代码会做吗?

    public void GetFiles(string DepotFilePath) 
    {
        P4Command cmd = new P4Command( _repository, "print", true, 
        String.Format( "{0}/...", DepotFilePath ));

        results = cmd.Run();
        if (results.Success)
        {
            //do something here
        }
    }
Run Code Online (Sandbox Code Playgroud)

我不确定它会将文件转储到本地磁盘的哪个位置?

提前谢谢你的帮助。

Sam*_*ord 5

不需要特定于平台的脚本工具的简单解决方案:

p4 client -df TEMP_CLIENT
p4 -c TEMP_CLIENT --field View="//depot/dir1/... //TEMP_CLIENT/..." client -o | p4 client -i
p4 -c TEMP_CLIENT sync -p
p4 client -d TEMP_CLIENT
Run Code Online (Sandbox Code Playgroud)

这会将所有文件/目录下载//depot/dir1到您的当前目录中。如果要指定不同的目录,请在指定--field "Root=C:\Some Path"的同一位置添加到第一个命令View


jhw*_*ist 3

p4 print将把内容输出到标准输出(参见优秀手册)。因此,按顺序回答您的问题:

  1. 它将“下载”所有子目录中的所有文件,但只会在标准输出上打印文件内容。它不会在磁盘上生成文件。
  2. 是的,有点,但不是你想象的那样。在 stdout 上的流中,将有这样的行://depot/path/to/file#5 - edit change 430530 (text),后跟该特定文件的内容。
  3. 在任何地方,都不会在磁盘上创建任何文件。

如果您确实不想为您的任务创建客户端工作区(为什么?),那么您必须执行如下操作:

  1. p4 files使用例如(手册)获取文件列表
  2. 迭代此列表并调用p4 print每个文件
  3. 将输出重定向p4 print到本地磁盘上的文件,遵循软件仓库中的目录结构。