1

我可能把事情复杂化了,并且很可能在这里遇到一个独特的情况,但如果有任何事情对任何人来说都很突出,我会喜欢一些想法。

摘要:我正在尝试将一大块源代码从我们的 perforce 存储库复制到 github 并手动使它们保持同步。最初的设置和推送到 git 效果很好,但现在事情正在分崩离析。例如,现在另一个团队提交了一个 PR,其中包含 /dira/dirb/ 中的一堆文件

我接受了 PR,将更改拉到我的本地 git 项目,将它们合并到 p4 分支,但是当我尝试提交它时,p4 将目录加倍 - 将所有文件从 /dira/dirb 推送到 /dira/dirb /迪拉/迪布/

细节:

我们正在使用流,所以我做的第一件事就是用我感兴趣的代码创建一个子流。因为我永远不需要这个子流(最终整个 repo 都将转到 git),所以我使用了一个任务流:

    Stream Root: //streambase/taskstream
    Parent: //streambase/projectstream
    Paths:  exclude ...  (exclude the original project)
            share dira/dirb/...
            exclude dira/dirb/buildcode/...

这让我看到了:

    -//streambase/taskstream/... ...
    //streambase/taskstream/dira/dirb/... dira/dirb/...
    -//streambase/taskstream/dira/dirb/buildcode/... dira/dirb/buildcode/...

接下来,为子流创建一个新的工作区:

  Workspace name: substream_workspace
  Workspace root: /Users/me/p4/gitp4parent/gitp4project
  Stream: taskstream (//streambase/taskstream)

  Workspace Mappings
      -//streambase/taskstream/... //substream_workspace/...
      //streambase/taskstream/dira/dirb/... //substream_workspace/dira/dirb/...
      -//streambase/taskstream/dira/dirb/buildcode/... //substream_workspace/dira/dirb/buildbode/...
  • 在我要克隆的位置上方创建了一个 .p4config 文件:
vi /Users/me/p4/gitp4parent/.p4config
    P4USER=me
    P4CLIENT=substream_workspace

然后我 git p4 将 perforce 子流克隆到我的本地机器

        git p4 clone //substream/taskstream

我本地版本的 git 创建了一个“主”分支。我创建了一个新的“主”分支,将 master 合并到它,并在我们的 github 帐户中给它一个远程仓库:

git branch main
git checkout main
git remote add github git@github:mycompany/taskproject
git push -u github main

当我接受 PR 时,我将它取回本地的“主”分支,切换到 master,然后合并。

此时 PR 中的所有文件都在 dira/dirb 下。当我这样做时git p4 submit –prepare-p4-only,所有本地文件都被移动到 dira/dirb/dira/dirb 并相应地显示在更改列表中。

4

0 回答 0