2011-05-26 27 views
19

我有一個git存儲庫和Windows的問題。問題是git倉庫中有一個linux符號鏈接,並且運行windows的開發者顯然不能工作。現在,因爲這個符號鏈接永遠不會改變,所以我想找到一種方法來刪除開發人員,並在其位置添加一個文件夾(這是符號指向的),但讓git忽略這些特定的更改。現在我可以刪除符號鏈接,創建一個相同名稱的文件夾,並添加忽略所有內容的.gitignore。現在,只要確保git忽略刪除符號鏈接,我在研究時發現了兩種可能的解決方案。我找到的解決方案是:git假設不變vs跳過工作樹 - 忽略符號鏈接

git update-index --assume-unchanged [FILE] 
git update-index --skip-worktree [FILE] 

我的問題是哪個選項會工作最好?我想確保一旦我做到這一點,除非我專門做到這一點,否則它永遠不會被撤消。我想確保恢復,重置,創建分支,合併等......一切正常。

+1

[Git - 'assume-unchanged'和'skip-worktree'之間的區別]的可能重複(http://stackoverflow.com/questions/13630849/git-difference-between-assume-unchanged-and-skip- worktree) – Flimm 2013-10-03 16:21:36

回答

21

這兩個選項都有問題。 --assume-unchanged只要索引被丟棄(例如git reset)就會自動重置,這樣可能遲早會讓你重新啓動。...也是如此,但是,您可以維護一個本地文件列表以不檢出,以便在必要時自動再次設置skip-worktree位。以下是步驟:

  • core.sparseCheckout設置爲存儲庫的true。
  • 創建一個包含兩種模式的文件.git/info/sparse-checkout*包含所有內容,!/foo排除符號鏈接foo(/表示錨定頂層)。
  • 現在,手動設置skip-worktree位,然後刪除符號鏈接。

現在你可以走,而不必擔心git會自動提交的目錄,但請注意,你仍然會遇到的問題,如果有人明確地對目錄運行或它的任何文件git add

[編輯補充:]經過進一步討論,我們確定了最後一個問題的解決方案:在目錄中放置一個帶有*模式的.gitignore文件。

+0

我錯誤地按了SKIP WORK TREE,現在我無法切換本地分支。我能做些什麼來恢復我錯誤地採取的行動?有什麼選擇嗎? – Dev 2013-03-19 15:34:40

+2

@Dev:'git update-index --no-skip-worktree ' – nickgrim 2013-04-12 14:15:18