- 问题**:我可以将git模块固定到特定的提交吗?
我正在编写一个构建脚本来生成一个工件,它是一个包含多个子模块的Zip归档文件,具有一些需求。
- 生成工件必须被标记/版本化
- 必须使用带有构建脚本的repo的标记来对构件进行版本控制
问题就在这里:
如果我结帐:
git clone git@whatever:thing/mybuildscipt
然后
git submodule update --init
我需要在构建脚本的repo中记录每个子模块的准确提交次数(最好是在. gitmodules中),以便在将来,如果我应该这样做,
git checkout 1.2.3
git submodule update
当构建脚本repo被标记为"1.2.3"时,我将访问相同的子模块。
很久以前,git子模块就是这样工作的:它们被固定到一个特定的提交,而那个提交哈希实际上在.gitmodule
中--我需要那个行为,根据我的研究,我一点也不清楚它是否仍然可能。
下面是在构建脚本中运行的命令的摘要,这样你就可以知道要完成什么。最后,如果我 checkout 包含构建脚本的git repo的特定版本,它应该会产生一个和以前一样的zip存档。
export NEXT_VERSION=$(
git tag --sort=committerdate \
| tail -1 \
| awk -F '.' '{print $1"."$2"." $3 +1}')
git submodule update --init
# remove the .git dir to save space
git submodule | awk '{print $2}' | xargs -I {} -n 1 rm -fR {}/.git
git submodule | awk '{print $2}' | xargs zip -qr ${FILE_NAME}
# push to object storage
mc cp ${FILE_NAME} ${ALIAS}/${bucket}/${FILE_NAME}
# tag
git tag ${NEXT_VERSION}
# update tags
git push --tags origin
1条答案
按热度按时间bvjxkvbb1#
那么,子模块的提交哈希值存储在哪里?
在**gitlink**中,将SHA1 recorded作为special entry in the index。
子模块的全部用途是记录/恢复其关联存储库的特定SHA1。
同一SHA1无法恢复的一种可能情况是,您的子模块配置为follow a branch,* 并且 * 您使用的是
git submodule update --remote
option。