Perforce:防止Perforce更改文本文件格式

15
有没有一种方法能够告诉Perforce在不将文件类型设置为二进制的情况下保持文本文件不变?或者除此之外,有没有一种方法可以告诉Perforce客户端对二进制文件进行区别?通常情况下,二进制文件并不理想,因为我会失去区分的能力。
澄清一下:如果我在Windows客户端上编辑并更改*.txt文件,则换行符将根据DOS格式具有CR+LF。但是如果我在Unix客户端上P4同步,则仅会有LF。无论Perforce客户端位于何处,我都需要Perforce保持原始格式不变。
也就是说,我确实有一种解决方法:将文件类型设置为二进制;和/或创建一个以“文本”设置为“文本”的分支,并定期集成回到主线,其中文本文件设置为“二进制”。但这是一个过于复杂的解决方案,应该是一个非常简单的问题。
最后,我使用的是Perforce Windows客户端2006.2。
提前致谢。

1
这是我个人认为同一个问题更重要的用例:如何在同一个目录中存储 build.shbuild.bat 而不破坏任何一个?使用网络文件系统/虚拟机/WSL,这些甚至可以同时被活动地使用。版本控制系统应默认将用户输入视为“神圣的”。 - MarcH
5个回答

11

好的。这样做要比创建一个单独的分支好得多,虽然不是最理想的。谢谢! - hythlodayr
链接已更新为:http://answers.perforce.com/articles/KB_Article/CR-LF-Issues-and-Text-Line-endings/ - Lester Cheung
我试图总结(混乱的)文档,请帮忙审核:https://dev59.com/YGTWa4cB1Zd3GeqPASrt#53491975 - MarcH
谢谢谢谢谢谢!注意:在Perforce选项中选择Unix行结束选项后,我执行了“获取修订版本”并选择了强制重新获取文件,但它们仍然不是我想要的。然而,我再次转换它们,使它们都具有正确的行结束符,然后再次提交到Perforce,现在它终于正常工作了。 - Loduwijk

5
Perforce客户端可以在同步到不同平台时正确处理行尾,前提是您的客户端已正确设置LineEnd选项。也许您的设置有误?打开客户端规范并根据您的需要设置LineEnd选项。
请参阅他们网站上的此KB文章以获取更多信息。以下是摘录:
在服务器端,Perforce使用Unix样式的LF换行符处理所有文本文件。虽然Perforce将服务器存档文件存储在磁盘上,使用操作系统的本地行终止约定(Windows上的CR / LF,Unix上的LF),但所有行尾都会被规范化为内部Perforce服务器操作的Unix样式的LF换行符,例如p4 sync,p4 submit和p4 diff。
在客户端工作区方面,Perforce对行尾的处理取决于每个clientspec的全局选项。当您使用p4 sync将文本文件同步到客户端工作区或使用p4 submit将其提交回Perforce服务器时,它们的行尾将按照clientspec LineEnd部分指定进行转换。

1
我本来就有这个担忧,但感谢您提供的文章。简单来说,我们的Unix Perforce客户端(和文件服务器)必须能够容纳Windows和Unix文本文件的混合。更糟糕的是:我们有某些本地化文本文件(类似于Java属性文件),Perforce服务器会对其进行破坏。唯一的解决方案是将其设置为二进制。 - hythlodayr
@hythlodayr:您目前是否与Perforce签订了支持合同?如果是的话,您可以给他们打电话。也许他们知道一些技巧,可以让它按照您想要的方式运行。 - raven
1
问题在于它不起作用,而Perforce拒绝承认这个错误。如果您从*nix提交具有Windows行结尾或反之的文件,则Perforce默认会损坏所有文本文件。 - Richard1403832
“...所有行尾都被规范化为Unix风格的LF...”这句话令人困惑,并与同一页上的其他两个声明相矛盾:“在UNIX和Mac OS X客户端工作区中,默认的本地设置不会导致任何行末转换”,以及:“在“unix”工作区中保存带有CRLF行结尾的文本文件,然后提交它将导致文件在存储在depot中时每行末尾都多出CR字符。” - MarcH

3

当您需要将要被视为二进制的文本文件添加到Perforce时,请使用命令p4 add并使用-t选项来覆盖类型映射表。请参阅此处的文档。那里提供的示例是p4 add -t binary file.pdf


3

我刚遇到了完全相同的问题,但是有一个更好的解决方案,不需要更改客户端规范(这些规范是国际标准,并且我没有全部写入权限)。

我们所有的客户端都是Windows PC,但Cygwin包含在Perforce仓库中。Cygwin是Unix在Windows上的实现,需要文本文件使用LF作为换行符。

对于旧版本的Cygwin,一种可能的解决方案是使用“text”选项挂载根目录,这意味着文件可以具有CR+LF的行尾。然而,在升级到Cygwin 1.7.9之后,这不再起作用,因为挂载是瞬时的,除非它们被写入/etc/fstab。我没能让它工作。

幸运的是,坐在我旁边的Perforce Guru想出了将文件类型更改为 binary+D 的解决方案,它使用与文本文件相同的RCS增量补丁存储,但不进行自动的行终止符转换。

我可以在我的本地工作区和仓库之间成功比较这些“text”文件。


-5

给文件一个不同的扩展名。


1
不行,因为这些文件应该是生产质量的。人们应该能够无缝地同步和复制到环境中,而且没有任何麻烦。同样地,unix2dos也不是一个选项。 - hythlodayr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接