Как отследить файл, вложенный в неотслеживаемую папку?

#git #github #github-for-mac

#git #github #github-для-mac

Вопрос:

Наша текущая настройка git работает на основе белого списка, поэтому по умолчанию все игнорируется, и затем мы включаем каталоги по мере необходимости. Это отлично работало для нового репозитория, но теперь начинает вызывать проблемы, когда у нас есть куча отслеживаемых / неотслеживаемых файлов.

Вот пример нашего .gitignore:

 *
!/example.txt
!/example2.txt
  

Сейчас я пытаюсь добавить в git файл, который существует в игнорируемой папке a , путь к файлу: /a/b/c/file.txt . Мой вопрос в том, как я могу не игнорировать этот файл, а игнорировать все остальное в папке / a?

До сих пор я обнаружил, что добавление этого в .gitignore работает:

 !/a/
!/a/b/
!/a/b/c/
!/a/b/c/file.txt
  

Тем не менее, это просто кажется немного запутанным. Изначально я думал, что смогу обойтись без !/a/b/c/file.txt использования .gitignore, но, похоже, по какой-то причине это не работает?

Также для справки, мне нужно запустить git rm --cached -r . и git add . заставить изменения .gitignore вступить в силу.

Любая помощь будет высоко оценена — спасибо!

Ответ №1:

Я думаю, вам нужно добавить !*/ . Это белый список каталогов. Вот пример игнорирования..

 # ignore everything
*
# don't ignore directories
!*/
# whitelist files with extension
*.xyz

# blacklist individual file
a/b/c.xyz
  

Другие варианты — занести в черный список все в каталоге и внести в белый список один файл

 a/b/c/*
!a/b/c/file.txt
  

Комментарии:

1. !*/ Правило будет работать, но оно также снижает скорость взлома, которая увеличивает игнорирование каталога. Это вполне может стоить компромисса: .gitignore я полагаю, решать тому, кто пишет.

Ответ №2:

git add --force может использоваться для добавления игнорируемых файлов:

 git add -f a/b/c/file.txt
  

После добавления файл отслеживается и больше не игнорируется.

Комментарии:

1. Похоже, это может сработать, но нам нравится иметь возможность использовать .gitignore в качестве источника того, что должно / не должно быть в репозитории.