Git是改变我的文件的权限,当我推到服务器Git是改变我的文件的权限,当我推到服务器(Git is

2019-06-14 07:34发布

我使用Git来管理服务器上的网站。

我有如下所示的本地存储库

local@workstation:myapp$ ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}'
total 16
755 drwxr-xr-x@ 18 thomas  staff   612 Jun 13 15:35 application
755 drwxr-xr-x@ 11 thomas  staff   374 Jun 12 16:25 assets
644 -rw-r--r--@  1 thomas  staff  6399 Jun 22 11:45 index.php
755 drwxr-xr-x@ 10 thomas  staff   340 May 14 15:22 system

我有一个使用服务器上的纯仓库post-receive Apache中的前点回购。 Apache的public文件夹的内容如下-不是纯仓库。

root@server:/srv/public/myapp# ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}'
total 20
700 drwx------ 15 root root 4096 Jun 27 11:31 application
700 drwx------ 10 root root 4096 Jun 27 11:31 assets
600 -rw-------  1 root root 6399 Jun 27 11:31 index.php
700 drwx------  8 root root 4096 Jun 27 11:31 system

这是造成混乱到我的web服务器上的代码。

我怎样才能解决这个问题? 我使用gitolite如果有什么差别。

git的服务器配置文件

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true

Answer 1:

这个线程后提供了一个很好的解释:

这是由设计。 虽然git的数据结构可以UNIX模式位技术上存储在它的树,发现早在Git的历史,尊重任何超出简单的可执行位结束了对Git的正常使用情况下(即人们存储代码或其他共享更麻烦在资源库中的文件)。

我们可以添加在配置选项以尊重的文件模式,但它通常被看作是不值得的。 它解决了只有普通元数据的问题的一部分,因为它省略了所有者和组名称或ID,以及像的ACL扩展元数据。

如果模式是对你很重要,建议的修补程序是之一:

  1. 使用像“metastore”,可以从Git的挂钩被称为工具,将在在库跟踪的文件保存和恢复文件权限。 请注意,使用这样的工具时,有保护文件竞态条件(即git会创建文件为644,然后将metastore它修正为600;在此期间,有人可以阅读您的文件)。

  2. 根据你存储什么,它可能是有意义的,让您的资料库在另一个目录中,通过权限保护的,然后使用一个单独的工具来从库文件部署到它们的最终位置(例如,一个Makefile文件或其他安装工具)。



文章来源: Git is changing my file's permissions when I push to server