【问题标题】:Git repo planning questionsGit repo 计划问题
【发布时间】:2011-02-12 22:55:10
【问题描述】:

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

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

  1. 客户端视图位于~、(~/p4) 的子文件夹中,我也想将~ 置于修订控制之下,并拥有其独立的历史记录。我不知道如何在不使用子模块的情况下将~ 的历史记录与~/p4 分开。子模块的问题在于,看起来我必须创建一个将成为子模块的存储库,然后是 git submodule add <repo> <path>。但是除了~ 之外,没有其他地方可以创建子模块的存储库。似乎没有安全的地方可以使用 git p4 clone 创建软件仓库的初始客户端视图。

    (我正在假设不支持将 repo 初始化或克隆到 git repo 的子目录中。至少,我找不到任何关于嵌套 git repos 的权威。)

    编辑:仅仅忽略以~ 为根的repo 中的~/p4 是否足以让我在~/p4 中初始化一个嵌套repo?当我访问 git repo 的一个被忽略的子目录时,我的 __git_ps1 函数仍然认为我在一个 git 存储库中,所以我倾向于不这样认为。

  2. 我需要将 git p4 sync 创建的“远程”存储库作为 ~/p4 中的一个分支。我们需要将所有代码保存在 ~/p4 中,这样它就不会被备份。我可以从实际上是本地分支的“远程”分支中提取吗?

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


【解决方案1】:

在回答 #1 时,如果您真的想将整个主目录放在 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,但是是的,您可以从文件系统本地的“远程”存储库中提取。至于从当地分支机构“拉动”,那不是拉动;拉动涉及提取和合并。如果你省略了 fetch,它只是一个合并,所以你实际上是在谈论从本地分支合并。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2014-09-22
    • 2018-07-24
    • 1970-01-01
    • 2012-12-21
    • 2014-02-14
    • 2019-05-25
    相关资源
    最近更新 更多