git show显示特定标签的子模块提交ID

时间:2018-10-26 13:41:22

标签: git git-submodules

我试图找出项目中每个发行版的子模块提交ID。因此,我要编写一个遍历git标签的脚本,然后执行以下命令:

 $ git show V1.2.3.4:Files/targetdir/dbscripts
 fatal: bad object V1.2.3.4:Files/targetdir/dbscripts

如果我尝试的不是子模块的其他路径,则可以正常工作。没用git checkout强行强制解决方案,我有什么选择?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式间接获得该信息:

git cat-file -p <revision>:<directory containing submodule>

micropython项目为例,我们看到以下子模块:

$ git submodule
 43a6e6bd3bbc03dc501e16b89fba0ef042ed3ea0 lib/axtls (remotes/origin/micropython-2.1.3)
 35aaec4418ad78628a3b935885dd189d41ce779b lib/berkeley-db-1.xx (remotes/origin/embedded)
 e9de7e35f2339598b16cbb375f9992643ed81209 lib/libffi (v3.2.1-146-ge9de7e3)
 92f23d6ca0971a32f2085b9480e738d34174417b lib/lwip (STABLE-2_0_3_RELEASE)
 293f553ed9551c1fdfd05eac48e75bbdeb4e7290 lib/nrfx (v1.1.0)
 f690e03b53839c055ffc021ec4c9c1ac45b5b7d6 lib/stm32lib (F0-1.9.0+F4-1.16.0+F7-1.7.0+H7-1.2.0+L4-1.8.1-14-gf690e03)

如果我想在标签lib/axtls中查看1.0.0的版本,可以 这个:

$ git cat-file -p 1.0.0:lib

哪个会吸引我:

100644 blob e719821bfc7fa2e43624bce6a49494fb9c979539    README.md
160000 commit 67d27df4b5d097e146599fc4fb160a2adcbf5632  axtls
160000 commit dab957dacddcbf6cbc85d42df62e189e4877bb72  berkeley-db-1.xx
040000 tree 781cb0c2cb85996792d7fdef496771dc00318658    cmsis
040000 tree 197df18400ba59e6fc9239cb092ebe5297fc6038    embed
040000 tree 31352b2af11cebf4699621325099328fd83ceb87    fatfs
040000 tree e6c32aad43f98da3a3b87c21b5af7d0f115fe290    libc
160000 commit e9de7e35f2339598b16cbb375f9992643ed81209  libffi
040000 tree 92a3d42de877598a24f46059d0dfeed9614fe7a4    libm
160000 commit 5b8b5d459e7dd890724515bbfad86c705234f9ec  lwip
040000 tree e747bbd2cea7f36bc6a77f73409bdb98062f2b06    memzip
040000 tree 33f546df4dfba0ae41a2c4c9ee9bfc261d8642e2    mp-readline
040000 tree 3089a08f2a61d61583bac5d4b60dcfdf50140d3b    netutils
040000 tree 1d10d514d7e2df771409b740c4f175954f772f9b    timeutils
040000 tree cfa226ef2b8f198cbcd8e4b2f42d4164bf7b7f9c    utils

您会看到axtls目录中有一个commit对象, 哈希是与该子模块关联的提交ID。所以我 可能只获得修订中的lib/axtls子模块的提交 1.0.0像这样:

$ git cat-file -p 1.0.0:lib | awk '$4 == "axtls" {print $3}'
67d27df4b5d097e146599fc4fb160a2adcbf5632

答案 1 :(得分:0)

不使用show,使用rev-parse。 Show将V1.2.3.4:Files/targetdir/dbscripts解析为一个ID并尝试向您显示其内容,rev-parse仅向您显示ID。根据定义,子模块的内容在单独的历史记录中,仅记录其ID,并且您可能不会在当前存储库中携带历史记录本身(尽管您可以,这是我使用的特技,并且喜欢携带实用程序和测试库)主仓库中的历史记录作为分支)。

相关问题