当我从我的代码库拉取更改时,Git会更改文件权限(实际上,它会更改组的写入
权限)。
如果我没错的话,Git只应跟踪可执行位,并且可以使用设置core.filemode
为false来删除此设置。
但是,即使文件模式已设置为假(在本地、全局和用户中),当我拉取时,写入
权限仍然会不断变化。
我可以使用git-hooks来重置正确的chmod,但这会增加一些额外的工作量,我更喜欢有一种方法仅仅请求git完全忽略文件模式的更改。
有人知道如何实现吗?
当我从我的代码库拉取更改时,Git会更改文件权限(实际上,它会更改组的写入
权限)。
如果我没错的话,Git只应跟踪可执行位,并且可以使用设置core.filemode
为false来删除此设置。
但是,即使文件模式已设置为假(在本地、全局和用户中),当我拉取时,写入
权限仍然会不断变化。
我可以使用git-hooks来重置正确的chmod,但这会增加一些额外的工作量,我更喜欢有一种方法仅仅请求git完全忽略文件模式的更改。
有人知道如何实现吗?
有一个配置设置可能有所帮助,它是core.sharedRepository
,在博客文章“Preserving Group Write on Git Objects in a Collaborative Repository”中提出:
解决方案相当简单。
在文件.git/config
中,我添加了一行内容:"sharedRepository = group
",像这样:
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true sharedRepository = group
之后,
.git/objects
中的新文件将以适当的组写权限创建。
(但是需要注意的是,新文件的所有权归接收推送的用户账户的主要组。如果在该组中协作的用户具有不同的主要组,并且这些用户在那些组中没有共享成员身份,则仍可能会遇到问题。)确保你的
umask
值正确:例如:
0660
可以使得仓库对于拥有者和组可读写,但对于其他人无法访问(相当于组,除非umask
值为例如0022
)。
2022年(10年后),SyedAsadRazaDevops 在评论中补充道:
在Ubuntu(Linux)中,只需进入项目仓库并运行此命令:
nano .git/config
并在[core]
部分添加sharedRepository = group
。这与以下命令相同:
cd /path/to/repo git config core.sharedRepository group
umask
的讨论(或者 http://serverfault.com/questions/26954/how-do-i-share-a-git-repository-with-multiple-users-on-a-machine)。 - VonCumask
的评论是正确的。将umask
设置为002
允许默认的组写入权限。 - Simon Boudriasnano .git/config
,然后在**[core]**部分中添加sharedRepository = group
,谢谢@VonC @syedasadrazadevops。 - SyedAsadRazaDevopssudo -u user command
sudo -u www-data git pull
www-data
是Ubuntu上默认的Apache用户。
这样可以保持权限不变。我在更新VPS上的git仓库时使用它,同时保持文件权限设置为Web服务器用户。