2013-05-02 49 views
32

我試圖運行以下命令:遞歸的git更新指數--assume-不變

git update-index --assume-unchanged myFolderToIgnore 

myFolderToIgnore是一個文件夾。但它沒有說它的「無法標記」它。

所以,我想:

git update-index --assume-unchanged myFolderToIgnore/ 

其中GIT響應與Ignoring path myFolderToIgnore/,但不會做任何事情(它仍然看到我的變化,並試圖簽入)。

最後,我不得不進入手動標記每個單獨的文件保持不變。我在這裏錯過了什麼?

+0

你也許想要做'--asume-unchanged'嗎? – Chronial 2013-05-02 19:52:34

+0

oops,這是一個錯字:)我正在運行的代碼實際上是使用'--assume-unchanged' – uglymunky 2013-05-02 19:55:49

回答

50

update-index是一個內部管道命令,因此不像真正的前端命令那麼舒服。你將不得不自己處理遞歸位:

git ls-files -z myFolderToIgnore/ | xargs -0 git update-index --assume-unchanged 
+2

在GNU系統上,'ls-files -z'和'xargs -0'是一個更強大的解決方案,只是如果名稱中有空白的文件。 – 2013-05-02 21:06:45

+1

好點 - 固定 – Chronial 2013-05-02 22:26:28

1

我就遇到了這個問題,在我的文件夾中有成百上千的文件中,文件夾數千人。

這導致「參數列表太長」。

以下解決方案將爲每個文件夾運行命令並遍歷這些文件夾中的內容。所以只要你的成千上萬的文件在文件夾中分開,那麼這將起作用。

find . -maxdepth 1 -type d \(! -name . \) -exec bash -c "cd '{}' && pwd && git ls-files -z ${pwd} | xargs -0 git update-index --assume-unchanged" \;