【问题标题】:Does git allow for "bare" submodules?git 是否允许“裸”子模块?
【发布时间】:2014-08-27 22:20:32
【问题描述】:

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

假设我们有一个带有工作目录的仓库“产品”

/product
/product/command.script
/product/config/ (bare git 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”repo被获取时,“/product/config”子模块可以被获取

git fetch origin '*:*'

或者这应该通过某种钩子来处理?

【问题讨论】:

  • 允许裸子模块:我不这么认为。

标签: git git-submodules git-bare


【解决方案1】:

否:当 repo "product" 被获取时,它的索引将包含一个gitlink (special entry recording the SHA1 of the submodule)

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

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

--recursive
--recurse-submodules

创建克隆后,使用默认设置初始化其中的所有子模块。这相当于在克隆完成后立即运行git submodule update --init --recursive
如果克隆的存储库没有工作树/签出(即,如果有任何--no-checkout/-n、@ 987654329@,或者--mirror 给定)


这意味着最好将config repo 单独克隆(甚至是裸露的)到正确的 SHA1(gitlink 在第一个product repo 中记录的那个),并且git show BRANCH1:config.json 是在另一个克隆的 repo (with git -C) 中执行。

【讨论】:

  • 谢谢,我也不知道他们添加了 -C 开关。那会很有用。所以钩子不是一个好方法吗?
  • @TylerClendenin 是的,克隆 --bare 允许推送到仓库(您可以推送到裸仓库)。然后,您可以添加一个接收后挂钩来执行您想要的任何过程,正如我昨天在 stackoverflow.com/a/25499592/6309 中解释的那样。
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多