我有一个git checkout.所有文件权限都不同于git认为应该是的权限,因此它们都显示为已修改.
在不触及文件内容的情况下(只想修改权限)如何将所有文件权限设置为git认为应该是什么?
它被认为是一种不好的做法 - 将.git/hooks放入项目存储库(例如,使用符号链接).如果是的话,为不同的git用户提供相同的钩子的最佳方法是什么?
刚刚将some.sh
文件转换为可执行文件(chmod 755 ...
),权限已更新,但未更新内容.有没有办法将文件提交到git中,以便在clone/checkout/pull上恢复/设置可执行位?
更新:如何跟踪新权限的提交github
?
我想版本中描述的控制我的Web服务器 为我的Web服务器版本控制,通过创建一个git回购了我的/var/www directory
.我希望我能够将我们的开发服务器中的web内容推送到github,将其拉到我们的生产服务器,然后在池中度过剩下的时间.
显然我的计划中的一个问题是Git不会尊重文件权限(我没有尝试过,现在只读它.)我想这是有道理的,因为不同的盒子可能有不同的用户/组设置.但是,如果我想强制传播权限,知道我的服务器配置相同,我有任何选择吗?或者是否有更简单的方法来接近我正在尝试做的事情?
我正在使用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
Run Code Online (Sandbox Code Playgroud)
我在服务器上有一个裸存储库,用于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 …
Run Code Online (Sandbox Code Playgroud) 将文件推送到我们的服务器后,将执行以下 post-receive 挂钩:
#!/bin/sh
export GIT_WORK_TREE=/home/user/www/
git checkout -f
Run Code Online (Sandbox Code Playgroud)
但是,文件在结帐时获得了非常奇怪的600
权限和文件夹700
。这不是我所期望的(在我们的其他服务器上,我们得到644
和755
)。从这个线程我了解到 git 没有设置权限,所以 git 不应该受到责备。我的问题是:什么是?我怎样才能弄清楚这个问题的原因是什么?
我已经通过在结帐时运行额外的脚本来修复权限来暂时解决它,但我有兴趣解决根本原因。
我正在使用 gitolite 来管理存储库,但我怀疑这是原因。但同样,我很高兴知道我可以从哪里开始,因为此时我不确定如何调查。
根据最初的答案,我查看了服务器上的 umask 设置。该git
用户(这是用来上传文件的用户),umask设置为0002。这在下面的练习证实:
git@server:~$ umask
0002
git@server:~$ touch newfile
git@server:~$ ls -la newfile
-rw-rw-r-- 1 git git 0 Aug 5 10:46 newfile
Run Code Online (Sandbox Code Playgroud)
额外细节: