Subject: Re: Expected test suite behavior

From: Amogh Dambal <[email-masked]>
Date: Mon, 25 May 2026 15:01:23 -0700

Thanks for the replies, and the pointers!

 >> Hello. If you run `make test GIT_TEST_OPTS=--verbose` or uncomment
 >> L16 of t/Makefile is there more information describing the issue?

 > You can use --verbose-log instead, and
 > then output is in t/test-results/t1234-whatever.out.

`GIT_TEST_OPTS=--verbose` was very illuminating. I captured 
STDOUT/STDERR: `make test GIT_TEST_OPTS=--verbose &> 
git-test-verbose-fail.tmp`, which shows that almost every test fails 
`check_config` because a `git init` is creating a `.git/config` file 
whose executable bit is set:

--
Initialized empty Git repository in /root/git/t/trash 
directory.t0001-init/plain/.git/
plain/.git/config is executable?
not ok 1 - plain

[...]

However, I'm not able to reproduce this, e.g. directly using the local 
built binary seems to work fine:

mkdir -p /tmp/debug && cd /tmp/debug
/root/git/git init plain
ls -alhrt /tmp/debug/plain/.git
root@ec94ab1b260e:/tmp/debug# ls -alhrt /tmp/debug/plain/.git
total 24K
-rw-r--r-- 1 root root   92 May 25 21:26 config
drwxr-xr-x 3 root root 4.0K May 25 21:26 ..
drwxr-xr-x 4 root root 4.0K May 25 21:26 refs
drwxr-xr-x 4 root root 4.0K May 25 21:26 objects
-rw-r--r-- 1 root root   23 May 25 21:26 HEAD
drwxr-xr-x 4 root root 4.0K May 25 21:26 .

In fact, even the specific test directory that I assume is being checked 
reports properly set bits on the `config` file:

root@f695346357b9:~/git# ls -alhrt t/trash\ directory.t0001-init/plain/.git/
total 12K
drwxr-xr-x  3 root root  96 May 25 21:08 ..
drwxr-xr-x  3 root root  96 May 25 21:08 info
-rwxr-xr-x  1 root root  73 May 25 21:08 description
drwxr-xr-x 16 root root 512 May 25 21:08 hooks
-rw-r--r--  1 root root 111 May 25 21:08 config
drwxr-xr-x  4 root root 128 May 25 21:08 refs
-rw-r--r--  1 root root  23 May 25 21:08 HEAD
drwxr-xr-x  9 root root 288 May 25 21:08 .
drwxr-xr-x  4 root root 128 May 25 21:08 objects

I've further checked that the POSIXPERM requirement is being set and 
verified that there are no shell differences (I'm using /bin/bash as my 
main shell in the Docker container, while the test scripts use /bin/sh 
(which on this Docker container is symlinked to `dash`):

root@ec94ab1b260e:~/git/t# ls -alhrt /bin/sh
lrwxrwxrwx 1 root root 4 Feb  4  2025 /bin/sh -> dash

I'm sure that I'm missing something blindingly obvious with respect to 
my setup, but I have not yet been able to figure out what that might be.