2014-08-27 124 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