2012-06-21 74 views
83

前段時間我這樣做是爲了忽略的變化由git的跟蹤文件:撤消git的更新索引--skip-worktree

git update-index --skip-worktree <file> 

現在,其實我是想更改提交到該文件源。我如何取消skip-worktree的影響?

感謝, 凱文

+7

我也感興趣如何獲得'skip-worktree'狀態下的文件列表? – troex

+0

@troex https://stackoverflow.com/q/42363881/1615903 – 1615903

回答

107

啊哈!我只是想:

git update-index --no-skip-worktree <file> 
+0

我愛阿哈! –

+0

lol應該知道 –

29

http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html,使用

git ls-files -v

看到 「假設不變」 和 「跳過worktree」 標有特殊字母的文件。 「skip-worktree」文件標有S

編輯:作爲@amacleod提到的,使一個別名,列出所有隱藏文件是一個很好的伎倆有,這樣你就不需要記住它。我在我的.bash_profile中使用了alias hidden="git ls-files -v | grep '^S'"。它很棒!

+8

整潔。我可以使用'git ls-files -v | grep'^ S''只列出我用skip-worktree「隱藏」的文件。 希望爲該命令設置一個「隱藏」的別名,但在別名中放置管道重定向似乎不起作用。 – amacleod

+4

@amacleod使用'!'。像這樣'[別名]忽略=!git ls-files -v | grep「^ S」'測試過,工作。 –

+0

@amacleod不要以爲你可以建議一個Windows的替代命令? –

11

如果要撤消已應用跳躍worktree的所有文件,可以使用下面的命令:

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree 
  1. git ls-files -v將打印自己的地位的所有文件
  2. grep -i ^S將過濾的文件,並選擇僅跳過工作樹(S)或跳過工作樹並假定不變(-s)表示忽略區分大小寫
  3. cut -c 3-將刪除狀態並僅保留路徑,從第3個字符切到末尾
  4. tr '\012' '\000'將取代行結束字符(\ 012)零字符(\ 000)
  5. xargs -0 git update-index --no-skip-worktree將通過零字符分隔,從而git update-index --no-skip-worktree所有路徑基於@ GuidC0DE答案撤消
+0

這是最佳答案 – Dev

0

,這裏的一個版本的Powershell的(我用posh-git

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)}) 

以供參考也是相反的命令隱藏文件:

git update-index --skip-worktree $(git ls-files --modified)