2014-08-27 50 views
3

这可能很糟糕,我不确定。git是否允许“裸”子模块?

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

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

而且回购“配置”与工作目录

/config 
/config/config.json 

的command.script文件有行动与裸露的回购互动。恩。运行command.script BRANCH1将运行命令

git show BRANCH1:config.json 

有什么办法,只有“/产品/配置/”文件夹中即可“产品”回购的子模块,例如在“产品”回购是克隆的“配置”回购也会从它的起源克隆

git clone --bare [config origin here] config 

,并在“产品”回购是牵强,该“/产品/配置”子模块可以获取

git fetch origin '*:*' 

或者是这是什么东西应该通过某种钩子来处理?

+0

允许裸露的子模块:我不这么认为。 – linquize 2014-08-28 01:35:01

回答

2

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

该条目只能用于非裸回购,以作为嵌套(子模块)回购使用。

这就是为什么git clone man page提到:在创建克隆

--recursive 
--recurse-submodules 

后,初始化内的所有子模块,使用它们的默认设置。这相当于克隆完成后立即运行git submodule update --init --recursive。如果克隆库不具有worktree /结帐
此选项将被忽略(即如果任何--no-checkout/-n--bare,或--mirror给出)


这意味着它是最好的config repo在右边的SHA1(在第一个product repo中由gitlink记录的那个)被单独克隆(甚至裸露),并且git show BRANCH1:config.json在该其他克隆回购(with git -C)中被执行。

+0

谢谢,我不知道他们也加了-C开关。这将是有用的。所以钩子不会是一个好方法吗? – 2014-08-28 11:48:43

+0

@TylerClendenin是的,一个克隆--bare允许回购推动(你可以推到裸回购)。然后,您可以添加一个post-receive钩子来执行您想要的任何进程,正如我昨天在http://stackoverflow.com/a/25499592/6309中解释的那样。 – VonC 2014-08-28 11:52:15