在工作中,开发使用 perforce 来处理代码共享。我不会说“修订控制”,因为我们不允许签入更改,直到它们准备好进行回归测试。为了让我的个人变更集处于修订控制之下,我已获准构建自己的 git 并将 perforce depot 的客户端视图初始化为 git repo。
然而,这样做有一些困难。
客户端视图位于
~
, (~/p4
) 的子文件夹中,我也希望对其~
进行修订控制,并具有自己的单独历史记录。我不知道如何在不使用子模块的情况下将历史记录~
分开。~/p4
子模块的问题在于,看起来我必须创建一个将成为子模块的存储库,然后git submodule add <repo> <path>
. 但是除了在~
. 似乎没有安全的地方可以使用 git p4 clone 创建软件仓库的初始客户端视图。(我正在假设不支持将 repo 初始化或克隆到 git repo 的子目录中。至少,我在嵌套的 git repos 上找不到任何权威。)
编辑:仅仅是忽略
~/p4
回购的根源就~
足以让我在其中初始化一个嵌套回购~/p4
吗?当我访问 git repo 的一个被忽略的子目录时,我的 __git_ps1 函数仍然认为我在一个 git 存储库中,所以我倾向于不这么认为。我需要将 git p4 sync 创建的“远程”存储库作为 ~/p4 中的一个分支。我们需要将所有代码保存在 ~/p4 中,这样它就不会被备份。我可以从真正是本地分支的“远程”分支中提取吗?
这只是为了方便,但我认为我可以通过询问来学习一些东西。对于 99% 的项目,我只想以 p4 头版本作为初始提交对象开始。对于另外 1%,我想把整个 p4 历史记录下来,以便我可以在 git 中浏览它。IOW,在我完成初始化后, remotes/p4/master 分支的初始提交将包含:
revision 1 of //depot/prod/Foo/Bar/* revision X of other files in //depot/prod/*, where X is the head revision
并且该
remotes/p4/master
分支包含 Y 个提交,其中 Y 是在 中包含文件的更改列表的数量,//depot/prod/Foo/Bar/*
历史中的每个提交对应于这些 p4 更改列表之一,并且 HEAD 看起来像 p4 的头部。
编辑:meagar 的回答对我不太适用。
我已经初始化 ~ 并签入了一些提交。我忽略了 ~/p4 并且 ~/p4 不在任何提交对象中。=:
[~@ernie02] (master) $ git show HEAD:p4
fatal: Path 'p4' exists on disk, but not in 'HEAD'.
然后我去了 ~/p4/prod,一个我想签出的分支。但是这个 repo 坏了:
[~/p4/prod@ernie02] (master) $ git log
(shows the log for the repo rooted at ~)
[~/p4/prod@ernie02] (master) $ git init
Initialized empty Git repository in ~/p4/prod/.git/
[~/p4/prod@ernie02] (master) $ git log
fatal: bad default revision 'HEAD'
编辑编辑:糟糕,我忘了向~/p4/prod
. 我现在正在尝试 git p4 sync //depot/prod...