2010-04-27 146 views
2

在工作中,开发使用perforce处理代码共享。我不会说“修订控制”,因为我们不允许检查变化,直到他们准备好进行回归测试。为了让我的个人变更集在版本控制之下,我已经准备好建立我自己的git并将perforce depot的客户端视图初始化为git回购。Git回购计划问题

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

  1. 客户视图住在的~~/p4)的子文件夹,并且我想把~版本控制下为好,有自己独立的历史。我无法弄清楚如何在不使用子模块的情况下将~的历史与~/p4分开。子模块的问题是,它看起来像我必须做一个存储库,将成为子模块,然后git submodule add <repo> <path>。但是除了在~之外,没有地方可以制作子模块的存储库。似乎没有安全的地方用git p4克隆创建仓库的初始客户端视图。

    (我正在关闭该INITING或克隆一个回购到git仓库的子目录中的假设是不支持的。至少,我能找到什么嵌套的git回购协议为准。)

    编辑:仅仅是无视~/p4在回购植根于~足以让我初始化一个嵌套回购~/p4?当我访问git仓库的忽略子目录时,我的__git_ps1函数仍然认为我在git仓库中,所以我倾向于认为不是。

  2. 我需要通过git p4 sync创建的“远程”存储库成为〜/ p4中的一个分支。我们需要将所有代码保存在〜/ p4中,以便它不会被备份。我可以从一个真正属于本地分支的“远程”分支中抽出吗?

  3. 这一个只是为了方便,但我想我可以通过问它学到一些东西。对于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 ...

+1

你可以有一个git仓库坐在另一个。如果你不把它标记为子模块,git对它没有什么特别的 - 它只是另一个子目录。不过,我建议将它添加到.gitignore中。 – Novelocrat 2010-04-27 16:33:48

+0

您的'__git_ps1'只是走在寻找.git目录的树上。这并不是要求git是否忽略当前的子树。 – Novelocrat 2010-04-27 16:34:45

+1

第2点:在通过回归测试之前,您不允许执行perforce,并且您必须将工作副本保存在排除在备份之外的指定目录中?这是否意味着进行中的工作被视为毫无价值? – Novelocrat 2010-04-27 16:36:15

回答

2

回答#1,如果你真的想把你的整个home目录放在一个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,但是,是的,你可以从“远程”回购是本地文件系统中提取。至于从当地分支“拉”,那不是拉;拉动涉及取和合并。如果你忽略提取,它只是一个合并,所以你真的在谈论从本地分支合并。