Subject: Re: git gc changes ownerships of files linux

From: Junio C Hamano <[email-masked]>
Date: Sun, 11 Feb 2024 08:43:33 -0800

Torsten Bögershausen <[email-masked]> writes:

> Briam, Hm, I wonder what this function (in path.c) does:
>
> int adjust_shared_perm(const char *path)
>
> According to my understanding, it was included into the Git codebase
> to work around the missing "setgid" feature in Linux (and probably cygwin).

No.  "g+s on directory" is required and depended upon for getting
the correct group ownership.  We do not do anything to chown(2) a
filesystem entry to force what group it is owned by there.

What adjust_shared_perm() does is to counter what the screwed-up
umask settings the user may have causes.  If you are a member of a
group and working in a directory owned by the group with other
members, you want to make sure others in the group can access the
files and the directories in the project.  Their umask should be
loosened to at least 027 and preferrably to 007 to give group
members the same access as you do.  Yet people do not loosen their
umask when starting work in such a group owned directory that is
supposed to be shared, as it would be extremely cumbersome to do
[*].  These users end up creating files with overly tight permission
bits, e.g. 0644 or 0700, and we go in with adjust_shared_perm() to
fix these modes.

You definitely must set up your initial directory with g+s if you
are usihng the group-writable shared directory model (which I would
actually be surprised to see in 2020---is a shared machine with more
than one user-account still a thing???); adjust_shared_perm() will
not help you there.

[Footnote]

* Unless, of course, you use some sort of "hook" in the shell to
  notice you switched to a certain directory and run command
  there---some people achieve this by aliasing their "cd", "pushd",
  and "popd".