我有一个用python编码的项目,我使用svn进行源代码控制。 但现在,我需要使用Perforce提交此代码的一部分。 由于源树很大,有很多文件,我不想复制不同计算机上的文件。所以我想继续研究SVN,有时候,在Perforce上推送代码。
但我有一些问题要做:
在SVN中移动或删除文件时,在Perforce结果中提交代码时会显示错误消息,指出文件丢失且无法提交。所以没有任何承诺。
我不希望Perforce上的所有代码,所以我只标记了一些要添加的目录。没问题。但要检索修改和新文件,就要做Perforce“checkout”。如果我在开发树的根目录上执行此操作,则会标记为添加开发树中的所有文件。所以我结束了对之前添加的每个目录的检查,这非常烦人且耗时。
如果有人有建议,他/她将成为我的英雄;-)。谢谢!
答案 0 :(得分:2)
我的建议不是混合使用两种不同版本控制工具的工作区。这就像用一只装着霰弹枪指着你的脚一起玩。它有一天会消失。
自从我上次使用Perforce以来已经有好几年了,但我记得它肯定不喜欢其他任何人弄乱它的工作空间。 Svn也不喜欢它。
相反,请将工作区分开。磁盘空间很便宜。很难想象代码库如此之大以至于不可行。理想情况下,版本只在一个存储库中。如果仍需要在两个位置版本化文件,请设置合并工具以同步工作区之间的更改。在Windows / Linux环境中,Beyond Compare是手动合并的绝佳工具。对于自动合并,可能需要一些脚本来从一个存储库中提取补丁并将其应用于另一个存储库。
答案 1 :(得分:0)
听起来您在客户端规范中拥有整个服务器,并且正在检查事情,可能使用P4V。不要那样做。在您想要的位置仅使用您想要的目录更改您的客户端规范。然后使用p4同步来更新其他人所做的更改。
您对此问题的描述相当粗糙。为什么你想要perforce下的一些文件? perforce中的文件是否也在svn?
中编辑:
我怀疑http://kb.perforce.com/UserTasks/WorkingDisconnected可能会用于同步从svn到perforce的更改。
设置perforce workspace / client-spec,将共享位置映射到其subversion结帐位置。
EDIT2:
从您的评论中,您可能需要的是您的subversion服务器上的提交挂钩,它将某些文件的更改提交到perforce服务器上?
在这种情况下,subversion服务器可以有一个perforce客户端,并在提交更改之前进行正确的p4编辑/添加/删除调用吗?
答案 2 :(得分:0)
首先,你应该尽一切可能说服那些设置这个系统的人混合不同的源代码控制存储库对生产力非常不利。
现在,您的问题出现了,因为您正在复制文件系统级别的这两个存储库之间的重叠,并且您没有在Perforce端设置适当的客户端规范来过滤掉不需要的文件/文件夹。
如上所述,您应修改Perforce客户端规范,以明确排除您希望在Perforce软件仓库中看不到的文件和文件夹:
-//depot/path/to/SVNfiles/folder-I-dont-want/... //client/local/path/to/folder-I-dont-want/...`
-//depot/path/to/SVNfiles/file-I-dont-want //client/local/path/to/file-I-dont-want`
等
如上所述,运行以下Perforce命令(来自http://kb.perforce.com/UserTasks/WorkingDisconnected):
p4 diff -sd //myclient/... | p4 -x - delete
p4 diff -se //myclient/... | p4 -x - edit
find . -type f -print | p4 -x - add
然后执行p4 submit
,手动审核添加/删除/编辑的文件列表,删除不应存在的文件列表并修复上面的列表,然后在您满意时验证提交。
一旦添加了您不想要的新文件/文件夹,请不要忘记更新客户端规范。
但是正确的解决方案绝对不是这样做的,一旦你开始在文件夹中移动文件就会遇到问题,你最终会遇到合并问题等等。
您可以通过将SVN文件放入Perforce文件夹内的专用分支,然后将冲突与其实际目标集成/合并来解决合并冲突,但这只会带来额外的工作来解决不应该存在的问题首先。