Игнорирование каталогов в репозиториях Git на Windows


1106

Как я могу игнорировать каталоги или папки в Git, используя msysgit в Windows?


Вы хотите, чтобы папка кеша была полностью исключена из хранилища, или только ее содержимое?
— Гарет

1
Я предполагаю, что OP имеет несколько каталогов кеша, содержимое которых следует игнорировать, но хочет убедиться, что эти каталоги созданы для любого, кто клонирует репозиторий.
— Марк Лонгэйр

@Gareth: поскольку пустые папки не отслеживаются с помощью git, если содержимое игнорируется, папка тоже будет, не так ли?
— Eckes

3
Я только упомянул это, потому что некоторые люди используют скрытые файлы (обычно .gitkeep), чтобы указать каталог, который следует сохранить
— Гарет

2
это /в конце концов , что делает его знать его каталог он должен игнорировать?
— Чарли Паркер

Ответы:


1595

Создайте файл с именем .gitignoreв каталоге вашего проекта. Проигнорируйте каталоги, введя имя каталога в файл (с добавленной косой чертой):

dir_to_ignore/

Более подробная информация здесь .


130
В командной строке Windows вы можете использовать «edit .gitignore» или «notepad .gitignore» для создания правильного файла.
— Джои Грин

44
Или вы также можете использовать «touch .gitignore» из командной строки Windows git bash, и это создаст файл с правильно названным именем, который затем можно будет редактировать с помощью блокнота или подобного ...
— SGB

39
Или просто создайте файл с именем .gitignore. с помощью проводника и отредактируйте его с помощью блокнота (конечная точка будет удалена). Таким образом, вам не нужно использовать командную строку.
— П. Гэлбрейт,

6
Или вы можете vim .gitignore из терминала. :)
— MollyCat

34
Или, что на удивление не упоминалось, хотя это и самый быстрый способ, просто введите «echo folder_to_ignore >> .gitignore» в консоли.
— Кузнец

205

По умолчанию проводник Windows будет отображаться, .gitignoreкогда на самом деле имя файла .gitignore.txt.

Git не будет использовать .gitignore.txt

И вы не можете переименовать файл .gitignore, потому что Windows Explorer считает, что это файл типа gitignore без имени.

Решение без командной строки:

Вы можете переименовать файл в «.gitignore». , и это создаст ".gitignore"

46
Это работает? Я всегда просто говорил людям открыть блокнот и в диалоговом окне «Сохранить как» введите имя файла, заключенное в двойные кавычки, например, ".gitignore"и оно сохранит его без автоматического добавления расширения.
— Arrowmaster

9
Ухоженная. В том числе завершающий период работает. Explorer удаляет последний период, в результате чего создается файл с именем «.gitignore». Я думаю, что метод цитат является более чистым и менее вероятным, чтобы создавать сюрпризы.
— Трийнко

4
Или в диалоговом окне «Сохранить как» измените тип файла на «Все файлы ( . )» - тогда Windows не добавит расширение.
— OsakaWebbie

5
или в git bash просто введите «touch .gitignore» в вашей папке
— Rayjax

3
".gitignore."- Это отличный трюк! У меня всегда были проблемы с .htaccess...
— Obmerk Kronen

105

Кажется, что для игнорирования файлов и каталогов существует два основных способа:

  1. .gitignore

    • Поместите .gitignoreфайл в корень вашего хранилища, кроме .gitпапки (в Windows убедитесь, что вы видите истинное расширение файла, а затем сделайте .gitignore.(с точкой в ​​конце, чтобы создать пустое расширение файла))
    • Создание глобальной конфигурации ~/.gitignore_globalи запуск, git config --global core.excludesfile ~/.gitignore_globalчтобы добавить это в вашу конфигурацию Git

    Примечание: файлы, отслеженные ранее, можно не отслеживать, запустив git rm --cached filename

  2. Исключение из репозитория - для локальных файлов, которые не требуют совместного использования, вы просто добавляете в файл шаблон файла или каталог .git/info/exclude. Эти правила не зафиксированы, поэтому другие пользователи их не видят . Более подробная информация здесь .

Чтобы сделать исключения в списке игнорируемых файлов, посмотрите этот вопрос .


36
хорошая работа, указывая на git rm --cached <filename>. Абсолютно критично для репо, которые существовали ДО того, как вы создали.gitignore
— MaurerPower

2
git rm --cached <filename> устранил проблему, с которой я столкнулся .gitignore :)
— JeremyFelix

1
Да, git rm - кэшированное имя файла абсолютно необходимо. Это сводило меня с ума, так как git все еще создавал файлы, которые я четко указывал как игнорируемые (создавал gitignore после первоначального коммита). Большое спасибо!
— Потайто

1
Решил мою проблему. Git отслеживал папку продавца в моем репозитории laravel, хотя я добавил папку продавца в gitignore. Большое спасибо.
— Джаянт

44

У меня были некоторые проблемы , создавая файл в проводнике Windows с микросхемой .в самом начале.

Обходной путь должен был войти в командную оболочку и создать новый файл, используя «edit».


2
или просто добавьте дополнительный .в конце, чтобы исследователь перестал думать, .gitignoreчто это расширение. Затем при входе эта конечная точка без расширения просто съедается, и вы .gitignore.gitignore..gitignore
— остаетесь

43

Чтобы указать Git игнорировать определенные файлы или папки, вы должны создать .gitignoreфайл.

Но в Windows Explorer вы должны указать имя файла. Вы просто не можете создать файл только с расширением. Хитрость в том, что создайте пустой текстовый файл и перейдите в командную строку и измените имя файла на .gitignore:

ren "New Text Document.txt" .gitignore

Теперь откройте файл в вашем любимом текстовом редакторе и добавьте имена файлов / папок, которые вы хотите игнорировать. Вы можете также использовать групповые символы , как это: *.txt.


15
Или просто: echo dir_to_ignore /> .gitignore
— Оливер

2
Или type nul > .gitignoreсоздать пустой файл
— Кастро Рой

Или просто вызовите файл, .gitignore.когда расширения файлов не скрыты в проводнике Windows
— Vairis

22

Если вы хотите сохранить папку, а не файлы внутри нее, просто поместите файл «.gitignore» в папку с «*» в качестве содержимого. Этот файл заставит Git игнорировать весь контент из хранилища. Но .gitignoreбудет включен в ваш репозиторий.

$ git add path/to/folder/.gitignore

Если вы добавите пустую папку, вы получите это сообщение (.gitignore - скрытый файл)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

Итак, используйте «-f» для принудительного добавления:

$ git add path/to/folder/.gitignore -f

19

В Windows есть дополнительный улов с косой чертой. Исключая один каталог в .gitignore с

dir_to_exclude /

возможно будет работать, но исключая все каталоги с

/

вызывает проблемы, когда my file.txtв вашем каталоге есть имена файлов с пробелами (например ): Git Bash экранирует эти пробелы обратной косой чертой (как my\ file.txt), а Git для Windows не различает /и \.

Чтобы исключить все каталоги, лучше использовать:

** /

Две последовательные звездочки обозначают содержимое каталога.


15

Кроме того, в вашем \.git\infoкаталоге проектов есть исключающий файл, который фактически совпадает с .gitignore(я думаю). Вы можете добавить файлы и каталоги, чтобы игнорировать в этом.


Мне нравится этот подход, я просто не могу найти путь к нему, я хочу игнорировать папку в основном репо, как?
— Шимми Вейцхандлер

Но разве вы не должны оставлять файлы в .git в покое (манипулировать контентом с помощью официальных средств)?
— Питер Мортенсен

13

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

**/build/output/Debug/

12

Чтобы игнорировать весь каталог в Git, самый простой способ - включить файл .gitignore в целевой каталог, который просто содержит «*».

Наглядный пример,

Пример системы

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Цель

  • игнорировать содержимое / dirB /

Верхний уровень .gitignore (/root/.gitignore)

  • Это где ваша стандартная информация Gitignore идет

Игнорируемый каталог .gitignore (/root/dirB.gitignore)

  • Этот файл просто читается как '*', и каталог полностью игнорируется, сам и все файлы!

И это так просто :)


10

Если ничего не помогает, попробуйте отредактировать файл

/.git/info/exclude

и добавляем нужные каталоги в конец файла, например так:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

Я добавил папки "assets" и "compiled" в список файлов и каталогов, чтобы их игнорировать.


1
Я использую Atom на Windows 10. Это работает! Спасибо чувак!
— Putu De

Я попробовал все остальные с моей текущей конфигурацией, и это был мой окончательный окончательный ответ.
— Xedret


9

В Unix:

touch .gitignore

В Windows:

echo > .gitignore

Эти команды, выполняемые в терминале, создадут .gitignoreфайл в текущем местоположении.

Затем просто добавьте в этот .gitignoreфайл информацию (например, с помощью Notepad ++), какие файлы или папки следует игнорировать. Сохраните ваши изменения. Это оно :)

Дополнительная информация: .gitignore


8

У меня были некоторые проблемы с получением Git для загрузки .gitignoreфайла в Windows. $GIT_DIR/info/excludeФайл всегда , кажется, работает , хотя.

Недостатком этого подхода, однако, является то, что файлы в $GIT_DIRкаталоге не включены в регистрацию и, следовательно, не являются общими.

ps $GIT_DIR- это обычно скрытая папка с именем.git


Да, git на windows очень требователен к .gitignore - локальный файл исключения делает то, что мне нужно. Спасибо!
— Андерсоп

6

Я предполагаю, что проблема в том, что ваше рабочее дерево выглядит так:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... с .gitignoreвами описать. Это даст вам git statusвывод, как:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... если эти index.htmlфайлы еще не были добавлены в хранилище. (Git видит, что в каталогах кеша есть незарегистрированные файлы, но он только сообщает о каталогах.) Чтобы это исправить, убедитесь, что вы добавили и зафиксировали index.htmlфайлы:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... и ваша git statusволя будет выглядеть так:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(Очевидно, вы тоже хотите совершить коммит .gitignore. Я просто ленился с этим тестовым примером.)


1
Вы, вероятно, действительно хотите зафиксировать .gitignore, тем более что вы, вероятно, захотите отслеживать изменения в нем, как и ваша команда (если вы работаете с ней). См. Stackoverflow.com/a/767213/123033
— Дейв Эверитт

2
@Dave Everitt: Именно поэтому я сказал: «Очевидно, вы тоже хотите совершить .gitignore».
— Марк Лонгэйр

6

В Windows и Mac, если вы хотите игнорировать папку с именем Flower_Data_Folder в текущем каталоге, вы можете сделать:

echo Flower_Data_Folder >> .gitignore

Если это файл с именем data.txt:

echo data.txt >> .gitignore

Если это путь типа «Data / passwords.txt»

echo "Data/passwords.txt" >> .gitignore. 

2

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

В результате я могу клонировать репозиторий и сразу получить десятки «измененных» файлов, которые, если я вернусь, создадут хаос.

У меня Windows установлена ​​с учетом регистра и Git не игнорирует регистр, но все равно не работает (очевидно, в вызовах Win32 API).

Если я gitignore файлы, то я должен помнить, чтобы не отслеживать файл .gitignore.

Но я нашел хороший ответ здесь:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html


Похоже, что ссылка не работает (сначала она перенаправляет на версию «https»): «Сбой безопасного соединения. Произошла ошибка при подключении к archive.robwilkerson.org. PR_END_OF_FILE_ERROR»
— Питер Мортенсен,

0

Просто создайте .gitignoreфайл в папке вашего проекта. Затем добавьте имя папки в нем, например:

frontend/node_modules
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.