push檔案權限 - windows git filemode




如何找出什麼原因導致文件權限更改時使用git檢出文件? (2)

在將文件推送到我們的服務器之後,將執行以下post-receive hook:

#!/bin/sh
export GIT_WORK_TREE=/home/user/www/
git checkout -f

然而,文件得到非常奇怪的600權限,並在結帳時700文件夾。 這不是我所期望的(在我們的其他服務器上,我們得到了644755 )。 從這個線程我明白,git不設置權限,所以git不是怪。 我的問題是:什麼是? 我怎樣才能找出這個問題的原因是什麼?

我已經通過在結帳時運行額外的腳本來解決這個問題,但是我有興趣解決根本原因。

我使用gitolite來管理軟件倉庫,但我懷疑這是事業的原因。 但是,再次,我很高興知道我可以開始,因為在這一點上,我不知道如何調查。

根據最初的答案,我已經看到了服務器上的umask設置。 git用戶(這是用戶上傳文件的用戶),umask設置是0002.這在以下練習中得到了確認:

[email protected]:~$ umask
0002
[email protected]:~$ touch newfile
[email protected]:~$ ls -la newfile
-rw-rw-r-- 1 git git 0 Aug  5 10:46 newfile

額外細節:

  • Linux在服務器端和開發端都使用
  • 在本地回購中,權限是755和644
  • 文件模式在.git / config中設置為true

然而,文件得到非常奇怪的600的權限,並在結帳時700文件夾。

看起來你的shell有一個限制性的umask設置,可能是umask 0177

從這個線程我明白,git不設置權限,所以git不是怪。

不,這是你的shell的umask設置。

我的問題是:[如何]我可以弄清楚這個問題的原因是什麼?

運行umask ,它會告訴你什麼是你目前的設置。 這就像是0177或類似的。 如果你想知道為什麼 ,你需要查看/bin/sh使用的rc文件,最有可能的是.profile.bashrc ,以及其他來源的文件。

你可以有非常嚴格的umask設置,但在你的腳本中覆蓋它們,通過添加一個umask行作為@VonC建議。


如“ Git更新默認的umask更新文件時 ”,你可以添加umask到你的鉤子?

#!/bin/sh
umask 002
export GIT_WORK_TREE=/home/user/www/
git checkout -f

這應該設置文件權限為664和目錄權限為775。

關於gitolite具體, 檢查gitolite.rc文件的umask部分

$UMASK ,八進制,默認0077

gitolite使用默認的UMASK給所有的倉庫及其內容賦予rwx------權限。
想要運行gitweb(或cgit,redmine等)的人意識到這是行不通的。

處理這個問題的正確方法是給這個變量賦值0027 (注意語法:需要前導0),然後讓用戶運行webserver(apache,www-data,其他)成為' git “組。

如果你已經安裝了gitolite,那麼現有的文件將不得不手動解決(對於umask0027 ,這將是chmod -R g+rX )。 這是因為umask只影響新創建的文件的權限,而不是現有的文件。





gitolite