特定提交/标记处的git子模块

laik7k3q  于 2023-01-11  发布在  Git
关注(0)|答案(1)|浏览(137)
    • 问题**:我可以将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
bvjxkvbb

bvjxkvbb1#

那么,子模块的提交哈希值存储在哪里?
在**gitlink**中,将SHA1 recorded作为special entry in the index

git ls-files --stage|grep 160000

子模块的全部用途是记录/恢复其关联存储库的特定SHA1。
同一SHA1无法恢复的一种可能情况是,您的子模块配置为follow a branch,* 并且 * 您使用的是git submodule update --remote option

相关问题