在工作中,开发使用Perforce来处理代码共享。我不会说“修订控制”,因为在准备回归测试之前,我们不允许检查更改。为了使我的个人更改集在修订控制下,我被批准了,以建立自己的git并将Perforce Depot的客户视图初始化为Git Repo。

但是,这样做有一些困难。

  1. 客户视图生活在 ~, (~/p4),我想把 ~ 在修订控制下,具有独立的历史。我不知道如何保留历史 ~ 从.....分离 ~/p4 不使用子模块。子模块的问题在于,看起来我必须去制作一个将成为子模块的存储库,然后 git submodule add <repo> <path>. 。但是除了在 ~. 。似乎没有安全的地方可以使用GIT P4克隆来创建仓库的初始客户视图。

    (我是根据一个假设,即不支持将存储库或克隆回购中的子目录中的子目录。至少,我在嵌套的git存储库上没有任何权威。)

    编辑: 只是忽略 ~/p4 在扎根的回购中 ~ 足以让我在 ~/p4?我的__git_ps1函数仍然认为当我访问一个忽略的git repo子目录时,我在git存储库中,所以我倾向于不思考。

  2. 我需要Git P4 Sync创建的“远程”存储库作为〜/p4中的分支。我们必须将所有代码保存在〜/p4中,以免备份。我可以从真正是本地分支的“远程”分支中拉出吗?

  3. 这只是为了方便,但我认为我可以通过问一下来学到一些东西。对于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,但是是的,您可以从文件系统本地的“远程”存储库中拉出。至于从当地分支中“拉”,这不是拉动的;拉力涉及提取和合并。如果您省略了获取,那只是一个合并,因此您实际上是在谈论从当地分支机构合并。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top