【问题标题】:Git how to locally nest remote directories?Git如何在本地嵌套远程目录?
【发布时间】:2012-02-19 06:55:07
【问题描述】:

我想要做的是有一个根目录名为“lib”的主存储库,其中有 2 个子目录“js”和“html”。基于“lib”创建本地/开发分支时,我需要拉出主“html”目录,但在该目录中我需要最新的“js”目录。

仅供参考,“html”包含用于各种项目的多个模板,“js”包含我们自己的 Javascript 库,但也包含第 3 方:jquery、YUI、Cufon 等。理想情况下,我想尽可能从第 3 方 repo 中提取,尽管我暂时没有那个也能活。

在我的例子中,“js”应该与“html”分开,因为它被其他与“html”目录无关的项目使用,但基于“html”模板的项目总是需要“js” .

所以我的问题:

  • 我能否在“html”中为开发/本地分支嵌套“js”?

read about submodules in this SO questionsparse checkouts,但我不明白其中任何一个如何实现上述目标 - 除非我克隆 '/lib' 和 sparse checkout '/lib/html/template1/'例如,然后在 '/lib/html/template1/js/' 中克隆相同的 repo 和稀疏结帐 '/lib/js'。在这种情况下,我的第二个问题:

  • 如果我嵌套稀疏签出的 repo,当我 a) 在更高级别 ('/lib/html/template1/') 提交时会发生什么,以及当我在嵌套级别 ('/lib/html /template1/js/')?这听起来有点狡猾。

当本地分支的工作完成后,我们将与 dev 分支合并。项目完成后,我们会将 dev 与 master 合并。那么第三个问题:

  • 提议的解决方案是否允许上述目录结构和所描述的工作流程?

概述拟议工作流程的图表:


很高兴得知我的概念有偏差,但如果是这样,请帮助我解释原因,以及如何实现上述目标。我绝对不是 Git 专家,我正在尝试开始使用 Git。

【问题讨论】:

    标签: git workflow git-submodules branching-and-merging


    【解决方案1】:

    注意:子模块可以在您需要的任何分支中签出:您可以在父 repo 中的分支 A 中,在子模块中分支 B,父 repo 不在乎。所有父 repo 记录都是子模块 repo 的提交 SHA1。

    我真的建议不要使用稀疏结帐但是:

    • 维护三个独立的 Git 存储库(libjshtml
    • jshtml 链接为lib repo 中的子模块
    • (这是诀窍)维护一个单独的 lib 目录结构,其中包含指向 htmljs 的符号链接。

    换句话说:

    • 你克隆lib,并初始化你的htmljs repo,这并没有给你预期的目录结构(你甚至在lib中没有htmljs目录,因为你没有更新你的子模块)。
    • 您分别克隆 htmljs 存储库
    • 您使用以下命令创建一个单独的目录结构(非 git):
      • 符号链接到lib 克隆回购
      • lib/htmlhtml 克隆仓库的符号链接
      • lib/html/jsjs 克隆仓库的符号链接

    为了让您的父 repo lib(子模块已初始化但未更新)检测来自您的两个子模块的更改,您还可以从您的 lib repo 到两个单独的 htmljs 进行符号链接克隆存储库。
    这样,您可以使用新更新的两个子模块提交 lib repo。

    但是,您当前的所有开发都是从遵循您预期组织的非 git 目录结构进行的。

    【讨论】:

    • 这里是我@:我在 github 上设置了 3 个单独的 repos。在本地克隆 lib,添加 js 和 html 作为子模块。它们与一些 Git 系统文件一起出现在本地 lib 文件夹中。我认为这是我的困惑开始的地方,正如你所说的链接子模块,而且我在 lib 中没有 html 和 js 目录,因为我没有更新我的子模块 - 但它们实际上在那里......我没有克隆 html,但是当我将它作为子模块添加到 lib 时,它会将所有 html 文件克隆到 lib(在子模块 html 目录内)。这不应该发生吗?我几乎遵循,当上面清楚时,我会尝试符号链接。
    • @Danjah 当我谈到“你克隆lib,并初始化你的htmljs repo”时,我说的是lib,其中htmljs已作为子模块添加。即关于lib 的第二个克隆(之后您在第一个中声明/添加了子模块)
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2010-11-30
    • 2020-12-10
    • 2019-05-18
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多