有时我会使用Perforce的P4V IDE中的“协调离线工作...”功能来同步与P4软件仓库断开连接时正在处理的所有文件。它启动另一个执行“文件夹差异”的窗口。
我有一些我永远不想检入源代码管理的文件(例如在bin文件夹中找到的文件,例如DLL,代码生成的输出等)。是否有一种方法可以过滤掉那些文件/文件夹,使其不显示为“ new”(可能是)添加。它们往往使我真正感兴趣的文件列表变得混乱。P4是否具有Subversion的“忽略文件”功能的等效功能?
有时我会使用Perforce的P4V IDE中的“协调离线工作...”功能来同步与P4软件仓库断开连接时正在处理的所有文件。它启动另一个执行“文件夹差异”的窗口。
我有一些我永远不想检入源代码管理的文件(例如在bin文件夹中找到的文件,例如DLL,代码生成的输出等)。是否有一种方法可以过滤掉那些文件/文件夹,使其不显示为“ new”(可能是)添加。它们往往使我真正感兴趣的文件列表变得混乱。P4是否具有Subversion的“忽略文件”功能的等效功能?
Answers:
从2012.1版开始,Perforce支持P4IGNORE
环境变量。我更新了有关忽略目录的问题的答案,并解释了其工作原理。然后我注意到了这个答案,我想这是多余的。
假设您有一个名为“ CLIENT”的客户端,一个名为“ foo”的目录(位于项目根目录),并且希望忽略该目录树中的所有.dll文件,则可以在工作区视图中添加以下几行以完成这个:
-// depot / foo / *。dll //客户端/foo/*.dll -// depot / foo /.../*。dll //客户端/foo/.../*.dll
第一行将其从目录“ foo”中删除,第二行将其从所有子目录中删除。现在,当您“协调脱机工作...”时,所有.dll文件都将移动到文件夹diff显示底部的“已排除文件”文件夹中。它们将不碍您使用,但如果您确实需要,它们仍然可以查看和操作它们。
您也可以使用另一种方法,将“ Excluded Files”文件夹减少到一个,但由于路径已损坏,您将无法操作其中包含的任何文件(但是如果您希望将它们删除)以您的方式,没关系)。
-// depot / foo ... / *。dll //客户端/foo.../*.dll
Reconcile Offline Work
对话框中不起作用。如果您在内部将其打开,它确实可以工作,Advanced Reconcile...
但这是没有用的,因为在99.9%的时间中,您不需要或不想使用高级对话框。
对,但是。
Perforce 2012.1版本添加了一个受Git启发的称为p4ignore的功能。但是,Perforce开发人员在没有任何理由的情况下对行为进行了更改,这恰巧使该功能的实用性大大降低。
虽然Git从所有.gitignore
文件中获取规则,但是Perforce直到在环境变量中指定文件名后才知道要查找的位置P4IGNORE
。这种自由是一种诅咒。您无法破解两个使用不同名称作为其忽略文件的存储库。
此外,Perforce的忽略功能无法正常使用。您可以为自己设置足够容易的设置,但是其他人除非明确选择加入,否则不会从中受益。尚未提交的贡献者可能会意外提交不受欢迎的文件(例如,bin
由构建脚本创建的文件夹)。
Git的ignore功能很棒,因为它可以解决问题。如果将.gitignore
文件添加到存储库(每个人都这样做),它们将为所有人解决问题。没有人会意外地发布其私钥。
有趣的是,Perforce文档将 “ .p4ignore”显示为示例忽略规则,这是倒退的!如果这些规则有用,则应将其作为存储库的一部分共享。
Perforce仍然可以在该功能上发挥作用。选择文件名的约定,例如p4ignore.txt
,这样该功能就可以解决。删除P4IGNORE
环境变量,将适得其反。编辑文档,以鼓励开发人员共享有用的规则。与Git一样,让用户将个人规则写入其主文件夹中的文件中。
如果您认识Perforce的任何人,请给他们发送电子邮件。
此功能自Perforce 2013.1起起作用,新的P4IGNORE机制于2012.1版本中首次添加,在Perforce博客上对此进行了描述:
如当前所描述的,您将环境变量“ P4IGNORE”设置为一个文件名,该文件名包含要忽略的文件列表。
因此,您可以检查一下以了解您的喜好。
如果您想要一种无需复制即可应用于所有工作空间的解决方案,则您(或您的sysadmin)可以通过使用p4保护表中的以下代码行拒绝提交这些文件类型:
write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc
我记得以前曾经做过,但是我没有必要的权限在这里进行测试。查阅Perforce的Sysadmin指南并尝试一下
从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或regexp文件模式忽略。
其他答案具有全局服务器配置(而不是每个文件夹)。如果您希望每个文件夹中的视图在一行中乘以您要忽略的扩展数,或者仅在WebSphere Studio插件中提供此功能,或者为服务器提供此功能,则其他答案将显示可能对您有用的内容管理员,但对用户不可用。
简而言之,我发现Perforce在这方面确实很薄弱。尽管我赞赏使用Eclipse插件的人可以使用.p4ignore
,并且我认为这很棒,但它却使我们中那些不愿意使用的人陷入了黑暗。
更新:请参见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”正常工作(“无法修改冻结的字符串”),并且该项目尚未在一年中进行更新。也许其他人会有更好的运气。