你能“忽略”P4V中的目录吗?

时间:2010-06-23 06:54:48

标签: perforce

我们使用Visual Studio,它生成许多binobj目录。当我使用 P4V 的“协调脱机工作”功能时,这些功能会显示在“不在软件仓库中的本地文件”列表中。

我想排除它们。我找到了this question,但是它谈到了文件,当我尝试它的建议时(将以下内容添加到我的工作区视图中),它不起作用

//depot/Foo/... //Client/Foo/...
-//depot/Foo/.../*.user //Client/Foo/.../*.user
-//depot/Foo/.../bin/... //Client/Foo/.../bin/...
-//depot/Foo/.../obj/... //Client/Foo/.../obj/...

它实际上似乎不适用于文件:foo.csproj.user文件仍显示在列表中。

我可以从P4V中排除目录吗?如果是这样,怎么样?我做错了什么?

6 个答案:

答案 0 :(得分:73)

从2012.1版开始,Perforce支持P4IGNORE环境变量。这允许您在使用搜索或添加新文件(p4 addp4 statusp4 reconcile)的命令时指定要忽略的文件和目录。

要使用忽略文件,请在工作区的根目录中创建一个文件,并为其指定一些有意义的名称。该约定似乎类似于 .ignore .p4ignore ,但任何事情都可以(我使用 p4ignore.txt 以便我可以编辑它只需双击一下即可。然后用你的忽略规则填充它。以下将忽略Visual Studio生成的不需要的碎片:

# directories
bin
obj

# files
*.suo
*.user

创建此文件后,将P4IGNORE环境变量设置为指向它。在命令行中,键入以下内容:

p4 set P4IGNORE=C:\somepath\p4ignore.txt

请务必使用绝对路径! Perforce documentation未指定此内容且我的第一次尝试无效(在Windows上无论如何),因为我没有指定绝对路径

执行此操作后,任何添加忽略列表中的文件或目录的尝试都将被拒绝,您将看到诸如此类的警告(它们确实为您提供了抑制选项):

P4V 'ignored' files message


如果您使用的是2012.1之前版本的Perforce服务器,您仍可以在客户端规范中执行此操作。您的排除规则的语法只是一点点。你想要的是这个:

-//depot/Foo.../*.user //Client/Foo.../*.user
-//depot/Foo...bin/... //Client/Foo...bin/...
-//depot/Foo...obj/... //Client/Foo...obj/...

注意“Foo”之后和“bin”和“obj”之前的斜杠。

答案 1 :(得分:7)

更新回答: 这在过去有点棘手,因为没有内置的方法从Perforce命令中排除目录。自2012年以来,这已发生变化 您可以查看a nice perforce article for this problem

从2012.1开始,P4IGNORE环境变量可以设置为指定用于从Perforce中排除文件的文件。 Perforce Server(p4d)和客户端(p4,P4V)都需要为2012.1或更高版本。 P4IGNORE的目的是在将新文​​件添加到库并协调工作空间时忽略文件。与其他版本控制系统中的类似功能一样,P4IGNORE不能用于忽略存储库控制下的文件。

P4Eclipse按照自己的条件管理.p4ignore个文件。 (参见关于这一点的手册here

使用客户端视图排除文件和目录:

在Perforce中排除文件和目录的传统方法是使用排除客户端映射。有关完整文档,请参阅视图的命令参考。示例视图:

查看:

//depot/... //test_ws/depot/...
-//depot/dir/etc/... //test_ws/depot/dir/etc/...

此视图将阻止将dir / etc中的文件添加到库中。如果尝试从只读查询中排除目录,请使用客户端或相对语法。

$ p4 files //depot/dir/etc/...
//depot/dir/etc/foo#1 - add change 1186 (text)
//depot/dir/etc/bar#1 - add change 1186 (text) 


$ p4 files //test_ws/dir/etc/...
//test_ws/test_ignore/ignoredir/... - file(s) not in client view. 

$ cd dir/etc
$ p4 files ...
... - file(s) not in client view.

或者,您可以使用shell命令根据需要过滤输出。

p4 files //depot/dir/... |
    awk -F# '{print $1}' |
    grep -v "//depot/dir/etc/" |
    p4 -x - fstat

在“//depot/dir/”下的所有文件上运行p4 fstat,但“//depot/dir/etc/”下的文件除外。通过列出所有文件,然后使用grep删除要排除的目录下的那些文件来完成此目录排除。 “//depot/dir/etc/”中的尾部斜杠是必要的,以防止“//depot/dir/”下以“etc”开头的匹配目录(例如,“//depot/dir/etc2009”)。

注意:

awk命令假定没有包含“#”字符的文件名。 grep命令还可以从文件中读取其模式,如果需要排除多个目录,这将非常有用。 我们使用'-x - '标志和p4命令将输入​​用作相应命令的参数;有关详细信息,请参阅Perforce命令行全局选项。

答案 2 :(得分:6)

有一种方法可以直接在Perforce中执行:

  • 连接菜单
  • 编辑当前工作区...

导航项目树。 右键单击文件或文件夹。 选择包含或排除文件,文件夹,整个树。

答案 3 :(得分:3)

这对我很有用:

//depot/... //my_workspace_name/...
-//depot/.../.git/... //my_workspace_name/.../.git/...
-//depot/.../xcuserdata/... //my_workspace_name/.../xcuserdata/...
-//depot/.../xcschemes/... //my_workspace_name/.../xcschemes/...
-//depot/.../xcdebugger/... //my_workspace_name/.../xcdebugger/...

答案 4 :(得分:1)

这可能不相关,但如果您的任何路径中有空格,则需要确保将它们正确地封入“”,但不要将 - 括在引号内。

答案 5 :(得分:-1)

我会继续进行协调离线工作并完成除提交之外的所有工作。在提交之前,请执行以下操作:

p4 revert // Client / Foo /.../*。user

p4 revert // Client / Foo /.../ bin /...

p4 revert // Client / Foo /.../ obj /...

它不是自动化的,但这是我现在能想到的最好的。