在工作中,开发使用 perforce 来处理代码共享。我不会说“版本控制”,因为在它们准备好进行回归测试之前,我们不允许 checkin 更改。为了让我的个人变更集处于修订控制之下,我获准构建自己的 git 并将 perforce depot 的客户端 View 初始化为 git repo。
然而,这样做有一些困难。
客户端 View 位于
~
的子文件夹中, (~/p4
), 我想把~
也在修订控制下,有自己独立的历史。我不知道如何保留~
的历史记录与~/p4
分开不使用子模块。子模块的问题是看起来我必须去创建一个将成为子模块的存储库,然后git submodule add <repo> <path>
.但是除了~
之外,没有地方可以创建子模块的存储库。 .似乎没有安全的地方可以使用 git p4 clone 创建软件仓库的初始客户端 View 。(我正在假设不支持将 repo 启动或克隆到 git repo 的子目录中。至少,我找不到关于嵌套 git repos 的任何权威。)
编辑: 只是忽略了
~/p4
在以~
为根的 repo 协议(protocol)中足以让我在~/p4
中初始化一个嵌套的 repo 协议(protocol)?当我访问 git 存储库的一个被忽略的子目录时,我的 __git_ps1 函数仍然认为我在 git 存储库中,所以我倾向于认为不是。我需要将 git p4 sync 创建的“远程”存储库作为 ~/p4 中的一个分支。我们需要将所有代码保存在 ~/p4 中,以免备份。我可以从实际上是本地分支的“远程”分支中 pull 数据吗?
这个只是为了方便,但我想我可以通过问它来学习一些东西。对于项目的 99%,我只想以 p4 head 修订作为初始提交对象开始。对于另外 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 的回答对我来说不太适用。
我已经初始化了 ~ 并 checkin 了一些提交。我忽略了 ~/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 ...
最佳答案
在回答 #1 时,如果你真的想将整个主目录放在一个 git 存储库中,但将 ~/p4 放在一个单独的存储库中,只需将“p4”添加到 .git_ignore
中你的主目录,并在 p4 中创建另一个 repo:
$ 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,但是是的,您可以从文件系统本地的“远程”存储库中提取。至于从本地分支机构“pull ”,那不是 pull ; pull 涉及获取和 merge 。如果省略 fetch,它只是一个 merge ,所以你实际上是在谈论从本地分支 merge 。
关于Git repo 规划问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2722922/