When I pull change from my repositories, Git change the file permissions (actually, he change the group write
permission).
If I'm correct, Git should only track executable bit and this anyway can be removed using setting core.filemode
to false.
But, although the filemode is set to false (in local, global and user), when I pull, write
permission constantly change.
I could use a git-hooks in order to reset correct chmod, but this is some overhead and I'd prefer if there's a way to just ask git to completly ignore file mode change.
Anyone know how to achieve this ?
If you set core. filemode=false then git will ignore execute bit changes, no need to change local permissions. Unless you've already added permission changes to the index, in which case you're missing the step where you would need to git add after you turn off core.
When Git checks out files, it by default uses the umask of the file on the system, setting the executable bit if it's a directory or it's marked as an executable file. That's because Git removes and re-creates the file, so it doesn't preserve the permissions of the existing file.
Yes, by default, git is configured to track the changes in file permission mode, too. Just to experiment with the idea, I created a dummy repo and "touched" an empty file. The initial default permission was 775.
Open Project settings>Repositories. To set the permissions for all Git repositories, choose Security. For example, here we choose (1) Project settings, (2) Repositories, and then (3) Security. Otherwise, to set permissions for a specific repository, choose (1) the repository and then choose (2) Security.
The solution I use is to run the command as the user that has the permissions you want to keep: www-data being the apache default user on Ubuntu at least. This keeps the permissions from changing. I use it when updating git repositories on my VPS, while keeping the file permissions set to the webserver user.
1) In case you want your GIT not to track the file permission changes, run the following command : Make sure it’s fileMode (case sensitive). Change your filemode to false if it’s true and save file. 2) In case still the issue persist, then it can be your ‘umask’ at fault.
Many a times users run into the issue of .git changing their file permission on doing ‘git pull’ on server/remote machine. This causes issue with the writable group permission and might even give you Server Internal Error 500. 1) In case you want your GIT not to track the file permission changes, run the following command :
This causes issue with the writable group permission and might even give you Server Internal Error 500. 1) In case you want your GIT not to track the file permission changes, run the following command : Make sure it’s fileMode (case sensitive). Change your filemode to false if it’s true and save file.
One config setting that might help here is core.sharedRepository
, presented in the blog post "Preserving Group Write on Git Objects in a Collaborative Repository":
The solution turned out to be fairly straightforward.
In the file.git/config
, I added a line that read: "sharedRepository = group
", like so:[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true sharedRepository = group
Thereafter, new files in
.git/objects
were created with the proper permissions for group write.
(However, note that new files are group-owned by the primary group of the user account via which the push was received. If the users collaborating on the project have different primary groups, and if those users do not share membership in that set of groups, you may still run into problems.)
Make sure of the value of your umask
:
Example:
0660
will make the repo read/write-able for the owner and group, but inaccessible to others (equivalent to group unlessumask
is e.g.0022
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With