Как я могу игнорировать каталоги или папки в Git с помощью msysgit в Windows?
Я предполагаю, что OP имеет несколько каталогов кеша, содержимое которых следует игнорировать, но хочет убедиться, что эти каталоги созданы для всех, кто клонирует репозиторий.
@Gareth: поскольку пустые папки не отслеживаются с помощью git, если содержимое игнорируется, папка также будет, не так ли?
Собственно, отсюда и файлы index.html. таким образом папки не будут пустыми.
Я только упомянул, что, поскольку некоторые люди используют скрытые файлы (обычно .gitkeep
), чтобы указать каталог, который следует сохранить.
является ли /
в конце тем, что заставляет его знать, что это каталог, который он должен игнорировать?
Создайте файл с именем .gitignore
в каталоге вашего проекта. Игнорировать каталоги, введя имя каталога в файл (с добавленной косой чертой):
dir_to_ignore/
Дополнительная информация - здесь.
В командной строке Windows вы можете использовать «edit .gitignore» или «notepad .gitignore», чтобы создать правильный файл.
Или вы также можете использовать 'touch .gitignore' из командной строки Windows git bash, и это создаст правильно названный файл, который затем, в свою очередь, можно будет редактировать с помощью блокнота или тому подобного ...
Или просто создайте файл с именем .gitignore. с проводником и отредактируйте его с помощью блокнота (конечная точка будет удалена). Таким образом, вам не нужно использовать командную строку.
@ P.Galbraith Для меня (Windows XP) я получаю сообщение об ошибке при попытке создать файл с именем .gitignore.
: You must type a file name.
в проводнике.
Или вы можете vim .gitignore с терминала. :)
Или, что на удивление не было упомянуто, хотя это самый быстрый способ, просто введите в консоли «echo folder_to_ignore >> .gitignore».
@Godsmith ваше решение сработало! : D спасибо, я пробовал добавить свою папку bower_components/
прямо в gitignore, но она все равно появилась
даже если я добавлю папку в файл .gitignore, git пытается проиндексировать папку. как я могу это пропустить? всякий раз, когда я запускаю команду git add index, это занимает так много времени.
В Windows 7 просто создайте новый текстовый документ с именем .gitignore. и он станет .gitignore
Это рекурсивно игнорирует все подпапки с именем dir_to_ignore
, например, root_dir/dir_to_ignore
и root_dir/some_dir/dir_to_ignore
будут проигнорированы.
Дважды проверьте кодировку файла, которая получается из "echo folder_to_ignore >> .gitignore" на компьютере с Windows. Убедитесь, что git не рассматривает его как двоичный файл.
является ли /
в конце тем, что заставляет его знать, что это каталог, который он должен игнорировать?
Не забудьте запустить git reset folder /
вы также можете использовать эту команду в cmd: copy con .gitignore
, затем введите свой dir_to_ignore
, затем нажмите ctrl + z, а затем Enter! (научился этому, когда был ребенком, а мой отец изучал DOS)
Иногда мне приходится запускать git rm --cached -r .
, чтобы gitignore работал правильно ....
У меня были проблемы с созданием файла в Windows Explorer с .
в начале.
Обходной путь заключался в том, чтобы войти в командную оболочку и создать новый файл с помощью «редактирования».
или просто добавьте дополнительный .
в конце, чтобы проводник перестал думать, что .gitignore
- это расширение. Затем при входе эта конечная точка без расширения просто съедается, и у вас остается .gitignore
TL; DR: попробуйте назвать ее .gitignore.
=> вы получите .gitignore
Чтобы указать Git игнорировать определенные файлы или папки, вы должны создать файл .gitignore
.
Но в Windows Explorer вы должны указать имя файла. Вы просто не можете создать файл только с расширением. Хитрость в том, что создайте пустой текстовый файл, перейдите в командную строку и измените имя файла на .gitignore
:
ren "New Text Document.txt" .gitignore
Теперь откройте файл с помощью вашего любимого текстового редактора и добавьте имена файлов / папок, которые вы хотите игнорировать. Вы также можете использовать такие подстановочные знаки: *.txt
.
Или просто: echo dir_to_ignore /> .gitignore
Или type nul > .gitignore
для создания пустого файла
Или просто назовите файл .gitignore.
, когда расширения файлов не скрыты в проводнике Windows.
По умолчанию Windows Explorer отображает .gitignore
, хотя на самом деле имя файла - .gitignore.txt
.
Git не будет использовать .gitignore.txt
И вы не можете переименовать файл в .gitignore
, потому что Windows Explorer считает, что это файл типа gitignore без имени.
Решение без командной строки:
You can rename a file to ".gitignore.", and it will create ".gitignore"
Это работает? Я всегда просто просил людей открыть блокнот и в диалоговом окне «Сохранить как» ввести имя файла в двойных кавычках, например, ".gitignore"
, и он сохраняет его без автоматического добавления расширения.
Аккуратный. Включение конечной точки действительно работает. Проводник удаляет последнюю точку, в результате чего получается файл с именем ".gitignore". Я думаю, что метод кавычек чище и с меньшей вероятностью преподнесет сюрпризы.
Или в диалоговом окне «Сохранить как» измените тип файла на «Все файлы (.)» - тогда Windows не будет добавлять никаких расширений.
или в git bash просто введите "touch .gitignore" в свою папку
".gitignore."
- Это отличный трюк! У меня тоже всегда были проблемы с .htaccess
...
@Rayjax Я думаю, что bash не попадает в группу "некомандные решения" :)
действительно- все еще полезно некоторым видимо :)
Также в вашем каталоге проектов \.git\info
есть файл исключения, который фактически то же самое, что и .gitignore
(я думаю). Вы можете добавить файлы и каталоги, которые будут игнорироваться.
Мне нравится этот подход, я просто не могу найти там путь, я хочу игнорировать папку в основном репо, как?
Но разве вы не должны оставлять файлы только в .git (управлять содержимым официальными средствами)?
У меня были проблемы с тем, чтобы Git забрал файл .gitignore
в Windows. Хотя файл $GIT_DIR/info/exclude
всегда работает.
Обратной стороной этого подхода, однако, является то, что файлы в каталоге $GIT_DIR
не включаются в регистрацию и, следовательно, не используются совместно.
p.s.
$GIT_DIR
is usually the hidden folder named.git
Да, git в Windows действительно привередлив к .gitignore - локальный файл исключения делает то, что мне нужно. Спасибо!
Похоже, что для игнорирования файлов и каталогов есть два основных способа:
.gitignore
.gitignore
в корень вашего репозитория помимо папки .git
(в Windows убедитесь, что вы увидеть истинное расширение файла, а затем сделайте .gitignore.
(с точкой в конце, чтобы сделать пустое расширение файла))~/.gitignore_global
и запуск git config --global core.excludesfile ~/.gitignore_global
, чтобы добавить ее в конфигурацию Git.Примечание: файлы, отслеживаемые ранее, можно не отслеживать, запустив git rm --cached filename
.
Репозиторий исключить - для локальных файлов, которые не нужно разделять, вы просто добавляете шаблон файла или каталог в файл .git/info/exclude
. Эти правила не выполняются, поэтому они не видят другие пользователи. Дополнительная информация - здесь.
Чтобы сделать исключения в списке игнорируемых файлов, см. этот вопрос.
хорошая работа, указывая на git rm --cached <filename>
. Абсолютно критично для репозиториев, существовавших ДО того, как вы создали .gitignore
.
git rm --cached <filename> исправил проблему с .gitignore :)
Да, git rm --cached filename абсолютно необходим. Это сводило меня с ума, так как git все еще размещал файлы, которые, как я четко заявил, игнорируются (созданный gitignore после первоначального коммита). Большое спасибо!
Решил мою проблему. Git отслеживал папку поставщика в моем репозитории laravel, хотя я добавил папку поставщика в gitignore. Большое спасибо.
моя папка сборок отслеживалась. Он должен был быть добавлен в .gitignore после сборки. В любом случае, команда для отмены отслеживания папки следующая: git rm --cached builds -r (где builds - это папка, которую вы хотите отследить, а -r рекурсивно означает, что все файлы и подпапки не будут отслеживаться)
Я предполагаю, что проблема в том, что ваше рабочее дерево похоже:
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
. Я просто поленился с этим тестовым примером.)
Вероятно, вы захотите зафиксировать .gitignore делать, особенно потому, что вы, вероятно, захотите отслеживать его изменения, и ваша команда тоже (если вы работаете с ней). См. stackoverflow.com/a/767213/123033
@Dave Everitt: Именно поэтому я сказал: «Очевидно, вы тоже хотите зафиксировать .gitignore».
Если вы хотите сохранить папку, а не файлы внутри нее, просто поместите файл «.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
У меня были похожие проблемы. Я работаю над цепочкой инструментов 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»
В Windows есть дополнительная загвоздка с косой чертой. Исключение одного каталога в .gitignore с помощью
dir_to_exclude/
возможно будет работать, но исключая все каталоги с
/
вызывает проблемы, если в вашем каталоге есть имена файлов с пробелами (например, my file.txt
): Git Bash экранирует эти пробелы обратной косой чертой (например, my\ file.txt
), а Git для Windows не различает /
и \
.
Чтобы исключить все каталоги, лучше использовать:
**/
Две звездочки, идущие подряд, означают содержимое каталога.
Вы можете создать файл ".gitignore" с содержимым:
*
!.gitignore
Меня устраивает.
Это лучший ответ, он также дает дополнительные преимущества при развертывании и обслуживании проекта.
Кто такой "простые"?
@PeterMortensen, «Жизнь действительно проста, но мы настаиваем на ее усложнении» - Конфуций
Мне также нужно было добавить /.gitgnore, чтобы также игнорировать сам файл .gitignore
Чтобы игнорировать весь каталог в Git, самый простой способ - включить файл .gitignore в целевой каталог, который просто содержит "*".
Наглядный пример,
Пример системы
/root/
.gitignore
/dirA/
someFile1.txt
someFile2.txt
/dirB/
.gitignore
someFile3.txt
someFile4.txt
Цель
Верхний уровень (/root/.gitignore)
Игнорируемый каталог (/root/dirB/.gitignore)
Git следит за gitignore на каждом этапе файловой системы, поэтому каждый раз, когда вы игнорируете спецификации для применения, вставляйте его, создавая новый gitignore для этого каталога.
dirB / .gitignore тогда просто читается как «*», и все содержимое полностью игнорируется, само и все файлы!
И это так просто :)
Что такое стандартная информация gitignore? Вы можете привести пример? Что вы имеете в виду, когда говорите «файл просто читается как *», это не имеет никакого смысла? Не думаю, что я что-то понял из этого ответа и не нашел его простым.
Файл состоит из одного символа, одного символа «*». Я рассмотрю и расскажу о деталях чуть позже.
Я считаю, что это чище, потому что он не загромождает ваш основной файл .gitignore.
@ skdhfgeq2134 на английском языке, когда вы говорите «X читается как Y», это означает «Y написано на / в X».
Пожалуйста, уточните - я не совсем понимаю, о чем вы говорите! Поделитесь подробностями и я обновлю
На всякий случай, если вам нужно исключить подпапки, вы можете использовать подстановочный знак **
, чтобы исключить любой уровень подкаталога.
**/build/output/Debug/
Где мне добавить это выражение?
Когда все остальное терпит неудачу попробуйте отредактировать файл
/.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» в список файлов и каталогов, которые нужно игнорировать.
Я использую Atom в Windows 10. Работает! Спасибо приятель!
Я попробовал все остальные с моей текущей конфигурацией, и это был мой окончательный ответ.
В Unix:
touch .gitignore
В Windows:
echo > .gitignore
Эти команды, выполняемые в терминале, создадут файл .gitignore
в текущем месте.
Затем просто добавьте информацию в этот файл .gitignore
(например, используя Notepad ++), какие файлы или папки следует игнорировать. Сохраните изменения. Это оно :)
Дополнительная информация: .gitignore
Есть ли особый способ добавления файлов? Как будто я просто напишу файлы, разделенные пробелом, и он будет искать эти файлы во всей корневой папке. Следует ли мне добавить путь к файлам в этот файл gitignore? Где мне создать этот файл .gitignore в корневом каталоге?
В Windows и Mac, если вы хотите игнорировать папку с именем Flower_Data_Folder в текущем каталоге, вы можете сделать:
echo Flower_Data_Folder >> .gitignore
Если это файл с именем data.txt
:
echo data.txt >> .gitignore
Если это путь типа "Data / passwords.txt"
echo "Data/passwords.txt" >> .gitignore.
Просто создайте файл .gitignore
в папке вашего проекта. Затем добавьте в него имя папки, например:
frontend/node_modules
Для некоторых это может быть чрезвычайно очевидно, но я понял это из других ответов.
Создание файла .gitignore в каталоге само по себе ничего не делает. Вы должны открыть .gitignore как текстовый файл и записать файлы / каталоги, которые вы хотите игнорировать, каждый в отдельной строке.
поэтому перейдите в каталог репозитория Git
touch .gitignore
nano .gitignore
а затем напишите имена файлов и / или каталогов, которые вы хотите игнорировать, и их расширения, если это необходимо.
Кроме того, .gitignore - это скрытый файл в некоторых ОС (например, Mac), поэтому для его просмотра вам понадобится ls -a
, а не только ls.
Вы хотите, чтобы папка кеша была полностью исключена из репозитория или только ее содержимое?