Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent Git from changing permissions on pull

Tags:

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 ?

like image 929
Simon Boudrias Avatar asked Oct 04 '12 18:10

Simon Boudrias


People also ask

How do I set git permission to ignore changes?

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.

Does git preserve permissions?

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.

Does git change file permissions?

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.

How do I add permissions to git?

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.

How to prevent permissions from changing when updating a git repository?

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.

How do I stop Git from tracking changes in file permissions?

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.

Why ‘git pull’ is not working on my server/remote machine?

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 :

Why is my writable group permission not working in Git?

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.


1 Answers

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 unless umask is e.g. 0022).

like image 150
VonC Avatar answered Sep 28 '22 03:09

VonC