代码之家  ›  专栏  ›  技术社区  ›  David Joyner

如何在性能树中查找未跟踪的文件?(类似SVN状态)

  •  83
  • David Joyner  · 技术社区  · 16 年前

    有人有脚本或别名可以在性能树中查找未跟踪(真的:未添加)的文件吗?

    编辑:我更新了这个问题的公认答案,因为在2009年1月的版本中,P4V似乎增加了对此的支持。

    15 回复  |  直到 7 年前
        1
  •  77
  •   Community CDub    8 年前

    编辑: 请使用 p4 status 现在。再也没有必要跳过篮球圈了。见@colonelpanic's answer .

    在2009年1月的p4v版本中,您可以右键单击工作区树中的任何文件夹,然后单击“协调脱机工作…”

    这将做一点处理,然后显示未签出但与仓库版本有差异或根本未签入的文件的拆分树视图。它甚至可能会提到其他一些类别。

    您可以右键单击此视图中的文件并将其签出、添加或甚至还原。

    这是一个非常方便的工具,它救了我几次。

    编辑:啊,问题是关于脚本的,但是我会把这个答案留在这里以防万一。

        2
  •  49
  •   Mark Harrison    16 年前

    在Linux上,或者如果您在Windows上安装了GNU工具:

    find . -type f -print0 | xargs -0 p4 fstat >/dev/null
    

    这将为每个未计数的文件显示一条错误消息。如果要捕获该输出:

    find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile
    
        3
  •  18
  •   ahu    16 年前

    在UNIX下:

    find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'
    

    这将打印出未添加到客户机或Performance Depot中的文件列表。我已经用过 ! -name '*~' 排除以~结尾的文件。

        4
  •  12
  •   Andrew Grant    16 年前

    啊,性能经典之一):是的,它真的很糟糕,仍然没有一个简单的方法为这个内置到默认命令。

    最简单的方法是运行一个命令来查找客户机根目录下的所有文件,然后尝试将它们添加到仓库中。您将得到一个所有新文件的更改列表,并且忽略现有文件。

    例如dir/s/b/a-d p4-x-添加

    (使用“查找”。-从nix命令行键入f-print)。

    如果您需要一个物理列表(在控制台或文件中),那么您可以通过管道传输diff的结果(如果您也希望将其添加到变更列表中,则可以添加)。

    如果您在p4win中运行它,那么可以使用$r替换当前工作区的客户机根目录。

        5
  •  11
  •   Community CDub    8 年前

    有类似的吗 svn status git status ?

    是的,但是 .

    从性能版本2012.1开始,有以下命令 p4 status 在P4V“协调离线工作”中。但是,它们都很慢。要排除不相关的文件,需要编写 p4ignore.txt 文件每 https://stackoverflow.com/a/13126496/284795

        6
  •  6
  •   Krazy Glew    8 年前

    我觉得有必要添加一个答案,因为接受的答案和其他一些答案都有一个我认为很重要的问题:它们不理解只读查询命令和进行更改的命令之间的区别。

    我不希望这个答案得到任何赞扬,但我希望它能帮助其他人避免浪费时间,并通过遵循公认但不正确的答案来犯错误。

    +简短

    在性能工作区中查找所有未跟踪文件的最方便方法可能是 p4 reconcile -na .

    -a 说“给我不在存储库中的文件,即应该添加的文件”。

    -n 说“不做任何改变”——也就是说,干运行。(尽管消息可能会说“为添加而打开”,但在精神上,您必须将其解释为“如果不是-n,将为添加而打开”)。

    可能是查找脱机时所做的所有本地更改的最方便的方法-不仅仅是可能需要添加的文件,还包括可能需要删除的文件,或者在没有打开进行编辑的情况下更改的文件 p4 edit p4 reconcile -n .

    几个答案提供了脚本,通常涉及 p4 fstat . 虽然我没有验证所有这些脚本,但我经常使用类似的脚本来弥补性能命令的不足,例如 P4调和-N -例如,我经常发现我需要本地路径,而不是执行仓库路径或工作区路径。

    +警告

    p4 status 不是其他版本控制系统上的状态命令的对应项。

    P4状态 不是只读查询。 P4状态 实际上发现了与 p4 reconcile 并将它们添加到存储库中。 P4状态 好像没有 -N 干运行选项类似 P4调和 做。

    如果你这样做了 P4状态 ,看看文件,想“哦,我不需要那些”,然后你就必须 p4 revert 如果要在同一个工作区中继续编辑,则会显示它们。或者改变 P4状态 添加到您的变更集将在下次签入。

    似乎很少或没有理由使用 P4状态 而不是 P4调和-N ,除了本地工作区和仓库路径名的一些详细信息。

    我只能想象,为非只读命令选择“status”的人对英语和其他版本控制工具的命令有限。

    ----+ P4V GUI

    在GUI中 p4v ,reconcile命令查找可能需要添加、删除或打开以进行编辑的本地更改。幸运的是,默认情况下,它不会将它们添加到变更列表中;但是,如果不想提交更改,您可能仍然需要在检查完协调窗口后小心地关闭它。

        7
  •  4
  •   Ross Patterson    16 年前

    在我的工具中,我使用以下方法备份工作区中与存储库(用于Windows)不同的任何文件。它处理一些性能不太喜欢的奇怪情况,比如嵌入式空格、星、百分比和哈希标记:

    dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:
    

    DR/S/B/A/D “列出此文件夹或其下的所有文件( s )“裸”格式( /B )排除目录(/ A—D )“ 塞德 “将危险字符更改为” %XX 表单(a la html),以及 P4有 “命令检查此列表(” -X “)反对服务器丢弃它实际位于存储库中的文件的任何内容(” 1 & NUL: “”。结果是一堆行,比如:

    Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.
    

    ET Voice!

        8
  •  4
  •   Rian Sanderson    9 年前

    或者从p4win,使用左侧视图面板上的“本地文件不在仓库”选项。

    我不太使用p4v,但我认为等效方法是在工作区视图选项卡的过滤器下拉列表中选择“隐藏本地工作区文件”。p4帮助fstat

    在p4v 2015.1中,您可以在如下的过滤器按钮下找到这些选项: enter image description here

        9
  •  2
  •   gdw2    13 年前

    快速更改:在P4V中,右键单击相关文件夹,并将其下的所有文件添加到新的更改列表中。变更列表现在将包含当前不属于仓库的所有文件。

        10
  •  1
  •   Rhubbarb    9 年前

    以下命令生成类似输出的状态,但没有一个命令相当于 svn status git status ,提供每个文件状态的一行摘要:

    • p4 status
    • p4 opened
    • p4 diff -ds
        11
  •  0
  •   Jac Goudsmit    9 年前

    我没有足够的信誉点来发表评论,但罗斯的解决方案还列出了可供添加的文件。你可能这样做 想用他的回答来清理你的工作区。

    以下用途 p4 fstat (谢谢马克·哈里森)而不是 p4 have 并列出不在仓库中的文件 未打开进行添加。

    dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]\.$//gp"
    

    =jac

        12
  •  0
  •   Kevin    8 年前

    方法快,但东正教少。如果代码库不经常添加新文件/更改视图,您可以在签出时创建一个本地的“git”存储库。从干净的性能同步,git init,本地添加和提交所有文件。Git状态为“快速”,将显示以前未提交的文件。

        13
  •  0
  •   kfsone    7 年前

    这个 p4 fstat 命令用于测试工作区中是否存在文件,并与 find 如下面的Perl示例所示,查找要检查的文件:

    // throw the output of p4 fstat to a 'output file'
    // find:
    //  -type f  :-  only look at files,
    //  -print0  :-  terminate strings with \0s to support filenames with spaces
    // xargs:
    //  Groups its input into command lines,
    //  -0       :-  read input strings terminated with \0s
    // p4:
    //  fstat    :-  fetch workspace stat on files
    
    my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile";
    
    // read output file
    open F1, $outputFile or die "$!\n";
    
    // iterate over all the lines in F1
    while (<F1>) {
      // remove trailing whitespace
      chomp $_;
    
      // grep lines which has 'no such file' or 'not in client'
      if($_ =~ m/no such file/ || $_ =~ m/not in client/){
    
         // Remove the content after '-'
         $_=~ s/-\s.*//g;
    
         // below line is optional. Check ur output file for more clarity.
         $_=~ s/^.\///g;
    
         print "$_\n";
      }
    }
    
    close F1;
    

    或者你可以使用 p4 reconcile -n -m ...

    如果它是“打开删除”,则它已从工作区中删除。请注意,上面的命令正在预览模式下运行( -n )

        14
  •  0
  •   givanse    7 年前

    我需要在Linux、Mac或Windows中工作的东西。所以我为它编写了一个python脚本。基本思想是迭代文件并执行 p4 fstat 在每一个。(当然,忽略依赖项和tmp文件夹)

    你可以在这里找到它: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

        15
  •  -1
  •   Engineer    11 年前

    在P4V中,在“查看”菜单项下,选择“文件夹中的文件”,在右窗格中显示一个新选项卡。 在选项卡的最右边有一个小图标,它会显示一个名为“文件夹中的文件”的窗口,其中有两个图标。 选择左侧看起来像漏斗的图标,您将看到几个选项。选择“显示不在仓库中的项目”,文件夹中的所有文件都会显示出来。 然后右键单击要添加的文件,然后选择“标记为添加…”。您可以验证它是否在“挂起”选项卡中。 按正常方式提交(ctrl+s)。