Git如何在本地嵌套远程目录?

时间:2012-01-26 03:54:38

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

我要做的是拥有一个名为'lib'的根目录的主仓库,其中有两个子目录'js'和'html'。在基于'lib'创建本地/ dev分支时,我需要拉出主'html'目录,但在该目录中我需要最新的'js'目录。

Fyi,'html'包含各种项目的几个模板,'js'包含我们自己的Javascript库,但也包含第三方:jquery,YUI,Cufon等。理想情况下我想尽可能从第三方回购中获取,尽管我暂时没有那个生活。

就我而言,'js'应该与'html'分开,因为它与其他与'html'目录无关的项目使用,但基于'html'模板的项目总是需要'js'

所以我的问题:

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

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

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

当在本地分支上完成工作时,我们将与dev分支合并。项目完成后,我们将dev与master合并。所以第三个问题:

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

概述拟议工作流程的图表: Diagram outlining the proposed workflow


我很高兴被告知我的概念有所偏差,但如果是这样,请帮助我解释原因,以及如何实现上述目标。我绝对不是Git专业人士,我正在尝试与Git合作。

1 个答案:

答案 0 :(得分:1)

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

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

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

换句话说:

  • 您克隆lib,并初始化您的htmljs repo,它们没有为您提供预期的目录结构(您甚至没有html或lib中的js个目录,因为你没有更新你的子模块。)
  • 您可以单独克隆htmljs repos
  • 您创建了一个单独的目录结构(非git):
    • 符号链接到lib cloned repo
    • lib/htmlhtml克隆回购的符号链接
    • lib/html/jsjs克隆回购的符号链接

为了让您的父级仓库lib(已初始化但未更新子模块)检测两个子模块的更改,您还可以将lib仓库中的符号链接添加到两个单独的{{1 }和html克隆回购 这样,您可以使用新更新的两个子模块提交js repo。

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