Фиксировать пустую структуру папок (с помощью git)
У меня есть каталог данных в корне проекта. Он имеет каталог изображений и некоторые файлы. Вот пример:
data
├── images
│ ├── image1.jpg
│ ├── image2.jpg
│ └── image3.jpg
├── results.csv
└── r.txt
Что писать в gitignore, чтобы игнорировать файлы из каталога data/(то есть results.csv и r.txt) и файлы из каталога images/(image.jpg, image2.jpg, image3.jpg)?
Когда я фиксирую это, структура папок в хранилище должна быть:
data/
└── images/
Итак, я просто хочу, чтобы пустая структура папок была зафиксирована.
Ответы
Ответ 1
В Git вы не можете совершать пустые папки, потому что Git фактически не сохраняет папки, а только файлы. Вам нужно будет создать некоторый файл-заполнитель внутри этих каталогов, если вы действительно хотите, чтобы они были "пустыми" (т.е. У вас нет компрометирующего контента).
Ответ 2
Просто добавьте файл .gitkeep
в каждую папку, которую вы хотите зафиксировать.
В окнах сделайте это, щелкнув правой кнопкой мыши в папке и выберите: Git bash отсюда. Затем введите: touch .gitkeep
Ответ 3
Это легко.
сообщите .gitignore
игнорировать все, кроме .gitignore
, и папки, которые вы хотите сохранить. Поместите .gitignore
в папки, которые вы хотите сохранить в репо.
Содержание самого верхнего .gitignore
:
# ignore everything except .gitignore and folders that I care about:
*
!images*
!.gitignore
В вложенной папке images
это ваш .gitignore
:
# ignore everything except .gitignore
*
!.gitignore
Обратите внимание, что вы должны указать в .gitignore имена папок, которые вы не хотите игнорировать в папке, где находится этот .gitignore. В противном случае они, очевидно, игнорируются.
Ваши папки в репо будут, очевидно, НЕ пустыми, так как каждый из них будет иметь .gitignore
, но эту часть можно игнорировать, правильно.:)
Ответ 4
Рекурсивно создавать файлы .gitkeep
find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;
Ответ 5
Традиционно всякий раз, когда я хотел зафиксировать и пустую структуру каталогов, я создаю структуру, а затем в каталогах листьев размещаю пустой файл с именем empty.txt
.
Затем, когда я помещаю вещи в готовые к фиксации, я могу просто удалить файл empty.txt
и зафиксировать реальные файлы.
то есть.
Ответ 6
Считайте также, что вы делаете mkdir -p data/images
в своем Makefile, если каталог должен быть там во время сборки.
Если это недостаточно, просто создайте пустой файл в data/images и проигнорируйте данные.
touch data/images/.gitignore
git add data/images/.gitignore
git commit -m "Add empty .gitignore to keep data/images around"
echo data >> .gitignore
git add .gitignore
git commit -m "Add data to .gitignore"
Ответ 7
Вы можете сделать пустую фиксацию с помощью git commit --allow-empty
, но это не позволит вам фиксировать пустую структуру папок, поскольку git не знает или не заботится о папках как о самих объектах - только файлы, которые они содержат.
Ответ 8
В соответствии с их FAQ, GIT не отслеживает пустые каталоги.
Git Часто задаваемые вопросы
Однако существуют обходные пути, основанные на ваших потребностях и ваших требованиях к проекту.
В принципе, если вы хотите отслеживать пустой каталог, вы можете разместить там файл .gitkeep
. Файл может быть пустым, и он будет работать. Это способ Gits отслеживания пустого каталога.
Другой вариант - предоставить документацию для каталога. Вы можете просто добавить в него файл readme, описывающий его ожидаемое использование. GIT будет отслеживать папку, потому что в ней есть файл, и теперь вы предоставили вам документацию и/или того, кто еще может использовать исходный код.
Если вы создаете веб-приложение, вам может быть полезно просто добавить файл index.html, который может содержать сообщение об отказе в разрешении, если папка доступна только через приложение. Codeigniter делает это со всеми своими каталогами.
Ответ 9
Просто добавьте файл с именем .keep в папку с изображениями. Теперь вы можете выполнять этап и совершать, а также добавлять папку в контроль версий.
Создать пустой файл в папке с изображениями
$ touch .keep
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add ..." to include in what will be committed)
images/
nothing added to commit but untracked files present (use "git add" to track)
$ git add .
$ git commit -m "adding empty folder"