Bug: 'git ls-files' doesn't work on submodule in post-commit hook
- From
- Stefan <git.kernel.org_20@green-sparklet.de>
- Date
- Feb 24, 2020, 07:03 UTC
- Message-ID
- <ede4b653-35bf-d163-c27d-d23602dbd726@green-sparklet.de>
Hey there,
I think I found a bug in git: I want to use 'git ls-files' onto a git submodule, called in a post-commit hook of main repository, which doesn’t work. The same call in a post-checkout hook works perfectly.
Example setup to try it out, use a empty (temporary) folder: --- snipp --- mkdir git-submodulerepo cd git-submodulerepo git init git config user.email "you@example.com" git config user.name "Your Name" echo "nothing" > submodule_file.txt git add submodule_file.txt git commit submodule_file.txt -m "Add my file" cd .. mkdir git-repo cd git-repo git init git config user.email "you@example.com" git config user.name "Your Name" echo "nothing" > rubbish.txt git add rubbish.txt git commit rubbish.txt -m "Add my rubbish" git submodule add ../git-submodulerepo printf '#!/bin/bash\ncd git-submodulerepo\necho Git says my files are:\ngit ls-files\necho ---------------\necho Filesystem says my files are:\nls -w1\necho ---------------\n' > .git/hooks/post-commit chmod +x .git/hooks/post-commit cp .git/hooks/post-commit .git/hooks/post-checkout chmod +x .git/hooks/post-checkout --- snapp ---
So 'git ls-files' call in post-checkout hook works: $ git checkout HEAD A .gitmodules A git-submodulerepo Git says my files are: submodule_file.txt --------------- Filesystem says my files are: submodule_file.txt --------------- A 'git ls-files' in post-commit doesn’t work: $ echo nothing >> rubbish.txt && git commit rubbish.txt -m "Add just rubbish" Git says my files are: --------------- Filesystem says my files are: submodule_file.txt --------------- [master e05efb1] just rubbish 1 file changed, 1 insertion(+)
This was tested using git version 2.25.0.windows.1 With git version 2.21.0 (cygwin) git ls-files outputs "fatal: .git/index: index file open failed: Not a directory"
I didn’t test other hooks.
Calling "git ls-files" in hook for your main repository (and not a submodule) works for both cases. I checked for basic things (I'm in submodule directory in both hooks), so I guess this is a bug in git.
Any questions? Thanks in advance!
Stefan