Что такое .gitignore точно?

212

Я только что создал Github-репозиторий и мне было интересно, для чего этот .gitignoreфайл. Я начал с того, что не создал его, но добавил его из-за того, что в большинстве репозиториев он есть. Мне нужно иметь один? Могу ли я просто проигнорировать это, или оно имеет смысл? Я провел некоторое исследование по этому вопросу, но не смог найти конкретного объяснения.

Zahachos
источник

Ответы:

175

.gitignoreсообщает git, какие файлы (или шаблоны) следует игнорировать. Обычно он используется для того, чтобы избежать передачи временных файлов из вашего рабочего каталога, которые бесполезны для других соавторов, таких как продукты компиляции, создание временных файлов IDE и т. Д.

Вы можете найти полную информацию здесь .

Mureinik
источник
Так что если вы создаете .gitignore в новом репозитории на github.com, а затем делаете git init и git add . на вашем локальном компьютере - еще не подключен к .gitignore, поскольку он еще не подключен к этому хранилищу - как это работает? Действует ли это, когда я выполняю git commit? Или?
Ксонатрон
для чего _._gitignoreиспользуется? это используется только когда gitignore находится в суб Dir.?
Сайкат Чакраборти
Таким образом, он остается локально, но не подталкивается к происхождению? Так что, если какой-то пользователь скачивает github repo, этот секретный файл тоже скачивается?
Познакомьтесь с Завери
Что значит игнорировать ? Кто / что / когда игнорирует? Я знаю, что означает слово игнорировать, но я не нахожу четкого описания того, что означает игнорировать в контексте Git. Очевидно, что этот термин полностью понятен людям, которые понимают его, но все, что написано, чтобы определить что-то для людей, которые еще не знают, нуждается в объяснении всех терминов, которые имеют определения, уникальные для контекста.
user34660
1
@ user34660 Игнорировать означает только то, что - Git не будет отслеживать изменения в файлах, указанных (шаблонами) в .gitignoreфайле. Даже если вы измените их, git не покажет их как измененные.
Мюрейник,
42

Это список файлов, которые вы хотите игнорировать в вашей рабочей директории.

Скажем, вы на Mac и у вас есть файлы .DS_Store во всех ваших каталогах. Вы хотите, чтобы git игнорировал их, поэтому вы добавляете .DS_Store в виде строки в .gitignore. И так далее.

Git Docs расскажет вам все, что вам нужно знать: http://git-scm.com/docs/gitignore

Энди Лестер
источник
2
Ваш .DS_Storeсценарий, наконец, нашел отклик у меня, так как я полагаю, что я не понял эту концепцию, потому что мне еще не нужно было использовать ее в проекте. Спасибо. В итоге я использовал это в качестве отправной точки, поскольку я использую все различные операционные системы, обращая особое внимание на этот # OS generated files #раздел.
Phoenixlaef
2
Я знаю, что опоздал на эту тему, но спасибо @AndyLester! Я новичок, когда дело доходит до программирования и Github. Я нахожу, что многие ответы, написанные для ответа на этот тип вопросов, заполнены терминами, которые новичок может не понять (т. Е. Продукты компиляции, временные файлы, создаваемые средами разработки. Что это за штука!). Тем не менее, описание вашего Mac идеально в его элегантной простоте!
Везуччо
21

Когда вы делаете коммит, вы не хотите случайно включать временные файлы или создавать определенные папки. Поэтому используйте .gitignoreсписок предметов, которые вы хотите игнорировать при совершении.

Кроме того, важно, что git status это одна из наиболее часто используемых команд, в которой вы хотите git statusперечислить файлы, которые были изменены.

Вы хотели бы, чтобы ваш git statusсписок выглядел чистым от нежелательных файлов. Например, я изменил, a.cpp, b.cpp, c.cpp, d.cpp & e.cppя хочу, чтобы мой git statusперечислить следующее:

git status
a.cpp
b.cpp
c.cpp
d.cpp
e.cpp

Я не хочуgit status перечислять измененные файлы, как это, с промежуточными объектными файлами и файлами из папки сборки

git status
a.cpp
b.cpp
c.cpp
d.cpp
e.cpp
.DS_Store
/build/program.o
/build/program.cmake

Следовательно, чтобы освободить себя от git statusперечисления этих промежуточных временных файлов и случайного внесения их в репозиторий, я должен создать файл, .gitignoreкоторый делают все. Все, что мне нужно сделать, перечислить файлы и папки в том, .gitignoreчто я хочу исключить из фиксации.

Следующее является моим, .gitignoreчтобы избежать фиксации ненужных файлов

/*.cmake
/*.DS_Store
/.user
/build
programmer_of_the_galaxies
источник
7

Есть файлы, в которые вы не хотите, чтобы Git регистрировался. Git видит каждый файл в вашей рабочей копии как одну из трех вещей:

  1. отслеживаемый - файл, который был предварительно поставлен или зафиксирован;
  2. неотслеживаемый - файл, который не был поставлен или зафиксирован; или
  3. ignored - файл, который Git явно сказал игнорировать.

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

  • кэши зависимостей, такие как содержимое /node_modulesили/packages
  • скомпилированный код, такие , как .o, .pycи .classфайлы
  • вывод сборки каталоги, такие как /bin, /outили/target
  • файлы , созданные во время выполнения, такие как .log, .lockили.tmp
  • скрытые системные файлы, такие как .DS_StoreилиThumbs.db
  • личные файлы конфигурации IDE, такие как .idea/workspace.xml

Проигнорированные файлы отслеживаются в специальном файле с именем, .gitignoreкоторый зарегистрирован в корне вашего хранилища. Не существует явной команды git ignore: вместо этого .gitignoreфайл должен быть отредактирован и зафиксирован вручную, когда у вас есть новые файлы, которые вы хотите игнорировать. .gitignoreфайлы содержат шаблоны, которые сопоставляются с именами файлов в вашем хранилище, чтобы определить, следует ли их игнорировать. Вот пример.gitignore файла. Для более подробной информации смотрите эту ссылку

ИМК
источник
5

Основное назначение .gitignore - чтобы вы не добавляли ненужные файлы и т. Д. Git

У меня есть много личных заметок / каракулей в определенных репозиториях: они полезны для меня, но не для кого-либо еще. Я бы не хотел, чтобы он был загружен на github, потому что это просто запутало бы всех, кто его читает. Хорошо, что я могу попросить git «игнорировать» эти файлы. Единственная цена такого подхода заключается в том, что я не смогу восстановить эти заметки, если мой компьютер выйдет из строя и т. Д.

BKSpurgeon
источник