Фиксация пустой структуры папок (с помощью git)


У меня есть каталог data в корень проекта. Он имеет каталог изображений и некоторые файлы. Вот пример:

  • сведения/
    • картинки/
      • image1.jpg
      • image2.jpg
      • image2.jpg
    • результаты.csv
    • r.txt

Что писать в gitignore, чтобы игнорировать файлы из data / directory (то есть результаты.csv и r.txt) и файлы из изображений / каталога (изображение.jpg, image2.jpg, image3.jpg)?

когда я его фиксирую, структура папок в репозитории должна быть:

  • сведения/
    • картинки/

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

9 57

9 ответов:

в Git вы не можете фиксировать пустые папки, потому что Git фактически не сохраняет папки, только файлы. Вам нужно будет создать некоторый файл-заполнитель внутри этих каталогов, если вы действительно хотите, чтобы они были "пустыми" (т. е. у вас нет фиксируемого контента).

просто добавьте файл .gitkeep в каждой папке, которую вы хотите зафиксировать.

в windows сделайте это, щелкнув правой кнопкой мыши, когда в папке и выберите: Git bash отсюда. Затем введите:touch .gitkeep

это легко.

рассказать .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 в нем, но эта часть может быть проигнорирована, верно. :)

рекурсивно создать .gitkeep files

find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;

традиционно всякий раз, когда я хотел зафиксировать и очистить структуру каталогов, я создаю структуру, а затем в конечных каталогах помещаю пустой файл с именем empty.txt.

затем, когда я помещаю вещи, которые готовы к фиксации, я могу просто удалить empty.txt файл и зафиксировать реальные файлы.

т. е.

  • сведения/
    • картинки/
      • пустой.txt

рассмотрим также просто делать 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"

вы можете сделать пустую фиксацию с помощью git commit --allow-empty, но это не позволит вам зафиксировать пустую структуру папок, поскольку git не знает или не заботится о папках как о самих объектах-только о файлах, которые они содержат.

согласно их FAQ, GIT не отслеживает пустые каталоги.

git FAQ

однако существуют обходные пути, основанные на ваших потребностях и требованиях к проекту.

в основном, если вы хотите отслеживать пустой каталог, вы можете разместить там. Файл может быть пустым, и он будет просто работать. Это Gits способ отслеживания пустой каталог.

другой вариант-предоставить документацию для каталога. Вы можете просто добавьте в него файл readme, описывающий его ожидаемое использование. Git будет отслеживать папку, потому что в ней есть файл, и теперь вы предоставили документацию вам и/или кому-либо еще, кто может использовать исходный код.

Если вы создаете веб-приложение, вам может быть полезно просто добавить индекс.html-файл, который может содержать сообщение об отказе в разрешении, если папка доступна только через приложение. Codeigniter делает это со всеми своими каталогами.

просто добавьте файл с именем as .храните в папке изображений.теперь вы можете выполнить этап и фиксацию, а также добавить папку в систему управления версиями.

создать пустой файл в папке images $ 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"