Как отслеживать каталоги, но не их файлы с помощью Git? - PullRequest
65 голосов
/ 23 февраля 2011

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

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

В моем .gitignore у меня есть следующее:

uploads/*.*

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

uploads/

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

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

Ответы [ 5 ]

90 голосов
/ 23 февраля 2011

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
37 голосов
/ 23 февраля 2011

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

Добавить .gitignore в каталоге.

16 голосов
/ 05 декабря 2014

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

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

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

12 голосов
/ 05 сентября 2016

Лучшее решение на данный момент:

1) Создайте .gitignore файл

2) Пишите внутрь:

*
*/
!.gitignore

3) Добавьте файл .gitignore в нужную папку.

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

1 голос
/ 13 января 2019

Чтобы отслеживать только каталоги, но не файлы, я сделал следующее.Благодаря комментарию @ PeterFarmer, касающемуся файлов git tracking, я смог сохранить все каталоги, кроме файлов, как описано ниже.

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

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:

Предшествующий слеш ищет только корневой каталог.

/ dir

Двойная звездочка ищет ноль или более каталогов.

/ ** /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...