git是否允许“裸”子模块?

时间:2014-08-27 22:20:33

标签: git git-submodules git-bare

这可能很糟糕,我不确定。

让我们说我们有一个带有工作目录的回购“产品”

/product
/product/command.script
/product/config/ (bare git repo)

带有工作目录的repo“config”

/config
/config/config.json

command.script文件具有与裸仓库交互的操作。恩。运行command.script BRANCH1将运行命令

git show BRANCH1:config.json

“/ product / config /”文件夹是否可以作为“product”repo的子模块,这样当克隆“product”repo时,也会克隆“config”repo

git clone --bare [config origin here] config

从其来源和获取“产品”仓库时,可以获取“/ product / config”子模块

git fetch origin '*:*'

或者这是应该通过某种钩子处理的东西吗?

1 个答案:

答案 0 :(得分:3)

否:当提取回购“产品”时,其索引将包含gitlink (special entry recording the SHA1 of the submodule)

该条目只能在非裸存储库中使用,以便作为嵌套(子模块)存储库使用。

这就是git clone man page提到的原因:

--recursive
--recurse-submodules
  

创建克隆后,使用其默认设置初始化其中的所有子模块。这相当于在克隆完成后立即运行git submodule update --init --recursive   如果克隆的存储库没有工作树/结帐(即,如果给出--no-checkout/-n--bare--mirror中的任何一个),则忽略此选项


这意味着最好将config repo单独克隆(甚至裸露)到正确的SHA1(第一个product repo中由gitlink记录的那个),以及{ {1}}在其他克隆仓库(with git -C)中执行。