Find all submodules in git and their commits
Asked Answered
T

2

1

I have a project on my git repositary which contains submodules and those submodules contains feather submodules.

Since I am not responsible to all the submodules, I don't know what changed there after I updated the commit I was looking at. For this reason I would like to document the current state.

This means, I would like to know all the submodules I am using (explicit and non-explicit). For each submodules I would like to know its Tag and\or commit.

I found:

git ls-files --stage

helpful, but shows only commits from my repository and not inside the submodules.

Any idea?

Tweed answered 15/10, 2018 at 11:20 Comment(0)
F
1
git submodule foreach --recursive "git describe --tags HEAD --exact-match 2>/dev/null || git rev-parse HEAD"

Recursively in each submodule, run the commands git describe --tags HEAD --exact-match 2>/dev/null || git rev-parse HEAD

First try to find the most recent tag that exactly points at the head commit of each submodule. If no tag is found, then return the commit.

Friesen answered 15/10, 2018 at 14:11 Comment(0)
P
0
git ls-files --stage

helpful, but shows only commits from my repository and not inside the submodules.

Before Git 2.36 (Q2 2022), many output modes of "ls-files" do not work with its "--recurse-submodules" option, but the "--stage" mode has now been taught to work with it.

See commit 290eada (23 Feb 2022) by Jonathan Tan (jhowtan).
(Merged by Junio C Hamano -- gitster -- in commit 7a4e06c, 06 Mar 2022)

ls-files: support --recurse-submodules --stage

Signed-off-by: Jonathan Tan

e77aa33 ("ls-files: optionally recurse into submodules", 2016-10-10, Git v2.11.0-rc0 -- merge listed in batch #11) taught ls-files the --recurse-submodules argument, but only in a limited set of circumstances.

In particular, --stage was unsupported, perhaps because there was no repo_find_unique_abbrev(), which was only introduced in 8bb9557 ("sha1-name.c``: add repo_find_unique_abbrev_r()", 2019-04-16, Git v2.22.0-rc0 -- merge listed in batch #8).

This function is needed for using --recurse-submodules with --stage.

git ls-files now includes in its man page:

--recurse-submodules:

Recursively calls ls-files on each active submodule in the repository.

Currently there is only support for the --cached and --stage modes.

Profile answered 10/3, 2022 at 17:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.