你可以“忽略”P4V中的一个目录吗?
我们使用Visual Studio,它会生成大量的bin
和obj
目录。 当我使用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 add
, p4 status
和p4 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禁止):
如果您使用的是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中有空格,你需要确保你已经正确地把它们放在“”中,但是不要把它们放在引号内。