Beware of option when multiple developers are applying patches:
With Git 2.30 (Q1 2021), "git apply
" adjusted the permission bits of working-tree files and directories according core.sharedRepository
setting by mistake and
for a long time, which has been corrected.
apply
: don't use core.sharedRepository to create working tree files
core.sharedRepository
defines which permissions Git should set when creating files in $GIT_DIR, so that the repository may be shared with other users.
But (in its current form) the setting shouldn't affect how files are created in the working tree.
This is not respected by apply
and am
(which uses apply
), when creating leading directories:
$ cat d.patch
diff --git a/d/f b/d/f
new file mode 100644
index 0000000..e69de29
Apply without the setting:
$ umask 0077
$ git apply d.patch
$ ls -ld d
drwx------
Apply with the setting:
$ umask 0077
$ git -c core.sharedRepository=0770 apply d.patch
$ ls -ld d
drwxrws---
Only the leading directories are affected.
That's because they are created with safe_create_leading_directories()
, which calls adjust_shared_perm()
to set the directories' permissions based on
core.sharedRepository
.
To fix that, let's introduce a variant of this function that ignores the setting, and use it in apply
.
Also add a regression test and a note in the function documentation about the use
of each variant according to the destination (working tree or git dir).