正在寻找一种同步Perforce< - >的方法混帐

时间:2015-06-01 22:37:23

标签: github perforce git-p4

我们的团队正在寻求将perforce服务器迁移到Git。有没有办法将我们的Github服务器中的分支机构的签到同步回Perforce以使它们保持同步?我一直在看git-p4,似乎有很多关于如何同步Perforce的文档 - > Git但不是相反。理想情况下,我想让它同步两种方式perforce< - > git,用p4-git可以吗?

5 个答案:

答案 0 :(得分:1)

Perforce GitFusion可以做到这一点,但开发人员必须将更改推送到GitFusion服务器而不是github服务器。

答案 1 :(得分:1)

在大多数情况下,合并冲突会自动解决。 Perforce是“大师”。从Perforce提交的人总是可以直接进行更改。从git提交的人将通过以下过程提交更改:

  1. 锁定主git repo
  2. 获取上游p4更改
  3. 根据上游p4
  4. 如果一切正常,请提交给p4

在(3)和(4)之间仍然留下了很小的窗口,Perforce区域中的某人可以向同一文件提交冲突的更改。但是实际上,这种情况只发生了几次,在几年的时间里,每周可能有数百次提交。

在这两种情况下,我进去并手动修补了一些麻烦的东西。我认为您可以很容易地自动放弃有问题的更改,但是最后,完全切换到git可以解决此问题。

答案 2 :(得分:0)

Git-p4的设计使得使用从Perforce导入的数据初始化git存储库。在此初始导入之后,完全支持git和Perforce存储库之间的双向通信,但支持有限的分支/合并除外。

将更新从Perforce导入git:

git p4 sync

将更改从git提交到Perforce:

git p4 submit

有关git-p4配置的更多详细信息,请参阅其documentation

更新:我总是建议在部署之前测试临时存储库中的任何流。

答案 3 :(得分:0)

过去我设置了这样的东西。我有一个gitolite repo和一个p4服务器。推送到gitolite repo的更改将由cron作业获取并转换为P4提交(通过git-p4提交)。同样,提交给p4的更改将由同一个cron作业获取并同步回git(通过git p4 rebase)。

涉及两个git repos:正常git开发人员所致的gitolite repo,以及一个基于git-p4的repo,其中进行了git-p4操作。

我有一个相当小的shell脚本来协调一切。主要棘手的领域是:

  • 锁定:你必须强行改造gitolite repo,所以你需要一些方法来确保开发人员在发生这种情况时不会丢失更改(我使用了锁文件)。

  • 合并冲突。偶尔会有两个人同时编辑P4和git中文件的同一部分。

答案 4 :(得分:0)

我自己也遇到过这个问题,据我所知,没有这种问题。

在我的情况下,我必须基本上:

  • 为Git中的更改创建补丁:git diff sha1..sha2 > mypatch.diff
  • 列出受影响的文件:git diff --name-only sha1..sha2 > files.list
  • 在P4 repo中应用补丁:git apply mypatch.diff
  • 协调P4中的更改:for each file in files.list; p4 reconcile $file; done
  • 编辑您的P4更改列表然后提交(我确信这也可以自动化,但我没有必要)。

我有几个脚本可以帮助我,你可以在这里找到它们:https://github.com/pgpbpadilla/git-p4-helpers#sharing-changes-git-p4

我一直在使用这个工作流程~6mo,它适用于大多数情况。

<强>注意事项

  • 这将为sha范围(a..b)中的所有提交创建单个更改列表。