你可以“忽略”P4V中的一个目录吗?

我们使用Visual Studio,它会生成大量的binobj目录。 当我使用P4V的“协调离线工作”function时,这些出现在“本地文件不在软件仓库”列表中。

我想排除他们。 我发现这个问题 ,但谈到文件,当我尝试它的build议(添加到我的工作区视图以下), 它不起作用

 //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中排除目录吗? 如果是这样,怎么样? 我究竟做错了什么?

更新回答 :这在过去有点棘手,因为没有内置的方法来从Perforce命令中排除一个目录。 自2012年以来这已经改变。 你可以看看这个问题的一个很好的perforce文章 。

从2012.1开始,可以将P4IGNORE环境variables设置为指定用于从Perforce中排除文件的文件。 Perforce服务器(p4d)和客户端(p4,P4V)都需要为2012.1或更高版本。 P4IGNORE的目的是在将新文​​件添加到软件仓库和协调工作区时忽略文件。 像其他版本控制系统中的可比较function一样,P4IGNORE不能用于忽略已经在存储库控制下的文件。

P4Eclipse自己pipe理.p4ignore文件。 (请参阅这里关于这一点的手册)

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

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

视图:

 //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/ ”后面的斜杠是防止以“etc”(例如“ //depot/dir/etc2009 ”)开头的“ //depot/dir/ ”下的匹配目录所必需的。

注意:

awk命令假定没有包含“#”字符的文件名。 grep命令也可以从文件中读取模式,如果需要排除多个目录,这很有用。 我们在p4命令中使用'-x'标志来将input用作相应命令的参数; 请参阅Perforce命令行全局选项以获取更多信息。

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

要使用忽略文件,请在工作空间的根目录中创build一个文件,并为其指定一个有意义的名称。 约定似乎是.ignore.p4ignore ,但任何事情都会做(我用p4ignore.txt,所以我可以编辑它只需简单的双击)。 然后填写你的忽略规则。 以下将忽略由Visual Studio生成的不需要的碎片:

 #目录
箱子
 OBJ

 #文件
名为.suo *
 *。用户

创build此文件后,请将P4IGNORE环境variables设置为指向该文件。 在命令行中input以下内容:

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

一定要使用绝对path! Perforce的文档没有指定这个,我的第一次尝试没有工作(无论如何Windows),因为我没有指定一个绝对path。

这样做后,任何添加在忽略列表中的文件或目录的尝试都会被拒绝,你会看到这样的警告(他们给你select禁止):

P4V“忽略”文件信息


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

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

注意“Foo”之后和“bin”和“obj”之前的缺less斜线。

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

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

浏览项目树。 用鼠标右键单击该文件或文件夹。 select包含或排除文件,文件夹,整个树。

这对我很好:

 //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/... 

我会继续进行协调离线工作,除了提交之外什么都做。 提交之前,请执行以下操作:

p4还原//Client/Foo/…/*.user

P4恢复/ /客户端/美孚/…/斌/ …

p4还原// Client / Foo /…/ obj / …

这不是自动化的,但这是目前我能想到的最好的。

这可能不是相关的,但是如果你的任何path中有空格,你需要确保你已经正确地把它们放在“”中,但是不要把它们放在引号内。