Git repo规划问题

时间:2010-04-27 16:15:50

标签: git centos perforce git-p4

在工作中,开发使用perforce来处理代码共享。我不会说“修订控制”,因为在准备进行回归测试之前我们不允许检查更改。为了让我的个人变更集得到版本控制,我已经获得了批量构建我自己的git并初始化perforce depot的客户端视图作为git repo。

然而,这样做有一些困难。

  1. 客户端视图位于~,(~/p4)的子文件夹中,我想将~置于版本控制之下,并拥有自己独立的历史记录。我无法弄清楚如何在不使用子模块的情况下将~的历史记录与~/p4分开。子模块的问题在于,我必须创建一个将成为子模块的存储库,然后git submodule add <repo> <path>。但除了~之外,无处可以创建子模块的存储库。似乎没有安全的地方用git p4 clone创建库的初始客户端视图。

    (我的假设是不支持将repo启动或克隆到git repo的子目录中。至少,我在嵌套的git repos上找不到任何权威。)

    编辑只是忽略了~/p4根据~的仓库中的~/p4,足以允许我在revision 1 of //depot/prod/Foo/Bar/* revision X of other files in //depot/prod/*, where X is the head revision 中初始化嵌套仓库?当我访问一个被忽略的git repo子目录时,我的__git_ps1函数仍然认为我在git存储库中,所以我倾向于不这么认为。

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

  3. 这个只是为了方便,但我想我可以通过询问来学到一些东西。对于99%的项目,我只想以p4头修订作为初始提交对象开始。对于其他1%,我想吸取整个p4历史记录,以便我可以在git中浏览它。 IOW,在我完成初始化后,最初提交的remotes / p4 / master分支将包含:

    remotes/p4/master

    并且//depot/prod/Foo/Bar/*分支包含Y提交,其中Y是在[~@ernie02] (master) $ git show HEAD:p4 fatal: Path 'p4' exists on disk, but not in 'HEAD'. 中具有文件的更改列表的数量,历史记录中的每个提交对应于其中一个p4更改列表,并且HEAD查找像p4的头一样。

  4. 编辑:梅加尔的答案对我来说并不适用。

    我已经初学了〜并检查了一些提交。我忽略了〜/ p4,〜/ p4不在任何提交对象中。=:

    [~/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,我要查看的分支。但这个回购被破坏了:

    ~/p4/prod

    编辑编辑:哎呀,我忘了向{{1}}提交了一些内容。我现在正在尝试使用git p4 sync // depot / prod ...

1 个答案:

答案 0 :(得分:2)

回答#1,如果你真的想把你的整个主目录放在一个git存储库中,但是在一个单独的存储库中有〜/ p4,只需在主目录中的.git_ignore添加“p4”,并在第4页制作另一个回购:

$ 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,但是,您可以从文件系统本地的“远程”仓库中取出。至于从当地分支机构“拉”,那不是拉;牵引涉及获取和合并。如果省略fetch,它只是一个合并,所以你真的在谈论从本地分支合并。