Каковы различия между.gitignore и.gitkeep?
Каковы различия между .gitignore
а также .gitkeep
? Это одно и то же с другим именем или они оба выполняют разные функции? Кажется, я не могу найти много документации по .gitkeep
,
7 ответов
.gitkeep
не задокументировано, потому что это не особенность Git.
Git не может добавить полностью пустой каталог. Люди, которые хотят отслеживать пустые каталоги в Git, создали соглашение о размещении файлов под названием .gitkeep
в этих каталогах. Файл может называться как угодно; Git не придает особого значения этому имени.
Существует конкурирующее соглашение о добавлении .gitignore
подать в пустые каталоги, чтобы отслеживать их, но некоторые люди считают, что это сбивает с толку, поскольку цель состоит в том, чтобы сохранить пустые каталоги, а не игнорировать их; .gitignore
также используется для отображения файлов, которые Git должен игнорировать при поиске неотслеживаемых файлов.
.gitkeep
это просто заполнитель. Файл-пустышка, поэтому git не забудет про каталог, так как git отслеживает только файлы.
Если вы хотите пустой каталог и убедитесь, что он остается "чистым" для git, создайте .gitignore
содержащий следующие строки в:
# .gitignore sample
###################
# ignore all files in this dir...
*
# ... except for this one.
!.gitignore
Если вы хотите, чтобы в git был виден только один тип файлов, вот пример того, как отфильтровать все, кроме.gitignore и всех .txt
файлы:
# .gitignore to keep just .txt files
###################################
# filter everything...
*
# ... except the .gitignore...
!.gitignore
# ... and all text files.
!*.txt
("#" обозначает комментарии.)
.gitignore
текстовый файл, содержащий список файлов в вашем каталоге, которые git будет игнорировать или не добавлять / обновлять в хранилище.
.gitkeep
Поскольку git удаляет или не добавляет пустые каталоги в репозиторий, gitkeep является своего рода хаком (я не думаю, что он официально назван частью git), чтобы хранить пустые каталоги в репозитории.
просто сделай touch /path/to/emptydirectory/.gitkeep
чтобы добавить файл и git теперь сможет поддерживать этот каталог в репозитории.
Многие люди предпочитают использовать только
.keep
поскольку соглашение не имеет ничего общего с git.
Файл используется, чтобы сообщить Git, какие файлы и папки следует игнорировать. Часто эти файлы являются артефактами сборки, временными файлами или другими типами файлов, которые не принадлежат репозиторию. Git проигнорирует любой каталог или файл, который соответствует шаблону в файле.
Пример:
# Ignore .DS_Store files
.DS_Store
# Ignore build artifacts
build/
# Ignore log files
*.log
Напротив, файл используется в Git для поддержки каталога, который в противном случае был бы пустым. Git по умолчанию не отслеживает пустые папки, поэтому вы должны добавить файл в этот каталог, если хотите сохранить его в своем репозитории. Имя файла имеет большее значение, чем фактическое содержимое файла.
Пример файла
# This file is used to keep the directory empty in Git
В заключение.
Это не ответ на исходный вопрос "В чем разница между.gitignore и.gitkeep?" но размещение здесь, чтобы помочь людям легко отслеживать пустой каталог. Чтобы отслеживать пустой каталог и знать, что
.gitkeep
не является официальной частью git,
просто добавьте пустой (без содержимого)
.gitignore
файл в нем.
Так, например, если у вас есть
/project/content/posts
и иногда
posts
каталог может быть пустым, тогда создайте пустой файл
/project/content/posts/.gitignore
без содержимого для отслеживания этого каталога и его будущих файлов в git.
Если вы хотите игнорировать все в подкаталоге, но при этом добавить в Git сам подкаталог (и для этого файл), вам необходимо добавить это в.gitignore
:
build/*
!build/.gitkeep
Это означает игнорировать все, что указано вbuild
каталог, но исключить.gitkeep
из шаблона игнорирования.