【问题标题】:git-p4 and pulling from other reposgit-p4 并从其他存储库中提取
【发布时间】:2009-10-25 05:55:46
【问题描述】:

我有一台笔记本电脑和一台台式机,我正在尝试学习使用 git 来管理我对 perforce 存储库的工作。我在桌面上成功使用了 git-p4,也可以在笔记本电脑上成功使用它,隔离。但是,我想做的一件事就是将更改从笔记本电脑“拉”或“推”到台式机,反之亦然,而无需先将它们签入与 git 同步的 p4 分支。

所以,这就是我设置两个存储库的方法: 1)使用 git-p4 clone 在我的桌面上设置一个 repo。做一些工作,向 git 提交几次,向 git-p4 提交几次。一切都按预期工作。 2)稍后,在我的笔记本电脑上设置一个仓库,准备在两台机器上工作。同样,使用 git-p4 克隆当前的 p4 存储库(现在检查了过去我在 (1) 中执行 git-p4 的几个修订。

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

基本上,我希望能够在笔记本电脑和台式机之间来回推/拉东西,而无需实际签入 p4。

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

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

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

【问题讨论】:

    标签: git merge perforce php4 git-p4


    【解决方案1】:

    问题在于您的两个存储库(台式机和笔记本电脑)没有意识到它们通过 Perforce 相互关联。正常的git-p4 克隆将取自树顶 因此,对于相同的更改,您最终会得到不同的提交标识符。这是因为 git "commit" 包含有关其父级的信息。

    最简单的解决方案如下:

    1. 在您的桌面上创建 git-p4 克隆。
    2. git clone 从您的台式机到您的笔记本电脑。

    现在,您的笔记本电脑和台式机都将拥有来自 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 中所做的工作分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2019-08-16
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2018-02-16
      • 2012-08-06
      相关资源
      最近更新 更多