Git无法解释地更改单个文件的权限
我是唯一参与这个git项目的人。每次我在本地Ubuntu存储库编辑文件,然后推到Bitbucket并拉到我的生产存储库,git都会将编辑的文件更改为-rwxr-x 775。Apache不喜欢这样 本地系统:Ubuntu Linux上的git版本1.8.1.2 生产系统:CentOS/Red Hat Linux上的git版本1.7.12 当我将权限修改为755时,请执行以下操作Git无法解释地更改单个文件的权限,git,file-permissions,chmod,Git,File Permissions,Chmod,我是唯一参与这个git项目的人。每次我在本地Ubuntu存储库编辑文件,然后推到Bitbucket并拉到我的生产存储库,git都会将编辑的文件更改为-rwxr-x 775。Apache不喜欢这样 本地系统:Ubuntu Linux上的git版本1.8.1.2 生产系统:CentOS/Red Hat Linux上的git版本1.7.12 当我将权限修改为755时,请执行以下操作 git diff 或 什么也看不出来 在我的本地存储库中,权限为755,文件全部归haws所有。 在我的生产存储库中,
git diff
或
什么也看不出来
在我的本地存储库中,权限为755,文件全部归haws所有。
在我的生产存储库中,所有其他权限保持在755,包括contact.php在内的所有文件都由我的用户名拥有
在本地存储库和生产存储库中,我对core.filemode进行了如下更改,以尝试停止此行为
core.filemode = false
我在合作项目中遇到过这样的神秘事件,所以我真的很想了解发生了什么
因此,在签出时,将使用默认权限创建文件,这取决于您的 在您的情况下:
umask 0022
应在牵引时设置。(这就是我在你看到的答案中提到的“”) 这假设您在目标回购协议中有如下配置:
git config core.sharedRepository true
在“”中提到了另一种解决方案,在该解决方案中,您将确保按如下方式初始化回购:
git init --shared=0022
OP在评论中添加了以下内容:
你知道为什么我客户的生产服务器上的git即使在存储库的配置中没有
sharedRepository
条目,也可以在没有文件权限更改的情况下进行拉取吗
可能是因为umask默认设置为0022
,这意味着默认情况下,git shell继承系统的umask
。更改
umask
需要将core.sharedRepository
设置为true
以将其考虑在内,而不是考虑父进程的umask
。或者因为回购协议是使用
--shared=0022
创建的
要查看如何设置umask
(系统范围或用户范围),请参阅“”
要在git命令(将继承其值)之前检查umask
,只需键入:
umask
请参阅2009年10月16日的评论,这可能与将文件添加到工作树的方式有关(git add.vs git commit-a),将core.filemode改为false可能不是一个好的解决方法。也许这也是一个不错的标准工作流程实践。不过,我还是想知道为什么git没有“像广告宣传的那样工作”。我忽略了什么?我建议提及您的操作系统和git版本,以获得更好、更清晰的答案。关于windows和非windows系统,这里存在差异。谢谢。按照你的建议做。有关更多信息,请参见问题。1。我把umask设置为0022。我怎么知道git在拉动时没有改变呢。我添加了git config core.sharedepository true。这解决了我的问题。我会读到这篇文章。谢谢我接受你的回答,希望你能和我在这件事上多坚持一会儿,帮助我理解正在发生的事情。我仍然感到困惑的原因是我不明白sharedRepository在这种情况下是如何应用的。是因为“haws”在我的本地服务器上拥有这些文件,而“jconstru”在生产服务器上拥有它们吗?我还是不明白。为什么这在我的客户的项目中不是一个问题,那里有三个开发人员都有本地Ubuntu存储库推拉,我的umask有0022,生产服务器上的git config只说[core]repositoryformatversion=0 filemode=true bare=false logallrefupdates=true@TomHaws其思想是,如果
core.sharedepository
设置为true,那么在拉取时git将尊重umask
。git不会更改umask(但如果core.sharedRepository
设置为false
或根本没有设置,它可以忽略它)。您知道为什么我客户端的生产服务器上的git能够在没有文件权限更改的情况下进行拉取,即使存储库的配置中没有sharedRepository条目?
git config core.sharedRepository true
git init --shared=0022
umask