Git: Игнорирование каталогов, только если у них нет отслеживаемых файлов - PullRequest
2 голосов
/ 08 октября 2011

У меня есть репозиторий git, и я хочу, чтобы git status игнорировал все каталоги (и все ниже), если я еще не добавил файлы в каталог.Добавление /* к .gitignore почти делает свое дело.Я могу создавать новые каталоги, помещать в них файлы, и git status будет полностью забыт.

Итак, я создаю новый каталог и помещаю туда файл "directory / file".Затем я git add directory, git commit и создаю новый файл внутри этого каталога, скажем, "directory / newfile".Проблема в том, что git status не покажет мне новый файл.

Я попытался добавить !/*/* к .gitignore, но, насколько я могу судить, ничего не получилось.Как я могу заставить git status показывать новые файлы в каталогах с отслеживаемым (добавленным) файлом, игнорируя при этом каталоги без отслеживаемых файлов?

Ответы [ 3 ]

2 голосов
/ 09 октября 2011

Другие ответы говорят о том, что git не отслеживает каталоги, что правильно, но не отвечает на вопрос.

Прежде всего, /* не только игнорирует каталоги и их содержимое, но и файлы вкорень вашего репо.Это игнорирует все.Я не уверен, что это то, что вы хотите.Попробуйте изменить его /*/, если нет.

Во-вторых, git add directory не будет работать с шаблоном игнорирования.git add не удалось бы сказать, что путь игнорируется, и вы должны использовать -f.И да, каталог (и его содержимое) можно добавить только с git add -f directory.

Теперь, когда вы добавили и зафиксировали каталог, когда вы помещаете в него новый файл, git status не будетпоказать вам, потому что, конечно, это игнорируется.Git не будет заходить в каталог для поиска неотслеживаемых файлов.Но, конечно, изменения уже отслеженных файлов придут в состояние git.Кроме того, git add directory/newfile не будет работать с тем же сообщением об использовании -f.

Так что каждый раз, когда вы добавляете каталог, вы также должны явно игнорировать этот конкретный каталог.Так что вам нужно будет добавить что-то вроде !/directory в ваш .gitignore.

0 голосов
/ 08 октября 2011

Git не может отслеживать каталоги. Он не будет хранить пустые каталоги, поэтому вы часто находите файлы с именем «.keep» в проектах, которые хотят иметь «пустые» -фолдеры.

0 голосов
/ 08 октября 2011

Git не хранит сами каталоги. Путь к файлу является атрибутом данных узла, если нет файла, нет узла. git add directory не должно иметь никакого эффекта в любом случае, если 'directory' пусто. git status покажет вновь созданный файл как неотслеживаемый, если только вы не проигнорируете его. Попробуйте git add directory/newfilename, я не уверен, явно ли добавляет блоки .gitignore, но я не думаю, что это так. Если это произойдет, вам придется изменить .gitignore, чтобы разрешить этот каталог (есть много информации о синтаксисе онлайн).

...