tags:

views:

633

answers:

4

How can you use Git without Sudo in multiple accounts in one Ubuntu?

My Ubuntu has many accounts. The creation of new accounts has made Git inaccessible by me without sudo.

I changed the owner to be me, masi, and the group to be admin where the masi belongs to. I have the following permissions for Git

800 -rwxrwxrwx 1 masi admin 813744 2009-02-20 23:01 /usr/bin/git

I get the following message in trying to use Git

git status
fatal: unable to create '.git/index.lock': Permission denied

I run find . -iregex ".*index.l.* which returns no matches so there seems to be no index.lock in locking the system. I run the same command also with sudo unsuccessfully.

+3  A: 

I would guess the ownership of the .git directory are the problem.

You shouldn't use one source tree from different users - it's likely to lead to problems.

The git executable is not the issue. It should be owned by root, and have 755 permissions. (-rwxr-xr-x)

In other words you can use git from multiple accounts, but you shouldn't share a single working directory.

Douglas Leeder
+3  A: 

Git is meant to be distributed. So, every user should be having a separate repository of his/her own. The above method contradicts this methodology. Apart from that, I suspect the permissions of the .git directory.

Alan Haggai Alavi
+5  A: 

If I understand your question correctly, you need grant several *nix user accounts write access to the same git repository. Using the --share command line argument for git init should enable this. The GitWiki has a few words to say about this. This should do the trick:

git --bare init --shared=all

If you have already created your repository, you might be able to convert it to a "shared repository" by throwing this command:

git repo-config core.sharedRepository true

in your repository, as mentioned in a blog post at moserei.de.

Jørn Schou-Rode
Is there a way to retro-actively make a git repository --shared if you did an initial non-shared git init?
Steve Folly
@Steve Folly: I belive the second code sample in my answer should solve this. Havn't really tried this myself, though.
Jørn Schou-Rode
@Jørn Schou-Rode: doh! sorry, I should have been paying more attention!
Steve Folly
A: 

Having the permissions of any executable set so that a normal user can overwrite the executable is a considerable security risk. (Try overwriting /usr/bin/git with a shell script that calls rm -rf $HOME.)

Change the permissions back to 755 and make git owned by root:root again. (Ubuntu's package manager would reset the permissions on the next upgrade anyhow unless you used dpkg-statoverride(8))

I agree with those who say that it may not be a good idea to have multiple users share one git repository. If you still think that it is necessary, consider setting up a new group, chgrp the directory holding the repository and all the files therein to that group andset the setgid bit on the directories. (The --shared parameter to git init may do some of this for you, too.) Then, add all the users to the group that should have commit rights.

hillu