我有两个项目A和B. 我在A中有文件constants.java。我想在B.such中保留它的镜像副本,当A中的constants.java在B中自动更改时。 Perforce中是否有任何锻炼。提前感谢帮助我
答案 0 :(得分:1)
您无法使用Perforce自动执行此操作,但您可以轻松设置cron作业(如果您有Jenkins之类的CI系统,则可以设置构建作业)以使用p4 integrate命令将A中的任何更改合并到B中。
答案 1 :(得分:1)
可以使用change-commit trigger执行此操作,在提交A时从A到B进行集成,但这似乎是一个糟糕的想法,特别是因为Perforce称之为出:
使用触发器脚本时,请记住Perforce命令 将数据写入仓库是危险的,应该避免。在 特别是,不要在触发器中运行p4 submit命令 脚本。
为什么不让这些项目都引用相同的constants.java
文件?
答案 2 :(得分:0)
你可能想要一些像SVN的svn:externals
一样的东西。
我认为Perforce最接近的是使用符号链接,这是一个非常糟糕的替代品。您可以检查Perforce中的符号链接,它将理解该链接。如果你有
/root
/project-A
file1
/project-B
link-to-file1
你希望在项目B上工作,你需要检查一切。 Perforce并没有让符号链接对你透明,它只是复制它。它也可能是仅限Unix的功能。
答案 3 :(得分:0)
在perforce中,您可以通过clientview定义工作区(也称为客户端)的设置。
每个工作空间/客户端都有一个从depot-path到workspace-path的映射列表。
您可以致电p4 client
查看/编辑它。
根据您的情况,您只需向project-b客户端添加一个映射,类似于:
//depot/project-a/files/constant.java //project-b-client/files/constant.java
这很容易,你有你想要的东西。
BUT:
在实践中,如果有几个人正在从事项目-a和项目-b,那么就会导致一些问题:
- 在适当的工作环境中,每个人都应该拥有不同的工作空间/客户。因此,每个人都需要做这个改变。只有时间才能忘记它或者做错了
- 必须使用它但不熟悉perforce的开发人员如果在其中一个项目中更改“constant.java”,则不会想到对其他项目的影响。
- 想象一下你想在其中一个项目上使用codefreeze(例如用于测试目的)。如果其他项目仍想改变“constant.java”怎么办?
这种方法可能会有更多麻烦。 我建议将文件从a集成到b,反之亦然,或者(在更复杂的环境中)将文件(可能不仅是源文件,还有jar或更大的lib)放入工件库中。然后项目从那里(通过依赖管理器)获得它。例如,请参阅ivy或maven或gradle。
这些替代方案肯定要多得多,但在一个稍微复杂的软件项目中,它们绝对值得。