作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置一个通用的 .gitmodules 文件,以用作新项目总是需要的特定静态数量的子模块的模板。然后使用 Restore git submodules from .gitmodules 中显示的技术一次性初始化子模块:
#!/bin/sh
#set -e
git config -f .gitmodules --get-regexp '^submodule\..*\.path$' |
while read path_key path
do
url_key=$(echo $path_key | sed 's/\.path/.url/')
url=$(git config -f .gitmodules --get "$url_key")
branch_key=$(echo $path_key | sed 's/\.path/.branch/')
branch=$(git config -f .gitmodules --get "$branch_key")
if [ ! -d "$path" ]; then
echo URL - $url, Path - $path, Branch - $branch
if [ -n "$branch" ]; then
branch="-b $branch"
fi
git submodule add --force $branch $url $path
fi
done
[submodule "externals/asio"]
path = externals/asio
url = https://github.com/chriskohlhoff/asio.git
branch = asio-1-11-0
fatal: Cannot update paths and switch to branch 'asio-1-11-0' at the same time.
Did you intend to checkout 'origin/asio-1-11-0' which can not be resolved as commit?
Unable to checkout submodule 'externals/asio'
cd externals/asio
git co asio-1-11-0
最佳答案
我认为是您需要的答案(从逻辑上讲,这在下一节之后)
我想问题是当前索引中还没有子模块。您要做的是首先将子模块克隆到位(使用您认为合适的任何 git clone
命令),检查所需的提交(通过任何合适的方式 - 可能是相同的 git clone
命令),然后use git submodule add
:
If <path> exists and is already a valid Git repository, then it is staged for commit without cloning.
.gitmodules
中创建条目。文件,然后将当前 checkout 的子模块的提交哈希 ID 添加到 super 项目的索引中。您无需在此处添加分支,您只需添加 - 这使用已 checkout 的提交,就像标签一样。
git submodule absorbgitdirs
在所有这一切结束时,所有子模块
.git
存储库迁移到 super 项目的
.git
目录。 (对此没有要求,如果您的 Git 较旧,则不会有
absorbgitdirs
。)
HEAD
的内容文件是组成散列 ID 的 41 个字节。
git submodule update --checkout
,默认操作是:
.gitmodules
中的指令克隆子模块 super 项目中的文件。git ls-files --stage <path>
或 git rev-parse :0:<path>
来查看它。漂亮的前端界面 git show
无法显示子项目提交哈希!这似乎是一个错误。)git submodule update --rebase
或
git submodule update --merge
,分支设置开始变得重要。
submodule.name.update
至
checkout
,
rebase
, 或
merge
, 在这种情况下
git submodule update --init
服从您在此处设置的任何内容。然后分支设置将再次重要。但是如果你不设置这些,
git submodule update --init
默认为
git submodule update --checkout
.
git submodule update
操作将导致 checkout 与 checkout 标签相同的提交哈希 ID,具有相同的分离 HEAD。因此这里不需要设置标签名,所以不要使用
-b <branch>
完全可以选择。
关于git - 如何在 gitmodules 文件中指定标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49490272/
我是一名优秀的程序员,十分优秀!