Игнорирование каталогов в репозиториях 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"
brainwavedave
источник
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. Эти правила не зафиксированы, поэтому другие пользователи их не видят . Более подробная информация здесь .

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

Vairis
источник
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.

Mahes
источник
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
sensorario
источник
19

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

dir_to_exclude /

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

/

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

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

** /

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

wortwart
источник
15

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

Si3
источник
Мне нравится этот подход, я просто не могу найти путь к нему, я хочу игнорировать папку в основном репо, как?
Шимми Вейцхандлер
Но разве вы не должны оставлять файлы в .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)

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

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

J-Dizzle
источник
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" в список файлов и каталогов, чтобы их игнорировать.

Xedret
источник
1
Я использую Atom на Windows 10. Это работает! Спасибо чувак!
Putu De
Я попробовал все остальные с моей текущей конфигурацией, и это был мой окончательный окончательный ответ.
Xedret
10

Вы можете создать файл .gitignore с содержимым:

*
!.gitignore

Меня устраивает.

Клаудионор Оливейра
источник
2
Это лучший ответ, он также приносит дополнительные преимущества при развертывании и обслуживании проекта.
Нитин ...
Кто такой "простой" ?
Питер Мортенсен
9

В Unix:

touch .gitignore

В Windows:

echo > .gitignore

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

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

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

fvolodimir
источник
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
ДИНА ТАКЛИТ
источник