Подтвердить что ты не робот

Фиксировать пустую структуру папок (с помощью 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/

Итак, я просто хочу, чтобы пустая структура папок была зафиксирована.

4b9b3361

Ответ 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 и зафиксировать реальные файлы.

то есть.

  • Данные /
    • Изображения /
      • 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"