在工作中,开发使用perforce处理代码共享。我不会说“修订控制”,因为我们不允许检查变化,直到他们准备好进行回归测试。为了让我的个人变更集在版本控制之下,我已经准备好建立我自己的git并将perforce depot的客户端视图初始化为git回购。Git回购计划问题
但是,这样做有一些困难。
客户视图住在的
~
(~/p4
)的子文件夹,并且我想把~
版本控制下为好,有自己独立的历史。我无法弄清楚如何在不使用子模块的情况下将~
的历史与~/p4
分开。子模块的问题是,它看起来像我必须做一个存储库,将成为子模块,然后git submodule add <repo> <path>
。但是除了在~
之外,没有地方可以制作子模块的存储库。似乎没有安全的地方用git p4克隆创建仓库的初始客户端视图。(我正在关闭该INITING或克隆一个回购到git仓库的子目录中的假设是不支持的。至少,我能找到什么嵌套的git回购协议为准。)
编辑:仅仅是无视
~/p4
在回购植根于~
足以让我初始化一个嵌套回购~/p4
?当我访问git仓库的忽略子目录时,我的__git_ps1函数仍然认为我在git仓库中,所以我倾向于认为不是。我需要通过git p4 sync创建的“远程”存储库成为〜/ p4中的一个分支。我们需要将所有代码保存在〜/ p4中,以便它不会被备份。我可以从一个真正属于本地分支的“远程”分支中抽出吗?
这一个只是为了方便,但我想我可以通过问它学到一些东西。对于99%的项目,我只是想以p4头版本作为初始提交对象开始。对于其他1%,我想吸取整个p4的历史,以便我可以在git中浏览它。 IOW,我做initalizing之后,最初提交的遥控器/ 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的回答并不适合我。
我已经initalized〜并检查了它的一些承诺。我忽略了〜/ P4和〜/ P4不以任何commit对象=:
[[email protected]] (master) $ git show HEAD:p4
fatal: Path 'p4' exists on disk, but not in 'HEAD'.
然后我去了〜/ P4/PROD,分支我要退房。但这个回购协议被打破:
[~/p4/[email protected]] (master) $ git log
(shows the log for the repo rooted at ~)
[~/p4/[email protected]] (master) $ git init
Initialized empty Git repository in ~/p4/prod/.git/
[~/p4/[email protected]] (master) $ git log
fatal: bad default revision 'HEAD'
编辑编辑:哎呀,我忘了提交的东西~/p4/prod
。我现在正在尝试一个git p4同步/ depot/prod ...
你可以有一个git仓库坐在另一个。如果你不把它标记为子模块,git对它没有什么特别的 - 它只是另一个子目录。不过,我建议将它添加到.gitignore中。 – Novelocrat 2010-04-27 16:33:48
您的'__git_ps1'只是走在寻找.git目录的树上。这并不是要求git是否忽略当前的子树。 – Novelocrat 2010-04-27 16:34:45
第2点:在通过回归测试之前,您不允许执行perforce,并且您必须将工作副本保存在排除在备份之外的指定目录中?这是否意味着进行中的工作被视为毫无价值? – Novelocrat 2010-04-27 16:36:15