Permissions
有沒有辦法防止 git 在拉取時更改權限和所有權?
每次我執行
git pull
orgit reset
時,git
都會重置對我所做的權限和所有權的更改。你自己看:#!/usr/bin/env bash rm -rf 1 2 mkdir 1 cd 1 git init echo 1 > 1 && git add 1 && git ci -m 1 git clone . ../2 cd $_ chmod 0640 1 chgrp http 1 cd ../1 echo 12 > 1 && git ci -am 2 cd ../2 stat 1 git pull stat 1
輸出:
$ ./1.sh 2>/dev/null | grep -F 'Access: (' Access: (0640/-rw-r-----) Uid: ( 1000/ yuri) Gid: ( 33/ http) Access: (0664/-rw-rw-r--) Uid: ( 1000/ yuri) Gid: ( 1000/ yuri)
有沒有辦法解決它?
我想讓一些文件/目錄可供 Web 伺服器寫入。
這聽起來像您正在執行的使用者將預設組設置為
yuri
. 您可以這樣確認:$ id -a uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)
您帳戶的 UID 是這樣的:
uid=1000(saml)
而預設組是git=1000(saml)
,此後任何輔助組都是。**注意:**如果您希望 git clone 擁有特定的所有權,那麼您至少有 2 個選項。
選項1
根據需要設置具有權限的父目錄,如下所示:
$ mkdir topdir $ chgrp http topdir $ chmod g+s topdir $ cd topdir $ git clone ....
這迫使目錄
topdir
強制其下的任何子目錄http
應用該組。這將在很大程度上起作用,但可能會導致問題,因為如果您將文件移動到此 git clone 工作區,這些文件將不會通過上述更改強制執行其組。選項#2
在開始工作之前,將您的預設組更改為
http
:$ newgrp http $ git clone ...
此方法將強制創建的任何新文件將其組設置為,
http
而不是您的正常預設組yuri
,但這只有在您記得newgrp
在此工作區中工作之前進行操作時才有效。其他選項
如果這些看起來都不可接受,您可以嘗試在 git 工作區目錄上使用 ACL。這些在此站點上的多個問答中進行了討論,例如在此問答中,標題為:獲取新文件以繼承 Linux 上的組權限。