你可以“忽略”Perforce中的文件吗?

我有时使用Perforce P4V IDE中的“Reconcile Offline Work …”function同步从P4软件仓库断开连接的任何文件。 它启动另一个执行“文件夹差异”的窗口。

我有我从来不想检查到源代码控制文件(如bin文件夹中find的文件,如DLL,代码生成输出等)有没有办法来过滤这些文件/文件夹出现“新”,可能是添加。 他们往往把我真正感兴趣的文件列表搞乱.P4是否具有相当于Subversion的“忽略文件”function?

从版本2012.1开始,Perforce支持P4IGNORE环境variables。 我更新了这个关于忽略目录的问题的答案,并解释了它是如何工作的。 然后我注意到了这个答案,现在看来这是多余的。


假设您有一个名为“CLIENT”的客户端,名为“foo”的目录(位于您的项目根目录中),并且您希望忽略该目录树中的所有.dll文件,则可以将以下行添加到工作区视图中以完成这个:

 -  // depot / foo / *。dll //CLIENT/foo/*.dll
 -  // depot / foo /.../*。dll //CLIENT/foo/.../*.dll

第一行将它们从目录“foo”中删除,第二行将它们从所有子目录中删除。 现在,当您“协调离线工作…”时,所有.dll文件将被移动到文件夹底部的“排除文件”文件夹中。 他们会超出你的方式,但仍然可以查看和操纵,如果你真的需要。

你也可以用另外一种方式来做,这会减less你的“Excluded Files”文件夹到一个文件夹,但是你将不能操作它包含的任何文件,因为这个文件的path会被损坏(但是如果你只是想把它们你的方式,没关系)。

 -  // depot / foo ... / *。dll //CLIENT/foo.../*.dll

对,但是。

Perforce版本2012.1添加了一个名为p4ignore的function,受Git启发。 然而,Perforce的开发者没有任何理由地改变了这个行为,这使得这个function的用处不大。

虽然Git从所有.gitignore文件中获取规则,但是在指定环境variablesP4IGNORE的文件名之前,Perforce不知道去哪里寻找。 这种自由是一个诅咒。 您不能破解两个使用不同名称作为忽略文件的存储库。

此外,Perforce的忽略function不能解决这个问题。 你可以很容易地为自己设置它,但是除非明确地selectjoin,否则其他人不会受益。 没有贡献者可能会意外地提交不受欢迎的文件(例如,由构build脚本创build的bin文件夹)。

Git的忽略function非常棒,因为它可以在盒子里运行。 如果.gitignore文件被添加到版本库( 每个人都这样做 ),他们会为每个人解决这个问题。 没有人会意外地发布他们的私钥。

有趣的是, Perforce文档显示'.p4ignore'作为一个例子忽略规则,这是倒退! 如果这些规则很有用,则应该将它们作为存储库的一部分进行共享。


Perforce仍然可以在这个function上做得很好。 为文件名select一个约定,比如说p4ignore.txt ,这个function可以在这个盒子里find。 删除P4IGNORE环境variables,这是适得其反的。 编辑文档,鼓励开发者分享有用的规则。 让用户像Git一样在个人文件夹中的文件中写入个人规则。

如果你认识Perforce的任何人,请发邮件给他们。

这从Perforce 2013.1开始就起作用,新的P4IGNORE机制首次添加到版本2012.1中,在Perforce博客上描述:

http://www.perforce.com/blog/120130/new-20121-p4ignore

正如目前描述的那样,您将环境variables“P4IGNORE”设置为包含要忽略的文件列表的文件名。

所以你可以看看你喜欢它。

如果你想要一个适用于所有工作空间而不需要复制的解决scheme,你(或你的系统pipe理员)可以通过在p4 protect表中使用下面的行来拒绝这些文件types的提交:

 write user * * -//.../*.suo write user * * -//.../*.obj write user * * -//.../*.ccscc 

我记得之前这样做,但我没有必要的权限来testing这里。 查看Perforce的系统pipe理员指南并试用

从版本2011.1开始,Perforce Streams使得忽略文件变得容易得多。 根据文档,您可以忽略目录中的某些扩展或某些path。

p4 help stream

 Ignored: Optional; a list of file or directory names to be ignored in client views. For example: /tmp # ignores files named 'tmp' /tmp/... # ignores dirs named 'tmp' .tmp # ignores file names ending in '.tmp' Lines in the Ignored field may appear in any order. Ignored names are inherited by child stream client views. 

这基本上是@ raven的答案指定的,但是使用stream更容易,因为它会自动传播到使用该stream的每个工作空间。 它也适用于从指定忽略types的streaminheritance的任何stream。

您可以通过p4 stream //stream_depot/stream_name编辑stream,或者在p4v的stream视图中右键单击该stream。

正如@svec指出的那样,每个工作空间指定忽略文件的能力即将到来,实际上在P4 2012.1 beta中。

.p4ignore使用.p4ignore的build议似乎只适用于WebSphere Studio(P4WSAD)插件。 我只是试图在我的本地窗口框,我列出的任何文件和目录都不会被忽略。

Ravenbuild议修改你的客户端规范是Perforce下的正确方法。 正确组织代码/数据/可执行文件和生成的输出文件将使排除文件被检查的过程变得更容易。

作为一个更严格的方法,你总是可以写一个提交触发器,如果​​它们包含某个特定文件或者具有特定扩展名的文件等,它将拒绝提交更改列表。

历史回答 – 不再正确。 当初写这个是真的,

您不能编写和检入服务器将用于制定忽略规则的文件; 一般全局或正则expression式文件模式在perforce中忽略。

其他答案有全局服务器configuration(而不是每个文件夹)。 其他答案显示了可能适用于您的事情,如果您希望每个文件夹的视图中有一行代表您希望在该单个文件夹中忽略的扩展的数量,或者仅在WebSphere Studio插件中提供此function,或者为服务器提供functionpipe理员,但对用户不可用。

总之,我发现Perforce在这方面确实很薄弱。 虽然我明白那些使用Eclipse插件的人可以使用.p4ignore ,而且我认为这很好,但是在黑暗中我们还是不会这样做。

更新:查看2012年年中新增的P4IGNOREfunction的接受答案。

我发现使用像这样的BASH脚本来协调离线工作是最容易的:

 #!/bin/bash # reconcile P4 offline work, assuming P4CLIENT is set if [ -z "$P4CLIENT" ] ; then echo "P4CLIENT is not set"; exit 1; fi unset PWD # confuses P4 on Windows/CYGWIN # delete filew that are no longer present p4 diff -sd ... | p4 -x - delete # checkout files that have been changed. # I don't run this step. Instead I just checkout everything, # then revert unchanged files before committing. p4 diff -se ... | pr -x - edit # Add new files, ignoring subversion info, EMACS backups, log files # Filter output to see only added files and real errors find . -type f \ | grep -v -E '(\.svn)|(/build.*/)|(/\.settings)|~|#|(\.log)' \ | p4 -x - add \ | grep -v -E '(currently opened for add)|(existing file)|(already opened for edit)' 

我从这个Perforce知识库文章中调整了这一点 。

我正在寻找像解决scheme.p4ignore(而不是一个绑定到一个特定的IDE)。 到目前为止,我发现的最接近的东西是p4delta。 这听起来像是会做什么原始的海报要求,虽然通过另一层间接。

http://p4delta.sourceforge.net

不幸的是,虽然这似乎产生了正确的文件列表,我不能得到“p4delta –execute”工作(“无法修改冻结的string”),项目在一年中还没有更新。 也许别人会有更好的运气。

如果您使用的是Eclipse Perforce插件,那么插件文档将列出几种忽略文件的方法。