假设我有这个已经被git跟踪的工作树。
.
├── parent
│ ├── child1
│ | └── file1.txt
│ ├── child2
│ | ├── file2.txt
│ | └── grandchild
│ | └── file3.txt
│ ├── somefile.txt
│ └── anotherfile.txt
|
我想标记parent
内的每个跟踪文件,以便git不再跟踪对其所做的任何更改,而这些变化最终将包括somefile.txt
,anotherfile.txt
, file1.txt
,file2.txt
,file3.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
中包含的每个文件的情况下做到这一点?
答案 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
没有“递归”选项)