在许多帐户中不使用Sudo而使用Git

在许多帐户中不使用Sudo而使用Git,git,ubuntu,sudo,Git,Ubuntu,Sudo,如果没有Sudo,如何在一个Ubuntu的多个帐户中使用Git? 我的Ubuntu有很多帐户。 如果没有sudo,我就无法访问Git 我将所有者更改为我、masi,将组更改为masi所属的admin。 我对Git有以下权限 800 -rwxrwxrwx 1 masi admin 813744 2009-02-20 23:01 /usr/bin/git 我在尝试使用Git时得到了以下消息 git status fatal: unable to create '.git/index.lock':

如果没有Sudo,如何在一个Ubuntu的多个帐户中使用Git?

我的Ubuntu有很多帐户。
如果没有sudo,我就无法访问Git

我将所有者更改为我、masi,将组更改为masi所属的
admin
。 我对Git有以下权限

800 -rwxrwxrwx 1 masi admin 813744 2009-02-20 23:01 /usr/bin/git
我在尝试使用Git时得到了以下消息

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

我运行
find-iregex“*index.l.*
,它不返回匹配项,因此在锁定系统时似乎没有index.lock。我也对sudo运行了相同的命令,但没有成功。

我猜
.git
目录的所有权是问题所在

您不应该使用来自不同用户的一个源代码树-这可能会导致问题

git
可执行文件不是问题所在。它应该归root所有,并具有755个权限。(
-rwxr-xr-x


换句话说,你可以从多个帐户使用git,但你不应该共享一个工作目录。

git应该是分布式的。因此,每个用户都应该拥有自己的独立存储库。上述方法与此方法相矛盾。除此之外,我怀疑
.git
目录的权限。

如果我正确理解了您的问题,您需要授予多个*nix用户帐户对同一git存储库的写访问权限。使用
--share
命令行参数
git init
应该可以启用此功能。GitWiki具有。这应该可以实现以下功能:

git --bare init --shared=all
如果您已经创建了存储库,则可以通过抛出以下命令将其转换为“共享存储库”:

git repo-config core.sharedRepository true
在您的存储库中,如中所述

2014年更新: 这仍然是可能的,但命令已从repo config更改为config

git config core.sharedRepository true

拥有任何可执行文件集的权限,以便普通用户可以覆盖可执行文件是一个相当大的安全风险。(尝试使用调用
rm-rf$HOME
的shell脚本覆盖
/usr/bin/git

将权限更改回755,并使git再次归root:root所有。(Ubuntu的包管理器将在下次升级时重置权限,除非您使用
dpkg statoverride(8)


我同意那些说多个用户共享一个Git存储库可能不是一个好主意。如果你仍然认为有必要的话,考虑建立一个新的组,<代码> CHGRP保存库的目录和其中的所有文件,并在目录上设置StGID位。(git init的

--shared
参数也可以为您执行部分操作。)然后,将所有具有提交权限的用户添加到组中。

您可以使用

members groupname
然后您可以为username:groupname对设置权限级别

change the ownership
sudo chown -v -R username:groupname sprout
chmod -R g+w .git/*

有没有一种方法可以追溯主动地创建一个git存储库——如果您创建了一个初始的非共享git init,那么它就是共享的?@Steve Folly:我相信我的答案中的第二个代码示例应该可以解决这个问题。不过我自己还没有真正尝试过。@Jørn Schou Rode:doh!对不起,我应该多加注意!”如果没有sudo,我就无法访问Git。"您应该将此视为您的帐户、系统配置或安装有问题的迹象。这是极不正常的行为——git是一个正常的用户空间应用程序,在正常的Ubuntu安装中可供所有普通用户访问。作为参考,/usr/bin/git*的正确权限/所有权为755/ro如hillu的回答所示,您可能意外地设置了权限,以便只有组成员或所有者才能执行“git”(即权限是744 aka-rwxr-r,而不是755)。未能更正这些权限会对您的系统造成严重的安全风险。我相信web上的一些页面建议使用以下命令执行配置:sudo git config--global user.name“your name”,这会在.git所有权中产生问题。在多用户操作系统中,使用git config而不使用sudo会更好。