git-p4并从其他回购中拉出来

时间:2009-10-25 05:55:47

标签: git merge perforce php4 git-p4

我有一台笔记本电脑和一台台式机,我正在努力学习使用git来管理我对perforce存储库的工作。我在桌面上成功使用git-p4,并且可以在笔记本电脑上成功使用它。但是,我希望能够做的一件事就是从笔记本电脑“拉”或“推”更改到桌面,反之亦然,而不先将它们检入到与git同步的p4分支。

所以,这就是我设置两个回购的方法: 1)使用git-p4 clone在我的桌面上设置一个repo。做一些工作,做几个提交git,几个提交到git-p4。一切都按预期工作。 2)之后,在我的笔记本电脑上设置一个回购,准备在两台机器上工作。同样地,使用git-p4来复制现在的当前p4 repo(现在已经检查过几次修改,我在(1)中执行了git-p4。

现在,我希望做的事情: 1)在桌面上做一些工作。将工作交给git,但不是p4。 2)转到笔记本电脑,从桌面回购中做一个git pull ... 3)继续我的笔记本电脑工作,定期做git。 4)(可选)从笔记本电脑提交到p4 5)(可选)推送到桌面(或从笔记本电脑拉到桌面)并继续在桌面上工作等。

基本上,我希望能够推回/拉回东西。笔记本电脑和桌面之间没有实际登记到p4。

这听起来应该是可能的吗?如果是的话,我上面的步骤有错吗?

以下是持续发生的事情:当我尝试在上面的(2)中执行“拉”时,我收到错误消息,说明存在冲突 - 这些冲突与p4分支的第一次检出之间的更改有关,以及第二个git-p4 repo创建的时间。换句话说,它们似乎是对第二个回购包含的代码中已经存在的更改的重放,但由于某种原因,它们不是。

我对git很新,所以我希望我的问题不是疯狂愚蠢或不可能理解。提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:5)

问题是你的两个存储库(台式机和笔记本电脑)没有意识到它们通过Perforce彼此相关。正常的git-p4克隆将从树顶获取 并且,因此,您将使用不同的提交标识符进行相同的更改。这是因为git“commit”包含有关其父母的信息。

最简单的解决方案是按以下方式工作:

  1. 在桌面上创建git-p4克隆。
  2. git clone从您的桌面到笔记本电脑。
  3. 现在,您的笔记本电脑和桌面都将拥有Perforce的共同历史记录。 (您可以通过在git log之前看到提交标识符不同来验证这一点,但在这两个步骤之后,应该是相同的。)

    在此之后,您应该能够在两个存储库之间进行拉动而不会发生冲突。

    事实上,您也可以在任何一个地方git p4 syncgit p4 rebase,因为git-p4足够聪明,可以检测对方的工作并继续。如果可以的话,您的笔记本电脑也会尝试从原始服务器(您的桌面)git pull {。}}。

    另外两点建议:

    • 不要在这两个存储库之间使用git pushpush to non-bare repositories通常是不安全的,即那些有工作树的存储库,例如你在这里描述的工作树。如果你进行这样的推送,那么索引将与工作树不同,诸如git status(以及git commit等)之类的东西将无法按照你期望的方式工作。
    • 将Perforce保留在单独的分支上(我使用master)并在主题分支上进行所有开发。只拉到这些分支。当您执行git p4 syncrebase时,请切换回master分支。然后从master合并到您的主题分支。这有助于保持上游历史非常清晰,并与您在git中所做的工作分开。
相关问题