从裸仓库提交git p4到Perforce?

3
我们有一些开发者将代码推送到服务器上的一个远程裸仓库,并希望能够自动化地使用git p4从这个中央裸仓库推送到perforce。但是遇到了一些麻烦,因为似乎无法在工作树之外运行git p4 submit。
那么应该如何处理这种情况呢?
2个回答

1

我使用一个脚本来完成类似的操作,它每隔几分钟运行一次,并在git和p4之间进行双向同步。但是,如果没有检出的git树和p4存储库,git-p4将无法工作。最终你会得到三个版本的源代码:

  1. 裸的git存储库
  2. 用于'git p4'工作的已检出的git存储库
  3. p4检出以提交到p4。

开发人员将代码推送到一个名为“dev”的分支上的裸git存储库(保存在gitolite上)。然后,每隔几分钟,有一个脚本执行以下操作:

  1. 更新已检出的git树(git pull --rebase)
  2. 将最新的上游p4更改拉取到p4/master中(git p4 sync)
  3. 将git世界与p4世界进行变基(git rebase p4/master)
  4. 将git更改发送到p4(git p4 submit)
  5. 重写'dev'分支(git push origin +HEAD:dev)

需要注意的事项

  1. 合并冲突。这些情况非常少见,但可能会引起一些问题。

  2. 我不得不在整个过程中添加一些锁定,以便开发人员在(1)和(5)之间推送更改时不会丢失更改。锁定只是创建一个锁定目录,然后在其中一个钩子脚本中使用以延迟推送。

  3. RCS关键字。新版本的“git p4”现在可以处理RCS关键字,但最初它不能,因此整个过程偶尔会被卡住,因为它们会导致合并冲突。

设置需要一段时间,但现在已经运行了18个月,有100多名开发人员,很少出现问题。


嗨,Luke,谢谢你的参与,这看起来非常有前途。我将尝试一下并让你知道进展如何。 - ruedaminute

0

也许最简单的方法是不使用git-p4,而只是拥有一个既是git树又是perforce checkout的checkout,并从那里编写脚本? 即执行git pull,解析输出以编辑适当的文件,添加新文件,删除已删除的文件,然后提交到perforce?


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