3

我们有一些开发人员推送到服务器上的远程裸仓库,并且想做一些事情,比如使用来自这个中央裸仓库的 git p4 自动推送以每晚执行一次。但是我遇到了一个障碍,因为您似乎无法在工作树之外运行 git p4 submit 。

处理这种情况的推荐方法是什么?

4

2 回答 2

1

我对每隔几分钟运行一次并在 git 和 p4 之间进行双向同步的脚本执行类似操作。但是如果没有检出的 git 树和 p4 存储库,git-p4 就无法工作。总之,你最终得到了 3 个版本的源代码:

  1. 裸露的 git 仓库
  2. 为“git p4”签出 git repo 以完成其工作
  3. p4 结帐从提交到 p4。

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

  1. 更新签出的 git 树(git pull --rebase)
  2. 将最新的上游 p4 更改下拉到 p4/master (git p4 sync)
  3. rebase git world 对 p4 世界 (git rebase p4/master)
  4. 将 git 更改发送到 p4(git p4 提交)
  5. 重写'dev'分支(git push origin +HEAD:dev)

陷阱

  1. 合并冲突。这些实际上很少发生,但可能会导致一些问题。

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

  3. RCS 关键字。'git p4' 的较新版本现在可以处理 RCS 关键字,但最初它没有,所以整个事情偶尔会卡住,因为它们会导致合并冲突。

设置需要一段时间,但现在已经使用了 18 个月,有 100 多名开发人员,几乎没有发生任何事件。

于 2012-07-12T08:50:24.137 回答
0

不使用 git-p4 可能是最简单的,而只是签出 git 树,这也是一个强制签出,然后从那里编写所有脚本?即做一个git pull,解析输出以编辑适当的文件,添加新的,删除删除的,然后提交到perforce?

于 2012-07-08T14:09:01.840 回答