Git在目录及其子目录中的所有跟踪文件上跳过工作树

时间:2019-04-26 04:41:41

标签: git git-skip-worktree

假设我有这个已经被git跟踪的工作树。

.
├── parent
│   ├── child1
│   |    └── file1.txt
│   ├── child2
│   |    ├── file2.txt
│   |    └── grandchild
│   |         └── file3.txt
│   ├── somefile.txt
│   └── anotherfile.txt
|

我想标记parent内的每个跟踪文件,以便git不再跟踪对其所做的任何更改,而这些变化最终将包括somefile.txtanotherfile.txtfile1.txtfile2.txtfile3.txt

.gitignore仅适用于未跟踪的文件,因此我正在使用--skip-worktree

我尝试过:

1。

git update-index --skip-worktree parent/

给我Ignoring path parent/,但是当我选中git ls-files -v时,它仍然显示我要跳过的文件仍在跟踪中。

2。

git update-index --skip-worktree parent/*

它给了我fatal: Unable to mark file parent/child1,因此它无法标记目录及其包含的任何内容。

如何在不手动添加parent中包含的每个文件的情况下做到这一点?

1 个答案:

答案 0 :(得分:1)

Similarly to assume-unchanged,您需要将此命令应用于文件夹中的所有文件:

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

git update-index没有“递归”选项)