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

646

Как игнорировать каталоги или папки в Git с помощью msysgit в Windows?

  • 0
    Вы хотите, чтобы папка кеша была полностью исключена из хранилища, или только ее содержимое?
  • 0
    Я предполагаю, что OP имеет несколько каталогов кеша, содержимое которых следует игнорировать, но хочет убедиться, что эти каталоги созданы для всех, кто клонирует репозиторий.
Показать ещё 4 комментария
Теги:
gitignore
git-bash
msysgit

13 ответов

947
Лучший ответ

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

dir_to_ignore/

Подробнее здесь.

  • 118
    В командной строке Windows вы можете использовать «edit .gitignore» или «notepad .gitignore» для создания правильного файла.
  • 42
    Или вы также можете использовать «touch .gitignore» из командной строки Windows git bash, и это создаст файл с правильно названным именем, который затем можно будет редактировать с помощью блокнота или тому подобного ...
Показать ещё 13 комментариев
143

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

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

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

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

You can rename a file to ".gitignore." and it will create ".gitignore"
  • 41
    Это работает? Я всегда просто говорил людям открыть блокнот и в диалоговом окне «Сохранить как» введите имя файла, заключенное в двойные кавычки, например, ".gitignore" и оно сохраняет его без автоматического добавления расширения.
  • 8
    Ухоженная. В том числе завершающий период работает. Explorer удаляет последний период, в результате чего создается файл с именем «.gitignore». Я думаю, что метод цитат является более чистым и менее вероятным, чтобы создавать сюрпризы.
Показать ещё 4 комментария
71

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

  • .gitignore

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

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

  • Repo exclude. Для локальных файлов, которые не должны использоваться совместно, вы просто добавляете шаблон файла или каталог в файл .git/info/exclude. Правила тезисов не выполняются, поэтому не видят другие пользователи больше здесь

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

  • 28
    хорошая работа, указывая на git rm --cached <filename> . Абсолютно критично для репозиториев, которые существовали ДО того, как вы создали .gitignore
  • 2
    git rm --cached <filename> устранил проблему, с которой я столкнулся .gitignore :)
Показать ещё 2 комментария
37

У меня возникли проблемы с созданием файла в проводнике Windows с помощью. в начале.

Обходной путь состоял в том, чтобы перейти в командную панель и создать новый файл с помощью "edit"

  • 1
    или просто добавь доп . в конце так исследователь перестает думать .gitignore является расширением. Затем при входе эта конечная точка без расширения просто съедается, и у вас остается .gitignore TL; DR: попробуйте назвать его .gitignore. => вы в конечном итоге с .gitignore
33

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

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

ren "New Text Document.txt" .gitignore

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

надеюсь, что он ответит на ваш вопрос.

  • 13
    Или просто: echo dir_to_ignore /> .gitignore
  • 0
    @ Оливер: спасибо, это замечательно.
Показать ещё 2 комментария
11

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

dir_to_exclude/

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

/

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

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

**/

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

11

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

  • 0
    Мне нравится этот подход, я просто не могу найти путь к нему, я хочу игнорировать папку в основном репо, как?
6

Если вы хотите сохранить папку и файлы внутри нее, просто поместите файл ".gitignore" с "*" в качестве содержимого. Этот файл игнорирует все содержимое из репозитория. Но .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
6

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

(p.s. $GIT_DIR обычно является скрытой папкой с именем .git)

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

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

*
!.gitignore

Это работает для меня и просто.

  • 2
    Это лучший ответ, он также приносит дополнительные преимущества при развертывании и обслуживании проекта.
4

Я предполагаю, что проблема в том, что ваше рабочее дерево похоже:

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».
Показать ещё 1 комментарий
3

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

Иллюстративный пример,

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

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

Цель

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

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

  • Здесь размещена ваша стандартная информация о gitignore

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

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

и это просто:)

1

У меня были подобные проблемы, я работаю над цепочкой инструментов Windows с общим репо с ребятами из linux, они быстро создают файлы с тем же именем [except for case] в данной папке.

Эффект заключается в том, что я могу клонировать репо и сразу же иметь десятки "модифицированных" файлов, которые, если я проверил, создадут хаос.

У меня есть окна, чувствительные к регистру, и git, чтобы не игнорировать регистр, но он все равно не работает (по-видимому, в вызовах win32 api).

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

Но я нашел хороший ответ здесь http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html

Крис

Ещё вопросы

Сообщество Overcoder
Наверх
Меню