我可能把事情复杂化了,并且很可能在这里遇到一个独特的情况,但如果有任何事情对任何人来说都很突出,我会喜欢一些想法。
摘要:我正在尝试将一大块源代码从我们的 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 并相应地显示在更改列表中。