Игнорирование каталогов в репозиториях Git в Windows
Вопрос
Как я могу игнорировать каталоги или папки в Git, используя msysgit в Windows?
Решение
Создайте файл с именем .gitignore
в каталоге вашего проекта.Игнорируйте каталоги, введя имя каталога в файл (с добавлением косой черты).:
dir_to_ignore/
Подробная информация здесь.
Другие советы
По умолчанию проводник Windows будет отображать .gitignore
когда на самом деле имя файла равно .gitignore.txt
Git не будет использовать .gitignore.txt
И вы не можете переименовать файл в .gitignore
потому что проводник считает, что это файл типа gitignore без имени.
Решение без командной строки:
You can rename a file to ".гитиньоре". and it will create ".гитиньоре"
Похоже, что для игнорирования файлов и каталогов есть два основных способа:
.гитиньоре
- Размещение
.gitignore
файл в корень вашего репозитория, кроме того.git
папка (в Windows убедитесь, что вы смотрите истинное расширение файла а затем сделайте.gitignore.
(с точкой в конце, чтобы сделать расширение файла пустым) ) - Создание глобальной конфигурации
~/.gitignore_global
и бегущийgit config --global core.excludesfile ~/.gitignore_global
чтобы добавить это в вашу конфигурацию git
примечание:файлы, отслеженные ранее, могут быть отменены путем запуска
git rm --cached filename
- Размещение
Исключение репо - Для локальных файлов, к которым не нужно предоставлять общий доступ, вы просто добавляете шаблон файла или каталог к файлу
.git/info/exclude
.Правила тезисов не соблюдены, так что не видны другим пользователям Подробная информация здесь
[обновлено] Чтобы создать исключения в списке игнорируемых файлов, см. этот вопрос.
У меня возникли некоторые проблемы при создании файла в проводнике Windows с помощью .в самом начале.
обходной путь состоял в том, чтобы зайти в командную оболочку и создать новый файл с помощью "редактировать".
чтобы дать указание GIT игнорировать определенные файлы или папки, вы должны создать .gitignore
файл.
но в проводнике Windows вы должны указать имя файла, вы просто не можете создать файл только с расширением, хитрость в том, что создайте пустой текстовый файл и перейдите в командную строку и измените имя файла на .gitignore
ren "New Text Document.txt" .gitignore
теперь откройте файл с помощью вашего любимого текстового редактора и добавьте имена файлов / папок, которые вы хотите игнорировать.вы также можете использовать подстановочные знаки, подобные этому *.txt
надеюсь, это ответит на ваш вопрос
Если вы хотите сохранить папку, а не файлы внутри нее, просто поместите файл ".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
В Windows есть дополнительная защелка с косыми чертами.Исключая один каталог в .гитиньоре с
dir_to_exclude ( исключить )/
возможно, сработает, но исключая все каталоги с
/
вызывает проблемы, когда у вас есть имена файлов с пробелами (например my file.txt
) в вашем каталоге:Git bash экранирует эти пробелы обратной косой чертой (например my\ file.txt
) и Git для Windows не проводит различия между /
и \
.
Чтобы исключить все каталоги, лучше используйте:
**/
Две последовательные звездочки обозначают содержимое каталога.
Также в вашем \.git\info
каталог проектов существует файл исключения, который фактически является тем же самым, что и .gitignore
(Я думаю).Вы можете добавить файлы и каталоги, которые нужно игнорировать в этом.
Чтобы игнорировать весь каталог в git, самый простой способ - включить файл .gitignore в целевой каталог, который просто содержит "*"
Наглядный пример,
Пример Системы
/root/
.gitignore
/dirA/
someFile1.txt
someFile2.txt
/dirB/
.gitignore
someFile3.txt
someFile4.txt
Цель
- игнорируйте содержимое /dirB/
Верхний уровень .gitignore (/root/.gitignore)
- Вот где находится ваша стандартная информация о gitignore
Игнорируемый каталог .gitignore (/root/dirB.gitignore)
- Этот файл просто читается как '*', и каталог полностью игнорируется, сам по себе и все файлы!
и это так просто :)
На всякий случай, если вам нужно исключить вложенные папки, вы можете использовать **
подстановочный знак для исключения любого уровня подкаталога.
**/build/output/Debug/
У меня возникли некоторые проблемы с получением git файла .gitignore в Windows.Однако файл $GIT_DIR /info /exclude, похоже, всегда работает.Недостатком этого подхода, однако, является то, что файлы в каталоге $GIT_DIR не включены в возврат и, следовательно, не являются общими.
( p.s.$GIT_DIR обычно является скрытой папкой с именем .git )
Вы можете создать файл ".gitignore" с содержимым:
*
!.gitignore
Это работает для меня и просто.
Когда все остальное терпит неудачу попробуйте отредактировать файл
/.git/информация/исключить
и добавьте нужные каталоги в конец файла, вот так:
# 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/
Я добавил папки "активы" и "скомпилированные" в список файлов и каталогов, которые следует игнорировать.
Я предполагаю, что проблема в том, что ваше рабочее дерево похоже:
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
кроме того, я просто поленился с этим тестовым примером.)
В Unix:
touch .gitignore
В Windows:
echo > .gitignore
Эти команды, выполняемые в терминале, создадут .gitignore
файл в текущем расположении.
Затем просто добавьте информацию к этому .gitignore
файл (например, с помощью Notepad ++), какие файлы или папки следует игнорировать.Сохраните внесенные изменения.Вот и все :)
Дополнительная информация: https://www.atlassian.com/git/tutorials/saving-changes/gitignore
В Windows и Mac, если вы хотите игнорировать папку с именем Flower_Data_Folder в текущем каталоге, вы можете сделать:
папка echo Flower_Data_Folder >> .gitignore
Если это файл с именем data.txt
эхо data.txt >> .gitignore
если это путь, подобный "Data/passwords.txt"
эхо "Data/passwords.txt " >> .gitignore.
У меня были похожие проблемы, я работаю над цепочкой инструментов Windows с общим репозиторием с ребятами из Linux, они с радостью создают файлы с одинаковыми именами [за исключением регистра] в заданной папке.
Эффект заключается в том, что я могу клонировать репозиторий и сразу же получить десятки "измененных" файлов, которые, если бы я зарегистрировался, создали бы хаос.
У меня установлена Windows с учетом регистра и git, чтобы не игнорировать регистр, но она по-прежнему терпит неудачу (по-видимому, в вызовах win32 api).
Если я gitignore файлы, то я должен помнить, что не следует отслеживать файл .gitignore .
Но я нашел здесь хороший ответ http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html
Крис