2012-05-09 56 views
103

只需將some.sh文件轉換爲可執行文件(chmod 755 ...),即可更新權限,但不會更新內容。有沒有一種方法來提交文件到Git的,所以可執行位將被還原/上克隆/結賬/設置?僅在git中更新文件權限

更新:我如何跟蹤新的權限被提交到github

回答

105

默認情況下,如果您更改它們,git將更新文件權限。

如果在修改權限時看不到任何更改,則可能在git中有一個忽略文件模式的配置。

看看你的項目,在.git文件夾爲config文件,你會看到這樣的事情:

[core] 
    filemode = false 

您可以將其更改爲true在你喜歡的文本編輯器中,或運行:

git config core.filemode true 

然後,你應該能夠正常提交你的文件。它只會提交權限更改。

+0

謝謝!我如何跟蹤權限更改提交給'github'? – BreakPhreak

+2

你可以在查看文件時看到它(例如,在[Rails gitignore file](https://github.com/rails/rails/blob/master/.gitignore)上,你會發現100644作爲文件權限) –

+6

使用git在Windows上更改權限(實際上更改文件權限和提交):http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html – fooMonster

17

不適合我。

模式是真的,文件權限已被修改,但git說沒有工作要做。

git init 
git add dir/file 
chmod 440 dir/file 
git commit -a 

問題似乎是git只能識別某些權限更改。

+35

正確 - 'git'確實只跟蹤文件是否可執行,而不是全套* nix權限。所以你必須在可執行文件之間切換文件/不是因爲它認爲你已經改變了值得提交的文件... – twalberg

+0

我找不到明確的文檔:我可以使用什麼後動作觸發器來設置相應的文件? – Otheus

+1

好吧,'git'中有一個'post-checkout'掛鉤,它可以覆蓋一些情況,但我不確定這是否會覆蓋更新工作樹中所有文件的可能性。你可能會更好,只需在你的倉庫中有一個額外的shell腳本來設置相應的東西。另外,還有一些項目擴展了'git'來存儲元數據,但我從來沒有真正嘗試過其中任何一個...... – twalberg

92

@fooMonster文章爲我工作

# git ls-tree HEAD 
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe script.sh 

正如你可以看到該文件具有644權限(忽略100)。我們想將它更改爲755:

# git update-index --chmod=+x script.sh 

提交更改

# git commit -m "Changing file permissions" 
[master 77b171e] Changing file permissions 
0 files changed, 0 insertions(+), 0 deletions(-) 
mode change 100644 => 100755 script.sh 
+11

這隻適用於「可執行」標誌 –