题
在工作中,开发使用Perforce来处理代码共享。我不会说“修订控制”,因为在准备回归测试之前,我们不允许检查更改。为了使我的个人更改集在修订控制下,我被批准了,以建立自己的git并将Perforce Depot的客户视图初始化为Git Repo。
但是,这样做有一些困难。
客户视图生活在
~
, (~/p4
),我想把~
在修订控制下,具有独立的历史。我不知道如何保留历史~
从.....分离~/p4
不使用子模块。子模块的问题在于,看起来我必须去制作一个将成为子模块的存储库,然后git submodule add <repo> <path>
. 。但是除了在~
. 。似乎没有安全的地方可以使用GIT P4克隆来创建仓库的初始客户视图。(我是根据一个假设,即不支持将存储库或克隆回购中的子目录中的子目录。至少,我在嵌套的git存储库上没有任何权威。)
编辑: 只是忽略
~/p4
在扎根的回购中~
足以让我在~/p4
?我的__git_ps1函数仍然认为当我访问一个忽略的git repo子目录时,我在git存储库中,所以我倾向于不思考。我需要Git P4 Sync创建的“远程”存储库作为〜/p4中的分支。我们必须将所有代码保存在〜/p4中,以免备份。我可以从真正是本地分支的“远程”分支中拉出吗?
这只是为了方便,但我认为我可以通过问一下来学到一些东西。对于99%的项目,我只想将P4 Head修订版作为Intal Commit对象开始。对于其他1%的人,我想吸取整个P4历史记录,以便可以在Git中浏览它。 IOW,完成唯一才能使遥控器/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更改者,并且头看起来像P4的头。
编辑:Meagar的答案对我不太有用。
我已经唯一的〜并对此进行了一些委托。我忽略了〜/p4和〜/p4不在任何提交对象中。=:
[~@ernie02] (master) $ git show HEAD:p4
fatal: Path 'p4' exists on disk, but not in 'HEAD'.
然后,我去了〜/p4/prod,这是一个我想检查的分支。但是这个存储库被打破了:
[~/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到它...
解决方案
在回答#1时,如果您真的想将整个主目录放在git存储库中,但是在单独的存储库中拥有〜/p4,只需将“ p4”添加到 .git_ignore
在您的主目录中,在P4中进行另一个回购:
$ cd ~
$ git init
$ echo "p4" > .git_ignore
$ git add .git_ignore
# add all files/directories except p4
$ git commit
$ cd p4
$ git init
$ git add .
$ git commit
我不太遵循#2,但是是的,您可以从文件系统本地的“远程”存储库中拉出。至于从当地分支中“拉”,这不是拉动的;拉力涉及提取和合并。如果您省略了获取,那只是一个合并,因此您实际上是在谈论从当地分支机构合并。