2016-05-05 15 views
1

我最近將我的編程的東西從本地存儲移動到網絡存儲。從那時起,Git不再正常工作。Git不會重置文件權限CIFS掛載

典型場景:
我更改文件。現在我想保存更改。我做git stash。 Git回滾更改。但是,這些文件仍在git status中標記爲已更改。 git diff -p顯示

diff --git a/file.txt b/file.txt 
old mode 100644 
new mode 100755 

我試圖做

  • git checkout -- file.txt
  • git reset --hard

但沒有任何工程重置文件。重新獲得工作副本的唯一方法是chmod 644 file.txt


這些文件位於Synology NAS上。我正在用CIF安裝到我的Linux機器上。 我玩安裝選項noperm,file_mode,dir_mode但無法讓它的工作。

我讀了約git config core.filemode false但我不確定這是否是正確的做法。我害怕損壞我的存儲庫。 Git是否將權限信息保存在存儲庫/索引中?我能以某種方式檢查嗎?也許我已經對我的最近提交做了一些錯誤的處理。

回答

0

您不能在跨操作系統邊界並可能在Samba/CIFS期間使用Git,因爲它強制新文件和修改文件上的文件掩碼。請參閱Atlassian網站上的this 2013 discussion。幾年前,我曾希望在我的本地開發服務器(本地系統上的Ubuntu VM實例)上的Git repo上通過Samba映射使用Windows SourceTree,但事實並非如此。我仍然使用虛擬機作爲開發服務器,因爲我發現在Windows環境下運行的環境並不適合在其中運行,更不用說生產環境始終是Linux。當然,開發工具在Windows上更好,所以這對我來說是「兩全其美」的解決方案(儘管Mac上的開發工具很好,OSX在Linux生產環境下也不會是1:1) 。因此,我使用Samba映射和a good SSH client來執行其他所有操作,但Git編寫操作和可視Git差異(即協調重新綁定/合併衝突),由於某些原因無法從Windows執行。當需要進行差異化時,我切換到Linux GUI窗口,並在那裏執行the Linux GUI diff tool of choice,然後正確處理Linux權限。否則,我使用SSH客戶端在命令行上運行Git。例如,您不能擁有IDE或Windows Git客戶端(如SourceTree)通過Samba/CIFS提交回執;它將無法正常工作。對於一個可視Git客戶端來說,新的GitKraken是一個很好的選擇(它在Linux GUI中運行)。

一些箱子您可以通過運行的Git命令而忽略了文件的權限(即git -c core.fileMode=false)繞過文件權限的問題,但我發現,是混亂而導致的麻煩,所以我只是有時使用它的非寫操作,如git status,並已爲此目的定義一個Git別名:

nfm = "!f(){ git -c core.fileMode=false [email protected]; };f" 

然後你就可以用內核上運行一個Git命令。中將fileMode暫時停用,就像這樣:

git nfm status 

新增2016-05-07T01:39:44Z:

也看到我的相關職位在Superuser