Как отслеживать каталоги, но не их файлы с помощью Git?
Недавно я начал использовать Git, и у меня проблемы только с одной. Как я могу отслеживать каталоги без отслеживания их содержимого?
Например, сайт, над которым я работаю, позволяет загружать. Я хочу отслеживать каталог uploads так, чтобы он был создан при ветвлении и т.д., Но, очевидно, не файлы внутри него (тестовые файлы в процессе разработки ветки или реальные файлы в master).
В моем .gitignore у меня есть следующее:
uploads/*.*
Вы также попробовали (который игнорирует весь каталог):
uploads/
Этот каталог может также содержать вспомогательные каталоги (uploads/thumbs/uploads/videos/). Я бы хотел отслеживать их, но не их файлы.
Возможно ли это с помощью Git? Я искал везде, не найдя ответа.
Ответы
Ответ 1
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
Ответ 2
Я написал об этом здесь.
Добавьте .gitignore в каталог.
Ответ 3
Лучший ответ, который я нашел, - это добавить файл .gitignore в папку для загрузки с этим контентом
# Ignore everything in this directory
*
# Except this file
!.gitignore
Здесь вы Как добавить пустой каталог в репозиторий Git?
Ответ 4
Лучшее решение:
1) Создайте файл .gitignore
2) Запишите внутри:
*
*/
!.gitignore
3) Добавьте файл .gitignore в нужную папку.
Источник: fooobar.com/questions/10447/...
Ответ 5
Чтобы отслеживать только каталоги, но не файлы, я сделал следующее. Благодаря комментарию @PeterFarmer по отслеживанию только файлов git, я смог сохранить все каталоги, кроме файлов, как описано ниже.
# exclude everything in every folder
/data/**/*.*
# include only .gitkeep files
!/data/**/*.gitkeep
Добавление этого в файл .gitignore сделает всю работу. Ниже приведена структура моей папки.
data/
├── processed
│ ├── dataset1.csv
│ └── dataset2.csv
├── raw
│ ├── raw_dataset1.json
└── test
├── subfolder
│ └── dataset2.csv
└── reviews.csv
Когда я делаю git add. && git status
git add. && git status
, git распознает только папки, но не файлы.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitignore
new file: data/processed/.gitkeep
new file: data/raw/.gitkeep
new file: data/test/.gitkeep
new file: data/test/subfolder/.gitkeep
Имейте в виду, что следующее для ваших файлов .gitignore:
Предшествующий слеш ищет только корневой каталог.
/реж
Двойная звездочка ищет ноль или более каталогов.
/**/