我有时会使用 Perforce 的 P4V IDE 中的“协调离线工作...”功能来同步我在与 P4 库断开连接时一直在处理的所有文件。它启动另一个执行“文件夹差异”的窗口。
我有我不想签入源代码管理的文件(例如在 bin 文件夹中找到的文件,例如 DLL、代码生成的输出等)。有没有办法过滤这些文件/文件夹,使其不显示为“新”,这可能是添加。它们往往会弄乱我真正感兴趣的文件列表。P4 是否具有与 Subversion 的“忽略文件”功能等效的功能?
我有时会使用 Perforce 的 P4V IDE 中的“协调离线工作...”功能来同步我在与 P4 库断开连接时一直在处理的所有文件。它启动另一个执行“文件夹差异”的窗口。
我有我不想签入源代码管理的文件(例如在 bin 文件夹中找到的文件,例如 DLL、代码生成的输出等)。有没有办法过滤这些文件/文件夹,使其不显示为“新”,这可能是添加。它们往往会弄乱我真正感兴趣的文件列表。P4 是否具有与 Subversion 的“忽略文件”功能等效的功能?
从 2012.1 版本开始,Perforce 支持P4IGNORE
环境变量。我更新了我对这个关于忽略目录的问题的回答,并解释了它是如何工作的。然后我注意到了这个答案,我想这现在是多余的。
假设您有一个名为“CLIENT”的客户端,一个名为“foo”的目录(位于您的项目根目录),并且您希望忽略该目录树中的所有 .dll 文件,您可以在工作区视图中添加以下行来完成这:
-//depot/foo/*.dll //客户端/foo/*.dll -//depot/foo/.../*.dll //CLIENT/foo/.../*.dll
第一行将它们从目录“foo”中删除,第二行将它们从所有子目录中删除。现在,当您“协调离线工作...”时,所有 .dll 文件将被移动到文件夹差异显示底部的“排除文件”文件夹中。它们不会妨碍您,但如果您确实需要,仍然可以查看和操作它们。
您也可以采用另一种方式,这会将您的“排除文件”文件夹减少到一个,但您将无法操作其中包含的任何文件,因为路径将被损坏(但如果您只是想要它们你的方式,没关系)。
-//depot/foo.../*.dll //CLIENT/foo.../*.dll
对,但是。
Perforce 版本 2012.1 添加了一个名为p4ignore的功能,受 Git 的启发。然而,Perforce 开发人员在没有正当理由的情况下对行为进行了更改,这恰好使该功能变得不那么有用。
虽然 Git 从所有.gitignore
文件中获取规则,但 Perforce 不知道在哪里查找,直到您在环境变量中指定文件名P4IGNORE
。这种自由是一种诅咒。您不能破解两个使用不同名称作为其忽略文件的存储库。
此外,Perforce 的忽略功能也无法解决问题。您可以为自己轻松设置它,但除非他们明确选择加入,否则其他人不会受益。没有提交的贡献者可能会意外提交不受欢迎的文件(例如bin
,由构建脚本创建的文件夹)。
Git 的忽略功能很棒,因为它开箱即用。如果将.gitignore
文件添加到存储库(每个人都这样做),他们将为每个人解决问题。没有人会意外地公开他们的私钥。
有趣的是,Perforce 文档显示 '.p4ignore' 作为示例忽略规则,这是倒退的!如果规则有用,则应将它们作为存储库的一部分进行共享。
Perforce 仍然可以很好地利用该功能。为文件名选择一个约定,比如p4ignore.txt
,这样该功能就可以发挥作用。删除P4IGNORE
环境变量,它会适得其反。编辑文档,鼓励开发者分享有用的规则。让用户在其主文件夹中的文件中写入个人规则,就像 Git 一样。
如果你认识 Perforce 的任何人,请给他们发邮件。
这适用于 Perforce 2013.1,新的 P4IGNORE 机制首次添加到版本 2012.1,在 Perforce 博客中描述:
正如目前所描述的,您将环境变量“P4IGNORE”设置为包含要忽略的文件列表的文件名。
所以你可以检查一下,看看你喜欢它。
如果您想要一个适用于所有工作空间而无需复制的解决方案,您(或您的系统管理员)可以通过使用 p4 保护表中的以下行来拒绝提交这些文件类型:
write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc
我记得以前做过这个,但我没有必要的权限在这里测试这个。查看Perforce 的系统管理员指南并尝试一下
从 2011.1 版开始,Perforce Streams 使忽略文件变得更加容易。根据文档,您可以忽略目录中的某些扩展名或某些路径。
从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 的回答所指定的操作,但使用流更容易完成,因为它使用该流自动传播到每个工作空间。它也适用于从您指定忽略类型的流继承的任何流。
您可以通过p4 stream //stream_depot/stream_name
或右键单击 p4v 的流视图中的流来编辑流。
正如@svec 所指出的,为每个工作区指定忽略文件的功能即将推出,实际上是在P4 2012.1 beta 中。
Will 的使用建议.p4ignore
似乎只适用于 WebSphere Studio (P4WSAD) 插件。我只是在我的本地 windows 框上尝试过,我列出的任何文件和目录都没有被忽略。
Raven 修改客户规范的建议是 Perforce 下的正确方法。正确组织您的代码/数据/可执行文件和生成的输出文件将使从检查中排除文件的过程更加容易。
作为一种更严格的方法,您始终可以编写一个提交触发器,如果更改列表包含某个文件或具有某个扩展名的文件等,它将拒绝提交更改列表。
历史答案 - 不再正确。在最初写这篇文章的时候,这是真的;
您不能写入和签入服务器将用来制定忽略规则的文件;perforce 中的一般 glob 或正则表达式文件模式忽略。
其他答案具有全局的全局服务器配置(而不是每个文件夹)。其他答案显示了可能对您有用的东西,如果您希望每个文件夹中的一行乘以您想在该单个文件夹中忽略的扩展数,或者仅在 WebSphere Studio 插件中提供此功能,或者为服务器提供功能管理员,但对用户不可用。
简而言之,我发现 Perforce 在这方面真的很弱。虽然我很欣赏那些使用 Eclipse 插件的人可以使用.p4ignore
.,而且我认为这很棒,但它让我们这些不使用 Eclipse 插件的人一头雾水。
更新:请参阅 2012 年年中添加的新 P4IGNORE 功能的已接受答案。
我发现使用像这样的 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 知识库文章。
我也在寻找类似 .p4ignore 的解决方案(而不是与特定 IDE 绑定的解决方案)。到目前为止,我发现的最接近的是 p4delta。听起来它将完全按照原始海报的要求进行,尽管通过另一层间接。
http://p4delta.sourceforge.net
不幸的是,虽然这似乎确实产生了正确的文件列表,但我无法让“p4delta --execute”工作(“无法修改冻结的字符串”)并且该项目一年内没有更新。也许其他人会有更好的运气。
如果您使用的是 Eclipse Perforce 插件,那么插件文档列出了几种忽略文件的方法。