你能"忽略"Perforce中的文件吗?

Ray*_*ega 99 version-control perforce ignore

我有时使用的功能"对账脱机工作......"在Perforce中的P4V IDE中发现同步起来,我已经从P4车厂工作,同时断开任何文件.它启动另一个窗口,执行'Folder Diff'.

我有文件,我从来不想检查源代码控制(如在bin文件夹中找到的DLL,代码生成输出等)有没有办法过滤这些文件/文件夹出现可能是"新"添加.它们往往会混淆我真正感兴趣的文件列表.P4是否具有Subversion的"忽略文件"功能?

rav*_*ven 58

从2012.1版开始,Perforce支持P4IGNORE环境变量.我更新了这个关于忽略目录的问题的答案,并解释了它的工作原理.然后我注意到了这个答案,我猜这个答案现在多余了.


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

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

第一行将它们从目录"foo"中删除,第二行将它们从所有子目录中删除.现在,当您"协调脱机工作..."时,所有.dll文件将被移动到文件夹差异显示底部的"Excluded Files"文件夹中.它们会让您失望,但如果您真的需要,仍然可以查看和操作它们.

你也可以用另一种方式来做,这会将你的"Excluded Files"文件夹减少到一个,但是你将无法操纵它包含的任何文件,因为路径会被破坏(但如果你只是想要它们你的方式,没关系).

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

  • 虽然这有效,但它并不是很有用,因为您必须将这些行放入您创建的每个工作空间中. (30认同)
  • @raven:1)(示例:)有些项目在每个项目下使用bin/obj文件夹,而不是将它们放在中心位置.(广义结论:) Perforce假设所有中间文件都放在一个容易排除的工作空间位置,这对于VCS来说是一种不必要的限制性设计.2)一些项目涉及目录结构中的本地缓存和/或其他每用户生成的文件(例如,*.ncb IntelliSense缓存).无法将它们排除为共同策略会严重损害Reconcile Offline Work和Diff Folders功能. (12认同)
  • 注意:这不适用于从p4v正常协调脱机工作."排除的文件"似乎只是在"高级"协调窗口中...... (6认同)
  • 排除过滤器在"Reconcile Offline Work"对话框中不起作用.如果你在`Advanced Reconcile ...'中打开它,它确实有用,但这没用,因为99.9%的时候你不需要或不想使用高级对话框. (6认同)
  • 这个特殊问题正在扼杀我. (6认同)
  • 想象一下,在Python项目中进行协调是多么容易,其中列表将包含数百个`.pyc`文件.在工作空间中保持忽略规则的想法非常糟糕,谁能想象所有开发人员都能够同步他们的忽略规则? (3认同)

Col*_*nic 45

对,但是.

Perforce版本2012.1增加了一个名为p4ignore的功能,灵感来自Git.然而,Perforce开发人员在没有正当理由的情况下对行为进行了更改,这恰好使该功能变得不那么有用.

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

此外,Perforce的忽略功能无法解决问题.您可以轻松地为自己设置它,但除非明确选择加入,否则其他人不会受益.没有意外提交不受欢迎文件的贡献者(例如,bin由构建脚本创建的文件夹).

Git的忽略功能很棒,因为它可以解决问题.如果.gitignore文件被添加到存储库(每个人都这样做),他们将为每个人设计框.没有人会不小心发布他们的私钥.

有趣的是,Perforce文档将 ".p4ignore"显示为示例忽略规则,这是向后的!如果规则有用,则应将它们作为存储库的一部分进行共享.


Perforce仍然可以在该功能上取得成功.例如,选择文件名的约定p4ignore.txt,以便该功能可用于此框.删除P4IGNORE环境变量,这会适得其反.编辑文档,鼓励开发人员共享有用的规则.让用户在其主文件夹中的文件中编写个人规则,就像Git那样.

如果您认识Perforce的任何人,请发送电子邮件给他们.

  • 谢谢你的澄清.我尝试将.p4ignore与P4VS一起使用但我的解决方案本应被忽略并未被忽略.首先我以为我做错了什么.现在我知道的更好. (2认同)
  • 在http://www.p4ideax.com/ideas/17856/make-the-ignore-feature-work-out-the-box上讨论'让忽略功能开箱即用' (2认同)
  • 对于因您使用的工作区而异的配置变量,请尝试使用 P4CONFIG 文件。然后,您可以让 P4CONFIG 文件在您从工作区移动到工作区时指定不同的 P4IGNORE 值。 (2认同)
  • Perforce不知道如何构建适当的软件,甚至不了解基础知识。这就是为什么每个坚持perforce的人都梦想着转向git的原因。 (2认同)

sve*_*vec 22

这适用于Perforce 2013.1,新的P4IGNORE机制最初是在2012年版本中添加的,在Perforce博客中描述:

https://www.perforce.com/blog/new-20121-p4ignore

如当前所述,您将环境变量"P4IGNORE"设置为包含要忽略的文件列表的文件名.

所以你可以看一下,看看你喜欢它.


小智 7

如果您想要一个适用于所有工作空间而无需复制的解决方案,您(或您的系统管理员)可以通过使用p4保护表中的以下行来拒绝提交这些文件类型:

write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc
Run Code Online (Sandbox Code Playgroud)

我记得以前这样做,但我没有必要的权限来测试这里.查看Perforce的系统管理员指南并试一试

  • 不幸的是,这会导致提交错误,而不会忽略协调视图.因此,它可以将某些文件保留在存储库之外,但它无法帮助您的用户查看噪音. (3认同)

Cha*_*nce 6

从版本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.
Run Code Online (Sandbox Code Playgroud)

这基本上是@ raven的答案所指定的,但是使用流更容易,因为它使用该流自动传播到每个工作空间.它还适用于从您指定忽略类型的流继承的任何流.

您可以p4 stream //stream_depot/stream_name在p4v的流视图中通过或右键单击流来编辑流.

正如@svec所说,每个工作区指定忽略文件的能力即将推出,实际上是在P4 2012.1测试版中.