Git Skip Worktree для всех отслеживаемых файлов в каталоге и его подкаталогах - PullRequest
1 голос
/ 26 апреля 2019

Допустим, у меня есть это рабочее дерево, которое уже отслеживалось 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?

1 Ответ

1 голос
/ 26 апреля 2019

Аналогично предположению без изменений , вам необходимо применить эту команду ко всем файлам в папке:

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...