【发布时间】:2011-02-12 22:55:10
【问题描述】:
在工作中,开发使用 perforce 来处理代码共享。我不会说“修订控制”,因为我们不允许签入更改,直到它们准备好进行回归测试。为了让我的个人变更集处于修订控制之下,我已获准构建自己的 git 并将 perforce depot 的客户端视图初始化为 git repo。
但是,这样做有一些困难。
-
客户端视图位于
~、(~/p4) 的子文件夹中,我也想将~置于修订控制之下,并拥有其独立的历史记录。我不知道如何在不使用子模块的情况下将~的历史记录与~/p4分开。子模块的问题在于,看起来我必须创建一个将成为子模块的存储库,然后是git submodule add <repo> <path>。但是除了~之外,没有其他地方可以创建子模块的存储库。似乎没有安全的地方可以使用 git p4 clone 创建软件仓库的初始客户端视图。(我正在假设不支持将 repo 初始化或克隆到 git repo 的子目录中。至少,我找不到任何关于嵌套 git repos 的权威。)
编辑:仅仅忽略以
~为根的repo 中的~/p4是否足以让我在~/p4中初始化一个嵌套repo?当我访问 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...
【问题讨论】:
-
您可以将一个 git 存储库放在另一个存储库中。如果你不将它标记为子模块,git 对它没有什么特别的——它只是另一个子目录。不过,我建议将其添加到 .gitignore。
-
您的
__git_ps1只是在树上寻找 .git 目录。它不是询问 git 当前子树是否被忽略。 -
第 2 点:在您通过回归测试之前,您不得提交 perforce,并且您必须将工作副本保存在从备份中排除的指定目录中?这是否真的意味着正在进行的工作被认为毫无价值?
-
Novelocrat:这不是很残忍吗?
标签: git centos perforce git-p4