Gitignore файлы в папке но не папку
У меня есть задание, которое направляет активы в каталог. Я хотел бы включить каталог в свой проект, но исключить выходные файлы через файл .gitignore . Моя задача глотка выглядит так:
Так что в .gitignore если я пойду:
Это игнорирует все, что не то, что я хочу.
Я нашел этот вопрос: Как добавить пустой каталог в репозитории Git? и кто-то предложил «обходной путь» с 54 ответами:
«Энди Лестер прав, но если ваш каталог просто должен быть пустым, а не пустым, вы можете поместить туда пустой файл .gitignore в качестве обходного пути . »
Итак, теперь я иду:
И взял предложение из принятого ответа и сделал:
Но все равно не получить желаемого результата.
Как я могу зафиксировать выходную папку в хранилище для задачи gulp?
Игнорирование файлов в подпапках (несколько файлов gitignore)
Предположим, что у вас есть структура репозитория:
output.log в каталоге примеров действителен и требуется, чтобы проект собирал понимание, в то время как один под src/ создается во время отладки и не должен находиться в истории или части хранилища.
Существует два способа игнорировать этот файл. Вы можете поместить абсолютный путь в файл .gitignore в корень рабочего каталога:
Кроме того, вы можете создать файл .gitignore каталоге src/ и проигнорировать файл, относящийся к этому .gitignore :
Игнорирование только части файла [заглушки]
Вы можете сделать Git «unsee» эти строки, используя чистый фильтр. Они даже не появятся в разностях.
Предположим, что это фрагмент файла file1.c :
Вы не хотите публиковать NOCOMMIT .
Создайте фильтр «nocommit», добавив его в конфигурационный файл Git, например .git/config :
Добавьте (или создайте) это в .git/info/attributes или .gitmodules :
И ваши линии NOCOMMIT скрыты от Git.
- Использование чистого фильтра замедляет обработку файлов, особенно в Windows.
- Пропущенная строка может исчезнуть из файла, когда Git обновляет ее. Его можно противодействовать фильтром размытия, но это сложнее.
- Не тестировалось в Windows
Поиск файлов, игнорируемых .gitignore
Вы можете перечислить все файлы, игнорируемые git в текущем каталоге командой:
Итак, если у нас есть структура репозитория, вот так:
. и .gitignore файл, содержащий:
. чем результат команды будет:
Если вы хотите перечислить рекурсивно проигнорированные файлы в каталогах, вам нужно использовать дополнительный параметр - --untracked-files=all
Результат будет выглядеть так:
report this ad
Git рассматривает каждый файл в вашей рабочей копии как файл одного из трех нижеуказанных типов.
- Отслеживаемый файл — файл, который был предварительно проиндексирован или зафиксирован в коммите.
- Неотслеживаемый файл — файл, который не был проиндексирован или зафиксирован в коммите.
- Игнорируемый файл — файл, явным образом помеченный для Git как файл, который необходимо игнорировать.
Игнорируемые файлы — это, как правило, артефакты сборки и файлы, генерируемые машиной из исходных файлов в вашем репозитории, либо файлы, которые по какой-либо иной причине не должны попадать в коммиты. Вот некоторые распространенные примеры таких файлов:
- кэши зависимостей, например содержимое /node_modules или /packages ;
- скомпилированный код, например файлы .o , .pyc и .class ;
- каталоги для выходных данных сборки, например /bin , /out или /target ;
- файлы, сгенерированные во время выполнения, например .log , .lock или .tmp ;
- скрытые системные файлы, например .DS_Store или Thumbs.db ;
- личные файлы конфигурации IDE, например .idea/workspace.xml .
Игнорируемые файлы отслеживаются в специальном файле .gitignore , который регистрируется в корневом каталоге репозитория. В Git нет специальной команды для указания игнорируемых файлов: вместо этого необходимо вручную отредактировать файл .gitignore , чтобы указать в нем новые файлы, которые должны быть проигнорированы. Файлы .gitignore содержат шаблоны, которые сопоставляются с именами файлов в репозитории для определения необходимости игнорировать эти файлы.
Очистить уже зафиксированные файлы, но включенные в .gitignore
Иногда случается, что файл отслеживается git, но в более поздний момент времени был добавлен в .gitignore, чтобы остановить его отслеживание. Очень распространенный сценарий забыть очистить такие файлы до его добавления в .gitignore. В этом случае старый файл все равно будет висящим в репозитории.
Чтобы устранить эту проблему, можно было выполнить «сухое» удаление всего в репозитории, а затем повторное добавление всех файлов обратно. Пока у вас нет ожидающих изменений и --cached параметр --cached , эта команда достаточно безопасна для запуска:
Очистка игнорируемых файлов
Вы можете использовать git clean -X для очистки игнорируемых файлов:
Примечание: -X (caps) очищает только игнорируемые файлы. Используйте -x (без ограничений), чтобы удалить ненужные файлы.
Дополнительную информацию см. В руководстве Git .
Проверка игнорирования файла
Команда git check-ignore сообщает о файлах, игнорируемых Git.
Вы можете передавать имена файлов в командной строке, а git check-ignore будет отображать имена файлов, которые игнорируются. Например:
Здесь только * .o файлы определены в .gitignore, поэтому Readme.md не указан в выводе git check-ignore .
Начиная с Git 1.7.6, вы также можете использовать git status --ignored , чтобы увидеть проигнорированные файлы. Дополнительную информацию об этом можно найти в официальной документации или в разделе «Поиск файлов, игнорируемых с помощью .gitignore» .
Общие файлы .gitignore в вашем репозитории
Обычно правила игнорирования Git задаются в файле .gitignore в корневом каталоге репозитория. Тем не менее вы можете определить несколько файлов .gitignore в разных каталогах репозитория. Каждый шаблон из конкретного файла .gitignore проверяется относительно каталога, в котором содержится этот файл. Однако проще всего (и этот подход рекомендуется в качестве общего соглашения) определить один файл .gitignore в корневом каталоге. После регистрации файла .gitignore для него, как и для любого другого файла в репозитории, включается контроль версий, а после публикации с помощью команды push он становится доступен остальным участникам команды. В файл .gitignore , как правило, включаются только те шаблоны, которые будут полезны другим пользователям репозитория.
Игнорировать файлы, которые уже были переданы в репозиторий Git
Если вы уже добавили файл в свой репозиторий Git и теперь хотите прекратить его отслеживать (чтобы он не присутствовал в будущих коммитах), вы можете удалить его из индекса:
Это приведет к удалению файла из репозитория и предотвращению отслеживания дальнейших изменений Git. Параметр --cached гарантирует, что файл не будет физически удален.
Обратите внимание, что ранее добавленное содержимое файла по-прежнему будет отображаться через историю Git.
Имейте в виду, что если кто-то еще вытащит из репозитория после удаления файла из индекса, их копия будет физически удалена .
Вы можете заставить Git притвориться, что версия рабочего каталога файла обновлена и вместо этого прочитала индексную версию (таким образом, игнорируя изменения в ней) с битом « skip worktree »:
На этот бит не влияет запись, безопасность контента по-прежнему является первоочередной задачей. Вы никогда не потеряете свои драгоценные игнорируемые изменения; с другой стороны, этот бит конфликтует с тиснением: чтобы удалить этот бит, используйте
Иногда ошибочно рекомендуется лгать Гиту и предположить, что файл остается неизменным, не изучая его. Он выглядит на первый взгляд как игнорирование любых дальнейших изменений в файле, не удаляя его из его индекса:
Это заставит git игнорировать любые изменения, внесенные в файл (имейте в виду, что если вы поместите какие-либо изменения в этот файл или вы его запишете, ваши проигнорированные изменения будут потеряны )
Если вы хотите, чтобы git снова «заботился» об этом файле, выполните следующую команду:
Игнорирование файлов и каталогов с помощью файла .gitignore
Вы можете заставить Git игнорировать определенные файлы и каталоги, то есть исключить их от отслеживания Git - путем создания одного или нескольких файлов .gitignore в вашем репозитории.
В проектах программного обеспечения .gitignore обычно содержит список файлов и / или каталогов, которые генерируются во время процесса сборки или во время выполнения. Записи в файле .gitignore могут включать имена или пути, указывающие на:
- временные ресурсы, например, кэши, файлы журналов, скомпилированный код и т. д.
- файлы локальной конфигурации, которые не должны использоваться совместно с другими разработчиками
- файлы, содержащие секретную информацию, такие как пароли входа, ключи и учетные данные
При создании в каталоге верхнего уровня правила будут применяться рекурсивно ко всем файлам и подкаталогам во всем репозитории. При создании в подкаталоге правила будут применяться к этому конкретному каталогу и его подкаталогам.
Когда файл или каталог игнорируются, это не будет:
- отслеживается Git
- сообщается командами, такими как git status или git diff
- с такими командами, как git add -A
В необычном случае, когда вам нужно игнорировать отслеживаемые файлы, следует соблюдать особую осторожность. См .: Игнорировать файлы, которые уже были переданы в репозиторий Git .
Использование файла исключения
Вы также можете добавить записи exclude шаблона поиска файлов в файл в папку .git/info/ локального репозитория. Файл exclude позволяет Git узнать, какие неотслеченные файлы игнорировать и использовать тот же синтаксис шаблона поиска файлов, что .gitignore и файл.
Записи в exclude файле применяются только к неотслеченным файлам и не препятствуют Git сообщать об изменениях в зафиксированных файлах, которые уже отслеживаются. Для каждого репозитория существует только один exclude файл.
Так как Git не фиксирует или не отправляет exclude файл, его можно безопасно использовать, чтобы игнорировать файлы в локальной системе, не затрагивая других пользователей.
Заполненные шаблоны .gitignore
Если вы не знаете, какие правила перечислять в вашем файле .gitignore или просто хотите добавить общепринятые исключения в свой проект, вы можете выбрать или сгенерировать файл .gitignore :
Многие хостинговые сервисы, такие как GitHub и BitBucket, предлагают возможность генерации файлов .gitignore на основе языков программирования и IDE, которые вы можете использовать:
Коммит игнорируемого файла
Можно принудительно сделать коммит игнорируемого файла в репозиторий с помощью команды git add с параметром -f (или --force ):
Этот способ хорош, если у вас задан общий шаблон (например, *.log ), но вы хотите сделать коммит определенного файла. Однако еще лучше в этом случае задать исключение из общего правила:
Этот подход более прозрачен и понятен, если вы работаете в команде.
Используйте индекс обновления Git, чтобы игнорировать изменения
Иногда бывает удобно временно прекратить отслеживание локального файла репозитория и игнорировать изменения в файле Git. Например, может потребоваться настроить файл параметров для среды разработки без риска фиксации изменений. Для этого можно выполнить git update-index команду с флагом skip-worktree :
Чтобы возобновить отслеживание, выполните git update-index команду с флагом --no-skip-worktree .
Кроме того, вы можете временно прекратить отслеживание файла и пропустить изменения в файле с помощью git update-index команды с флагом assume-unchanged . Этот параметр менее эффективен, чем skip-worktree флаг, так как assume-unchanged флаг может быть отменен операцией Git pull , которая изменяет содержимое файла.
Чтобы возобновить отслеживание, выполните git update-index команду с флагом --no-assume-unchanged .
Игнорирование последующих изменений в файле (без его удаления)
Иногда вы хотите иметь файл, хранящийся в Git, но игнорировать последующие изменения.
Скажите Git игнорировать изменения в файле или каталоге с помощью update-index :
Вышеупомянутая команда дает указание Git предположить, my-file.txt не был изменен, а не проверять или сообщать об изменениях. Файл все еще присутствует в репозитории.
Это может быть полезно для предоставления значений по умолчанию и разрешения переопределения локальной среды, например:
Создать пустую папку
Невозможно добавить и зафиксировать пустую папку в Git из-за того, что Git управляет файлами и прикрепляет к ним свой каталог, который сглаживает и фиксирует скорость. Чтобы обойти это, существует два метода:
Метод первый: .gitkeep
Один хак, чтобы обойти это, - использовать файл .gitkeep для регистрации папки для Git. Для этого просто создайте требуемый каталог и добавьте файл .gitkeep в папку. Этот файл пуст и не служит никакой другой цели, кроме как просто зарегистрировать эту папку. Для этого в Windows (который имеет неудобные соглашения об именах файлов) просто запустите git bash в каталоге и запустите команду:
Эта команда просто делает пустой файл .gitkeep в текущем каталоге
dummy.txt способ: dummy.txt
Использование файла gitignore
Вы можете сообщить Git, что не отслеживать определенные файлы в проекте, добавив и настроив .gitignore файл. Записи в .gitignore файле применяются только к неотслеченным файлам и не препятствуют Git сообщать об изменениях в отслеживаемых файлах. Отслеживаемые файлы — это файлы, зафиксированные и существующие в последнем моментальном снимке Git.
Каждая строка в .gitignore файле указывает шаблон поиска файлов относительно пути к файлу .gitignore . Синтаксис .gitignore является гибким и поддерживает использование подстановочных знаков для указания отдельных или нескольких файлов по имени, расширению и пути. Git сопоставляет .gitignore шаблоны поиска с файлами в проекте, чтобы определить, какие файлы следует игнорировать.
Как правило, вы просто добавите файл в корневую .gitignore папку проекта. Однако вы можете добавить .gitignore файл в любую папку проекта, чтобы сообщить Git, какие файлы следует игнорировать в этой папке и ее вложенных папках на любой вложенной глубине. Для нескольких .gitignore файлов шаблоны поиска файлов, заданные файлом .gitignore в папке, имеют приоритет над шаблонами, заданными файлом .gitignore в родительской папке.
Вы можете вручную создать .gitignore файл и добавить в него записи шаблона файла или сэкономить время, скачав .gitignore шаблон для среды разработки из репозитория GitHub gitignore . Одним из преимуществ использования .gitignore файла является возможность фиксации изменений и совместного использования файла с другими пользователями.
Visual Studio 2019 версии 16.8 и более поздних версий предоставляет возможности управления версиями Git при сохранении пользовательского интерфейса Git Team Explorer. Чтобы использовать Team Explorer, снимите флажок ToolsOptionsPreview> >FeaturesNew>Git в строке меню. Функции Git можно использовать из любого интерфейса взаимозаменяемо. Ниже приведено параллельное сравнение создания и добавления записей в .gitignore файл.
Visual Studio автоматически создает .gitignore файл для среды разработки Visual Studio при создании нового репозитория Git.
Visual Studio Git
В окне изменений Git щелкните правой кнопкой мыши любой измененный файл, который требуется игнорировать Git, и выберите "Игнорировать этот локальный элемент " или "Игнорировать это расширение". Эти параметры меню не существуют для отслеживаемых файлов.
Обозреватель Team Explorer в Visual Studio
В представлении "Изменения"в Team Explorer щелкните правой кнопкой мыши любой измененный файл, который требуется игнорировать Git, и выберите " Пропустить этот локальный элемент " или "Пропустить это расширение". Эти параметры меню не существуют для отслеживаемых файлов.
Параметр "Игнорировать этот локальный элемент " добавляет новую запись в .gitignore файл и удаляет выбранный файл из списка измененных файлов.
Параметр "Игнорировать это расширение " добавляет новую запись в .gitignore файл и удаляет все файлы с тем же расширением, что и выбранный файл из списка измененных файлов.
Любой .gitignore из вариантов создает файл, если он еще не существует в корневой папке репозитория, и добавляет в него запись.
Visual Studio автоматически создает .gitignore файл в репозитории при создании нового репозитория для проекта.
Вы можете изменить .gitignore файл для репозитория, перейдя в представление Параметры в Team Explorer, а затем выбрав репозиторий Параметры. Выберите "Изменить " для своего .gitignore .
3 ответа
Хорошо, я разобрался:
По сути, любой файл в любой папке ниже одного уровня в / public должен игнорироваться.
Git вообще не хранит каталоги (или папки), он только сохраняет файлы в коммите. Когда Git отправляется для проверки коммита, если для какого-либо файла в этом коммите требуется наличие родительского каталога, Git создает этот родительский каталог в этой точке. Вот почему вам нужно зафиксировать файл .gitignore или в любом случае некоторый файл, внутри каталога: чтобы у Git был какой-то извлекаемый файл, который вынуждает его создать каталог.
Теперь проблема здесь в том, что когда Git выполняет свои "трюки как можно быстрее, даже если это смущает всех" :-), он может обнаружить, что .gitignore перечисляет имя каталога и что он - в частности, index в Git - не имеет файлов уже в этом каталоге, и он даже не потрудится заглянуть внутрь каталога для файлов. Вот как git add пропускает прямо над директивой !public/.gitignore : пока он просматривал, он нашел public в качестве каталога, но в нем еще не было файлов для фиксации, а затем нашел > в .gitignore и решил вообще не заглядывать внутрь public .
Если вместо перечисления public в вашем .gitignore вы перечислите public/* , Git должен заглянуть внутрь public , чтобы найти все свои файлы и подкаталоги, чтобы выяснить, могут ли они быть пропущенным Заглянув внутрь, он проверит public/.gitignore содержимое .gitignore . Запись public/* скажет «пропустить это», но более поздняя запись !public/.gitignore скажет «не пропустить». Затем более поздняя запись переопределяет, и public/.gitignore вставляется в индекс Git с помощью git add --all или git commit --all .
Как только public/.gitignore находится в индексе, он переходит к следующему коммиту. Как только это произойдет, на самом деле безопасно перечислить public , а не public/* в файле .gitignore , потому что теперь, когда Git имеет файл в каталоге, Git вынужден сканировать каталог. Запись для public/.gitignore будет только удалена из индекса только после явного запроса на удаление этой записи ( git rm public/.gitignore или git rm --cached public/.gitignore ) или перехода к ( git checkout - ing) существующий коммит, в котором нет public/.gitignore файла. После удаления записи указателя перечислять public , а не public/* , теперь небезопасно, поскольку Git может вернуться к своей уловке, заметив, что public является каталогом и игнорируется , и Git ничего не заставляет Git заглядывать внутрь public , поэтому он не заглядывает внутрь и не находит public/.gitignore и, следовательно, не делает проверьте на исключение.
Конечно, есть и другие способы сделать то же самое. Я предпочитаю вообще не указывать каталог на верхнем уровне: вместо этого внутри каталога public создайте файл .gitignore с содержимым:
Затем Git будет сканировать каталог public на наличие файлов, поскольку он не игнорируется; в этом каталоге есть файл .gitignore , и этот файл .gitignore говорит: игнорировать все здесь, кроме .gitignore здесь. , поскольку Git уже вошел в каталог на данный момент, и обнаружил список всех файлов и подкаталогов в этом каталоге, он проверит каждый такой файл и подкаталог по отдельности для этого .gitignore и проигнорирует все из них, кроме .gitignore сам.
Чтобы исключить файлы в подкаталоге, добавьте следующее к .gitignore в вашем базовом каталоге:
Если это единственный элемент в папке, и вам нужно сохранить эту папку активной, возможно, поместите в нее пустой текстовый файл
Есть несколько проектов, периодически кочующие между разработчиками. Фреймворк Yii в основе. Для работы в нем необходимо наличие папки /protected/runtime однако содержимое этой папки значения не играет. Можно в саму папку запихать гитигнор со следующим содержимым:
Однако требуется для нескольких папок создание этих папок, но они должны быть пустыми, даже без гитигнор внутри
Оценить 2 комментария
Есть одно решение.
В каталог положить .gitattributes с export-ignore.
А на продакшн выкладывать не git repo целиком, а делать экспорт (через git-archive).
У меня на тестовом стенде это активно используется — по push в репозиторий hook'ом выполняется git-archive + tar x в нужном каталоге.
Можно поподробней? особенно про первую часть, до экспорта. надо положить в репозиторий пустую папку абсолютно, без гитигноров, гитатрибутов и еже с ними
Вам важна красота репозитория, или отсутствие файлов в экспорте?
Первое обычно несущественно (если вам это существенно, то вам не подходит git, а также не подходят svn и cvs — у них в любой папке будет подпапка CVS или .svn).
А вот второе может быть очень существенным. И как раз это легко реализуется — помещением внутрь папки .gitattributes с export-ignore .gitattributes.
Это супер! Спасибо вам огромнейшее! С радостью бы поставил жирный-жирный плюс, но карма не позволяет. Поэтому просто человеческое спасибо!
Или стоит задача оставить папки _вообще_ пустыми?
.gitignore может быть абсолютно пустым, будут игнориться все файлы кроме .gitignore.
Другого способа добавить папку в git нет и не будет — git не хранит файлы/папки, а хранит диффы файлов, для этого нужны файлы.
Если нужны абсолютно пустые папки — заведите install.sh (либо используйте phing как на взрослом проекте), разумеется .gitignore в корне проекта должен содержать список всех пустых папок. Всё равно найдется что еще сделать — выставить пермишны, залить базу…
По сути да, с пхингом разбираюсь, но он поедет уже на новые проекты, старые будем переводить на него. Жаль, что нельзя создать вообще пустую папку, про различия я как-то упустил. Спасибо, что напомнили, остаток свн дает о себе знать)
Не все файлы в проекте должны отслеживаться Git. Временные файлы из среды разработки, выходные данные тестирования и журналы — это все примеры файлов, которые, вероятно, не нужно отслеживать. Вы можете использовать различные механизмы, чтобы сообщить Git, какие файлы в проекте не следует отслеживать, и чтобы Git не сообщал об изменениях в этих файлах. Для файлов, которые не отслеживаются Git, можно использовать .gitignore файл или exclude файл. Для файлов, отслеживаемых Git, можно указать Git прекратить их отслеживание и игнорировать изменения.
В этой статье раскрываются следующие темы:
- Игнорировать изменения в неотслеченных файлах с помощью .gitignore файла
- Игнорировать изменения в неотслеченных файлах с помощью exclude файла
- Остановка отслеживания файла и пропуск изменений с помощью git update-index
- Остановка отслеживания файла и пропуск изменений с помощью git rm
Использование Git rm для пропуска изменений
Записи в файле .gitignore или exclude файле не влияют на файлы, которые уже отслеживают Git. Git отслеживает файлы, зафиксированные ранее. Чтобы окончательно удалить файл из моментального снимка Git, чтобы Git больше не отслеживал его, но не удаляя его из файловой системы, выполните следующие команды:
Затем используйте .gitignore запись или exclude запись файла, чтобы запретить Git сообщать об изменениях в файле.
В этом разделе показано, как избежать добавления нежелательных файлов (или изменений файлов) в репозитории Git. Существует несколько способов (глобальный или локальный .gitignore , .git/exclude , git update-index --assume-unchanged и git update-index --skip-tree ), но имейте в виду, что Git управляет контентом , что означает: игнорирование фактически игнорирует содержимое папки (то есть файлы). По умолчанию пустая папка будет проигнорирована, так как она не может быть добавлена в любом случае.
Глобальные правила игнорирования в Git
Кроме того, для всех репозиториев в локальной системе можно определить глобальные шаблоны игнорирования Git, настроив параметр конфигурации Git core.excludesFile . Этот файл нужно создать самостоятельно. Если вы не знаете, куда поместить глобальный файл .gitignore , расположите его в домашнем каталоге (потом его будет легче найти). После создания этого файла необходимо настроить его местоположение с помощью команды git config :
Будьте внимательны при указании глобальных шаблонов игнорирования, поскольку для разных проектов актуальны различные типы файлов. Типичные кандидаты на глобальное игнорирование — это специальные файлы операционной системы (например, .DS_Store и thumbs.db ) или временные файлы, создаваемые некоторыми инструментами разработки.
Исключения в файле .gitignore
Если вы игнорируете файлы с помощью шаблона, но имеете исключения, префикс восклицательного знака (!) К исключению. Например:
В приведенном выше примере Git игнорирует все файлы с расширением .txt за исключением файлов с именем important.txt .
Если файл находится в папке проигнорировано, вы не можете повторно включить его так легко:
В этом примере все .txt-файлы в папке будут игнорироваться.
Правильный способ заключается в повторном включении самой папки в отдельной строке, а затем игнорировать все файлы в folder на * , наконец, повторно включить *.txt в folder , как показано ниже:
Примечание . Для имен файлов, начинающихся с восклицательного знака, добавьте два восклицательных знака или выйдите с символом \ :
Примеры
Вот некоторые общие примеры правил в файле .gitignore , основанные на шаблонах файлов glob :
Большинство файлов .gitignore являются стандартными для разных языков, поэтому для начала работы здесь приведены образцы файлов .gitignore перечисленных на языке, из которого можно клонировать или копировать / вносить изменения в ваш проект. Кроме того, для нового проекта вы можете автоматически генерировать стартовый файл с помощью онлайн-инструмента .
Игнорирование изменений в отслеживаемых файлах. [Заглушка]
.gitignore и .git/info/exclude работают только для файлов без следа.
Чтобы установить флаг игнорирования в отслеживаемом файле, используйте команду update-index :
Чтобы восстановить это, используйте:
Вы можете добавить этот фрагмент в свою глобальную конфигурацию git, чтобы иметь более удобную git hidden git hide , git unhide и git hidden команды:
Вы также можете использовать опцию --assume-неизменной с функцией update-index
Если вы хотите снова просмотреть этот файл для изменений, используйте
Когда задан флаг -измеренный неизмененный, пользователь обещает не изменять файл и позволяет Git предположить, что рабочий файл дерева соответствует тому, что записано в index.Git не удастся, если ему необходимо изменить этот файл в индексе например, при слиянии в фиксации; таким образом, в случае, если файл с необработанной версией изменен вверх по потоку, вам придется обрабатывать ситуацию вручную. В этом случае основное внимание уделяется производительности.
Хотя флаг -skip-worktree полезен, когда вы даете указание git не касаться определенного файла из-за того, что файл будет изменен локально, и вы не захотите случайно зафиксировать изменения (т. Е. Файл конфигурации / свойств, сконфигурированный для определенного среда). Skip-worktree имеет приоритет над принятием-неизменным, когда оба установлены.
Глобальный файл .gitignore
Чтобы Git игнорировал определенные файлы во всех репозиториях, вы можете создать глобальный .gitignore со следующей командой в своем терминале или командной строке:
Теперь Git будет использовать это в дополнение к собственному файлу .gitignore каждого репозитория. Правила для этого:
- Если локальный файл .gitignore явно содержит файл, а глобальный .gitignore игнорирует его, локальный .gitignore имеет приоритет (файл будет включен)
- Если репозиторий клонирован на нескольких компьютерах, глобальный .gigignore должен быть загружен на всех машинах или, по крайней мере, включать его, поскольку проигнорированные файлы будут .gitignore на репо, тогда как ПК с глобальным .gitignore не будет обновлять его , Вот почему специфический .gitignore - лучшая идея, чем глобальная, если проект обрабатывается командой
Этот файл является хорошим местом для игнорирования игнорирования .DS_Store платформы, компьютера или пользователя, например OSX .DS_Store , Windows Thumbs.db или Vim *.ext~ и *.ext.swp игнорирует, если вы не хотите сохранять их в репозитории , Поэтому один член команды, работающий над OS X, может добавить все .DS_STORE и _MACOSX (что фактически бесполезно), в то время как другой член команды в Windows может игнорировать все thumbs.bd
Игнорирование ранее закоммиченного файла
Чтобы игнорировать файл, для которого ранее был сделан коммит, необходимо удалить этот файл из репозитория, а затем добавить для него правило в .gitignore . Используйте команду git rm с параметром --cached , чтобы удалить этот файл из репозитория, но оставить его в рабочем каталоге как игнорируемый файл.
Опустите опцию --cached , чтобы удалить файл как из репозитория, так и из локальной файловой системы.
Использование глобального файла gitignore
Файл можно назначить .gitignore как глобальный файл пропуска, который применяется ко всем локальным репозиториям Git. Для этого используйте следующую git config команду:
Глобальный .gitignore файл помогает гарантировать, что Git не фиксирует определенные типы файлов, например скомпилированные двоичные файлы, в любом локальном репозитории. Шаблоны поиска файлов в файле, зависящем от .gitignore репозитория, имеют приоритет над шаблонами в глобальном .gitignore файле.
Скрытие изменений в игнорируем файле
Команда git stash — это мощная функция системы Git, позволяющая временно отложить и отменить локальные изменения, а позже применить их повторно. По умолчанию команда git stash ожидаемо не обрабатывает игнорируемые файлы и создает отложенные изменения только для тех файлов, которые отслеживаются Git. Тем не менее вы можете вызвать команду git stash с параметром --all, чтобы создать отложенные изменения также для игнорируемых и неотслеживаемых файлов.
Изменение файла gitignore
Ниже приведены некоторые примеры распространенных шаблонов поиска файлов.
Как только вы измените .gitignore файл, Git обновляет список файлов, которые он игнорирует.
Windows пользователи должны использовать разделитель пути косой черты в .gitignore файле вместо обратной косой черты. Все пользователи должны добавить конечный путь / при указании папки.
Персональные правила игнорирования в Git
В специальном файле, который находится в папке .git/info/exclude , можно определить персональные шаблоны игнорирования для конкретного репозитория. Этот файл не имеет контроля версий и не распространяется вместе с репозиторием, поэтому он хорошо подходит для указания шаблонов, которые будут полезны только вам. Например, если у вас есть пользовательские настройки для ведения журналов или специальные инструменты разработки, которые создают файлы в рабочем каталоге вашего репозитория, вы можете добавить их в .git/info/exclude , чтобы они случайно не попали в коммит в вашем репозитории.
Игнорирование файла в любом каталоге
Чтобы игнорировать файл foo.txt в любом каталоге, вы должны просто написать его имя:
Если вы хотите игнорировать файл только в части дерева, вы можете указать подкаталоги определенного каталога с ** pattern:
Или вы можете создать файл .gitignore каталоге bar/ . Эквивалентным предыдущему примеру будет создание файла bar/.gitignore с этим содержимым:
Отладка файлов .gitignore
Если шаблоны .gitignore сложны или разбиты на множество файлов .gitignore , бывает непросто отследить, почему игнорируется определенный файл. Используйте команду git check-ignore с параметром -v (или --verbose ), чтобы определить, какой шаблон приводит к игнорированию конкретного файла:
При желании команде git check-ignore можно передать несколько имен файлов, причем сами имена могут даже не соответствовать файлам, существующим в вашем репозитории.
Шаблоны игнорирования в Git
Для сопоставления с именами файлов в .gitignore используются шаблоны подстановки. С помощью различных символов можно создавать собственные шаблоны.
Две звездочки (**) означают, что ваш файл .gitignore находится в каталоге верхнего уровня вашего репозитория, как указано в соглашении. Если в репозитории несколько файлов .gitignore, просто мысленно поменяйте слова «корень репозитория» на «каталог, содержащий файл .gitignore» (и подумайте об объединении этих файлов, чтобы упростить работу для своей команды)*.
Если у вас есть файлы или каталоги, в имени которых содержатся спецсимволы шаблонов, для экранирования этих спецсимволов в .gitignore можно использовать обратную косую черту (\):
Другие формы .gitignore
Файлы .gitignore предназначены для передачи как часть репозитория. Если вы хотите игнорировать определенные файлы без соблюдения правил игнорирования, вот несколько вариантов:
- Отредактируйте файл .git/info/exclude (используя тот же синтаксис, что и .gitignore ). Правила будут глобальными в объеме хранилища;
- Настройте глобальный файл gitignore, который будет применять правила игнорирования ко всем вашим локальным репозиториям:
Кроме того, вы можете игнорировать локальные изменения в отслеживаемых файлах без изменения глобальной конфигурации git с помощью:
- git update-index --skip-worktree [. ] : для небольших локальных изменений
- git update-index --assume-unchanged [. ] : для производства готовые, не изменяющиеся файлы вверх по течению
Игнорировать файлы локально без правил игнорирования
.gitignore игнорирует файлы локально, но предназначен для .gitignore к репозиторию и совместно с другими участниками и пользователями. Вы можете установить глобальный .gitignore , но тогда все ваши репозитории будут делиться этими настройками.
Если вы хотите игнорировать определенные файлы в репозитории локально и не создавать файловую часть какого-либо репозитория, отредактируйте файл .git/info/exclude внутри своего репозитория.
Читайте также: