Permissions

git checkout – 文件更改現有文件的權限

  • November 28, 2020

當我編輯一個文件,然後想要撤消我的更改時,我使用

git checkout -- file.txt

問題是git不保留現有文件的文件權限。file.txt有權限644,但在git checkout有權限之後600(我認為來自我的umask

我知道 git 不儲存文件權限,並且我不希望在創建新文件時記住權限。

但是在這種情況下,文件存在。為什麼不能git保持原來的權限?

這可以通過一些醜陋的黑客(一些鉤子)來解決嗎?

當 Git 檢出文件時,它預設使用系統上文件的 umask,如果它是一個目錄或者它被標記為一個執行檔,則設置可執行位。那是因為 Git 刪除並重新創建了文件,所以它不會保留現有文件的權限。

這實際上是設計使然,因為有一個選項,core.sharedRepository可以讓您配置要簽出的文件的權限。預設情況下,它設置為umask,這意味著使用您的 umask。如果您想在儲存庫中使用不同的行為,您可以進行不同的設置,例如 to 0644,它將使用該值。

如果您願意,可以使用post-checkout掛鉤將權限更改回來,儘管這可能並非在所有情況下都有效。

引用自:https://unix.stackexchange.com/questions/621738