Добавить вновь созданную конкретную папку в .gitignore в Git

88

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

Я не могу заставить Git игнорировать эту папку, когда я запускаю git status.

On branch master
Your branch is ahead of 'origin/master' by 1 commit.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file: app_public/views/pages/privacy.php
    new file: app_public/views/pages/terms.php
    new file: public_html/stats/ctry_usage_200908.png
    new file: public_html/stats/daily_usage_200908.png
    new file: public_html/stats/dns_cache.db
    new file: public_html/stats/hourly_usage_200908.png
    new file: public_html/stats/index.html
    new file: public_html/stats/usage.png
    new file: public_html/stats/usage_200908.html
    new file: public_html/stats/webalizer.current
    new file: public_html/stats/webalizer.hist

Changed but not updated:
    modified: .gitignore

Я добавил в свой .gitignore несколько разных строк, но он все еще пытается их добавить:

public_html/stats
public_html/stats/**
public_html/stats/**/*
public_html/stats/*
Ли
источник

Ответы:

98

Попробовать /public_html/stats/*?

Но так как файлы в git statusсообщили , как быть поручены , что означает , что вы уже добавили их вручную. В таком случае, конечно, уже поздно игнорировать. Вы можете git rm --cacheих (IIRC).

Михаил Крелин - хакер
источник
16
Подождите! У вас есть «файлы, которые нужно зафиксировать» - это означает, что вы их уже git addдобавили.
Михаил Крелин - хакер,
93

Для этого есть два случая

Случай 1: файл уже добавлен в репозиторий git.

Случай 2: вновь созданный файл и его статус по-прежнему отображается как неотслеживаемый при использовании

git status

Если у вас случай 1:

ШАГ 1: Затем запустите

git rm --cached filename 

чтобы удалить его из кеша репозитория git

если это каталог, используйте

git rm -r --cached  directory_name

ШАГ 2: Если случай 1 завершен, создайте новый файл с именем .gitignoreв вашем репозитории git

ШАГ 3: Используйте следующее, чтобы указать git игнорировать / считать, что файл не изменился

git update-index --assume-unchanged path/to/file.txt

ШАГ 4: Теперь проверьте статус с помощью git status open .gitignoreв вашем редакторе nano, vim, geany и т. Д. Любой, добавьте путь к файлу / папке, которые нужно игнорировать. Если это папка, пользователь folder_name/*должен игнорировать весь файл.

Если вы все еще не поняли, прочтите статью git ignore file link.

Кшитиз
источник
3
Я получаю, когда fatal: Unable to mark file .idea/jsLibraryMappings.xmlделаюupdate-index
Олег Зиняк 02
@OlehZiniak, вы выяснили, что делать при возникновении fatal: Unable to mark fileошибки. Пожалуйста помоги.
чанчал пардеши
разрешение и право собственности на файл, который вы не можете отметить. на каком этапе отображается ошибка?
Kshitiz
16

Из «git help ignore» мы узнаем:

Если шаблон заканчивается косой чертой, он удаляется для целей следующего описания, но он обнаружит совпадение только с каталогом. Другими словами, foo / будет соответствовать каталогу foo и путям под ним, но не будет соответствовать обычному файлу или символической ссылке foo (это согласуется с тем, как pathspec в целом работает в git).

Поэтому вам нужно

public_html / stats /

Каяко
источник
1
Это просто означает, что «public_html / stats /» будет соответствовать только каталогу, но не файлу, а «public_html / stats» будет соответствовать как каталогу, так и файлу с таким именем, так что проблема не в этом. Тем не менее, это хорошая идея.
jmanning2k
1
На странице руководства сказано, что foo / будет соответствовать каталогу foo и путям под ним. OP хочет игнорировать папку и ее содержимое. Помимо других проблем с git add, вот как это делается.
kajaco
6

Это /public_html/stats/*.

$ ~/myrepo> ls public_html/stats/
bar baz foo
$ ~/myrepo> cat .gitignore 
public_html/stats/*
$ ~/myrepo> git status
# On branch master
#
# Initial commit
#
# 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)
$ ~/myrepo>
Август Лиллеас
источник
2

Я невероятно ленив. Я просто провел поиск в надежде найти ярлык для решения этой проблемы, но не получил ответа, поэтому выбрал это.

~ / bin / IGNORE_ALL

#!/bin/bash
# Usage: IGNORE_ALL <commit message>                                                                                                                             
git status --porcelain | grep '^??' | cut -f2 -d' ' >> .gitignore              
git commit -m "$*" .gitignore 

Например: IGNORE_ALL игнорирует добавленную статистику

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

Майкл
источник