2012-07-06 90 views
3

我们有一些开发人员推动服务器上的远程裸回购,并希望做一些类似于自动推送的操作,以便在该中央裸回购中使用git p4进行夜间执行。但是我遇到了一个障碍,因为它似乎无法在工作树之外运行git p4提交。git p4从裸仓库提交?

建议如何处理这种情况?

回答

1

我对每隔几分钟运行一次脚本做类似的事情,并在git和p4之间进行双向同步。但是如果没有检出的git树和p4回购库,git-p4就无法工作。在所有你结束了3个版本的源:

  1. 裸git仓库
  2. 签出的混帐回购协议为“混帐P4”做它在
  3. P4结账工作,从提交到P4 。

开发人员使用名为'dev'的分支推送到裸Git回购(在gitolite上)。然后,每隔几分钟,还有,做一个脚本:

  1. 更新已签出的git树(GIT拉--rebase)
  2. 拉下最新上游P4变为P4 /主(GIT P4同步)
  3. 针对P4世界
  4. 底垫git的世界(GIT底垫P4 /主)
  5. 发送的git变化至P4(GIT P4提交)
  6. 改写 '开发' 分支(混帐推产地+ HEAD:DEV)

Gotchas

  1. 合并冲突。这些实际上很少发生,但可能会导致一些问题。 (1)和(5)之间的变化,我不得不在整个事情上添加一些锁定,以便开发人员不会丢失更改。锁定只是创建一个锁定目录,然后在其中一个钩子脚本中使用它来延迟推送。

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

设置过程需要一段时间,但现在已经进行了18个月,100多名开发人员的事件很少。

+0

嗨卢克,thx在这看起来很有希望。我会尝试一下,让你知道它是如何发生的。 – ruedaminute 2012-07-13 14:59:06

0

它可能是最简单的不使用git-p4,但只是有一个结帐的git树,这也是一个强制结帐,并从那里脚本的一切? 即做一个git拉,分析输出编辑适当的文件,添加新的,删除删除的,然后提交到perforce?