git show для отображения идентификатора коммита субмодуля для определенного тега - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь выяснить идентификатор коммита субмодуля для каждого релиза, который был сделан в моем проекте.Поэтому я собирался написать скрипт, который перебирает теги git и затем выполняет следующую команду:

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

Если я пытаюсь использовать другой путь, который не является подмодулем, он работает нормально.Если не считать грубого форсирования решения с помощью git checkout, какие у меня варианты?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Не используйте show, используйте rev-parse.Show преобразует V1.2.3.4:Files/targetdir/dbscripts в идентификатор и пытается показать вам его содержимое, rev-parse просто показывает вам идентификатор.Контент субмодуля по определению находится в отдельной истории, с записанным только его идентификатором, и вы, вероятно, не несете саму историю в текущем репо (хотя вы могли бы, это трюк, который я использую и нравится, с библиотекой утилит и тестов)истории в основном репо как ветке).

0 голосов
/ 26 октября 2018

Вы можете получить эту информацию косвенно, выполнив что-то вроде:

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, где хеш - это идентификатор фиксации, связанный с этим подмодулем. Так что я может получить только коммит для субмодуля lib/axtls в ревизии 1.0.0 вот так:

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