2014-01-06 84 views
44

我使用的代碼庫從Git存儲庫簽出到我的Linux機器上。由於我們的生產代碼是爲了在Linux上部署而編寫的,因此我在Linux計算機上進行了所有測試,但喜歡使用Windows進行日常使用,包括代碼編輯/創作。在編輯文件時保留了samba共享的文件權限

爲此,我已經創建,我籤的代碼,這樣的文件夾(我的主文件夾)的Samba共享

[wgrover] 
    path = /home/wgrover 
    available = yes 
    valid users = wgrover 
    read only = no 
    browsable = yes 
    public = yes 
    writable = yes 

然而,當我編輯從一個文件samba在Windows中共享\\linux-box\wgrover在編輯之前,Linux中的文件權限始終更改爲755,即使它是644

這種不斷出現在我的git diff這樣的:

diff --git a/debian/maggie.nginx.conf b/debian/maggie.nginx.conf 
old mode 100644 
new mode 100755 
index 7cda506..7eab574 

它可以設置在smb.conf文件中create mask但也無法「保留」原始文件的權限。我可以通過在.gitconfig中設置fileMode = false來忽略git中的文件模式更改,但這也會忽略該問題。

當他們從linux修改時,有沒有辦法保留文件權限?

+0

我/etc/login.defs的說'UMASK 022',是相關的? – recognosco

+0

@ElliottFrisch我試着玩umask的價值,但沒有成功。你有沒有參考你看到的任何文檔? – recognosco

+0

@ElliottFrisch我知道umask。我想知道爲什麼你認爲umask將有任何東西可以做samba文件創建,並且如果有任何文檔你指的是。 – recognosco

回答

62

終於可以弄清楚爲什麼權限在改變。從Samba的默認值map archive = yes設置出現混淆。設置map archive = no後,所有者執行位開始表現得像我預期的那樣行爲。

通過閱讀這裏的文檔找到答案:http://www.samba.org/samba/docs/using_samba/ch08.htmlMS-DOS和Unix文件權限和屬性部分。它清楚地提到這種副作用:

因此,存在爲任何三個的Unix可執行位是存在於一個Samba磁盤共享的文件的沒有用。但是,DOS文件有自己的屬性,當它們存儲在Unix環境中時需要保留:歸檔,系統和隱藏位。 Samba可以通過重新使用Unix端文件的可執行權限位來保留這些位 - 如果指示這樣做的話。但是,映射這些位會產生不幸的副作用:如果Windows用戶將文件存儲在Samba共享中,並且您使用命令ls -al在Unix上查看它,則某些可執行位不代表您期望的位數至。

但是,它也提到了這一點:

我們要提醒你的是,map archive選項的默認值是yes,而其他兩個選項有no默認值。這是因爲如果存檔位未正確存儲在DOS和Windows文件中,則許多程序無法正常工作。然而,系統和隱藏屬性對於程序的操作並不重要,並由管理員決定。

您也可以閱讀更多關於歸檔位在這裏:http://en.wikipedia.org/wiki/Archive_bit

+1

哇,很好的工作! –

+2

感謝您的跟蹤。我今天遇到了同樣的問題,這個答案節省了一天的時間! – carej

+2

哈,我到這裏有*確切*相同的問題(git diff顯示我644-755權限更改),感謝這 –

相關問題