我有一个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”,而不会遇到用户权限问题。
答案 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
bup
答案 1 :(得分:1)
这不是一个Git问题,而是为了给你答案......
您在存储库中创建文件,然后以不具有完全权限的用户身份运行工具。您必须解决一个问题或另一个问题:将Git作为bulk
运行,或创建ivan
可以读取和写入的文件。请注意,这并不一定意味着ivan
拥有 - 他们可以拥有664
权限,并拥有适当的群组。
另一种解决方案当然是不跟踪您没有权限的文件。您怀疑是否正在跟踪日志文件 - 这不是正常的用例,因为在运行时生成的内容会因您所处的位置而有所不同,因此对于应该检查的内容没有可靠的概念 - 但我会相信您确实需要这样做。
因此,假设您确实需要跟踪这些文件,那么根据您当前的设置,无法使其工作正常。您无法写入您无权写入的文件。