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


Я недавно начал использовать Git и меня возникли проблемы только с одной вещью. Как я могу отслеживать каталоги без отслеживания их содержимого?

например, сайт, над которым я работаю, позволяет загружать файлы. Я хочу отслеживать каталог uploads, чтобы он создавался при ветвлении и т. д. но, очевидно, не файлы в нем (тестовые файлы в то время как в ветке разработки или реальные файлы в master).

в моем .пример у меня есть следующие:

uploads/*.*

также пробовал (который игнорирует весь каталог):

uploads/

этот каталог может также содержать подкаталоги (uploads / thumbs/uploads/ videos/) я хотел бы иметь возможность отслеживать эти, но не их файлы.

это возможно с Git? Я искал везде, не находя ответа.

4 57

4 ответа:

Git не отслеживает каталоги, он отслеживает файлы, поэтому для достижения этого вам нужно отслеживать хотя бы один файл. Так что предполагая ваш .gitignore файл выглядит примерно так:

upload/*

вы можете сделать это:

$ touch upload/.placeholder
$ git add -f upload/.placeholder

если вы забыли -f вы увидите:

$ git add upload/.placeholder
The following paths are ignored by one of your .gitignore files:
upload
Use -f if you really want to add them.
fatal: no files added

затем, когда вы делаете git status вы увидите:

# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached ..." to unstage)
#
#   new file:   upload/.placeholder
#

очевидно, что вы можете сделать:

$ touch upload/images/.placeholder
$ git add -f upload/images/.placeholder

Я писал об этом здесь.

добавить a .гитюдного в каталоге.

лучший ответ, который я нашел, это включить a .gitignore файл в папке загрузки с этим содержимым

# Ignore everything in this directory
*
# Except this file
!.gitignore

вот вам как я могу добавить пустой каталог в репозиторий Git?

лучшее решение до сих пор:

1) Создать .gitignore file

2) написать:

*
*/
!.gitignore

3) Добавить .gitignore файл в папку, которую вы хотите.

Источник:https://stackoverflow.com/a/5581995/2958543