如何在Git中处理多个Linux用户文件

时间:2012-02-07 19:54:03

标签: linux git file-permissions

我有一个Git项目,它有点特殊,因为树中的文件是由两个不同的用户生成的。例如:

# ls -la

drwxr-xr-x 13 ivan ivan  4096 2012-02-02 16:52 .
drwxrwxrwx 32 root root  4096 2012-01-28 21:37 ..
drwxr-xr-x  2 ivan ivan  4096 2012-02-07 20:41 system
drwxr-xr-x  2 ivan ivan  4096 2012-02-07 20:41 compatibility
drwxr-xr-x 33 ivan ivan  4096 2011-12-08 18:13 resources
drwxr-xr-x  8 ivan ivan  4096 2012-02-07 20:41 .git
-rw-r--r--  1 ivan ivan   307 2012-02-02 16:52 .gitignore
-rw-r--r--  1 bulk bulk   700 2011-11-01 20:10 base.log
.....

Git仅由一个用户(ivan)控制,但守护进程会生成分配给 bulk 用户的文件。守护进程添加新文件时一切都很顺利,但是当守护进程更改了文件时,git停止了工作说:

error: unable to unlink old 'base.log' (Permission denied)

我知道最好的选择是让守护程序以 ivan 用户身份运行,但这在技术上很困难。问题是:有没有办法在Git中处理这种情况?我的意思是,我只想做“git checkout branch”,而不会遇到用户权限问题。

2 个答案:

答案 0 :(得分:2)

将git用户(ivan)添加到“批量”群组。

的Debian:

sudo adduser ivan bulk   # and relogin

其他人(FC,Redhat和类似?):

usermod -a -G bulk ivan

一切都应该没问题。要具有写访问权限(即,您可以签出,合并等工作树),更改权限以允许goup写访问:

sudo chmod g+rw bulk.log

备选方案:

答案 1 :(得分:1)

这不是一个Git问题,而是为了给你答案......

您在存储库中创建文件,然后以不具有完全权限的用户身份运行工具。您必须解决一个问题或另一个问题:将Git作为bulk运行,或创建ivan可以读取和写入的文件。请注意,这并不一定意味着ivan拥有 - 他们可以拥有664权限,并拥有适当的群组。

另一种解决方案当然是不跟踪您没有权限的文件。您怀疑是否正在跟踪日志文件 - 这不是正常的用例,因为在运行时生成的内容会因您所处的位置而有所不同,因此对于应该检查的内容没有可靠的概念 - 但我会相信您确实需要这样做。

因此,假设您确实需要跟踪这些文件,那么根据您当前的设置,无法使其工作正常。您无法写入您无权写入的文件。