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

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

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

Было предложено использовать: git rm --cached и вручную отследить их, но это git rm --cached меня навсегда пройти через них один за другим.

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

Этот ответ решил мою проблему:

Зафиксируйте все ожидающие изменения, затем выполните следующую команду:

 git rm -r --cached . 

Это удаляет все из индекса, а затем просто запускает:

 git add . 

Зафиксируйте это:

 git commit -m ".gitignore is now working" 
  1. Создайте файл .gitignore, поэтому для этого просто создайте пустой файл .txt.

  2. Затем вы должны изменить свое имя, git.txt следующую строку на cmd (где git.txt – это имя файла, который вы только что создали):

    rename git.txt .gitignore

  3. Затем вы можете открыть файл и записать все необработанные файлы, которые вы хотите игнорировать навсегда. Например, мой выглядит следующим образом:

“ `

 OS junk files [Tt]humbs.db *.DS_Store #Visual Studio files *.[Oo]bj *.user *.aps *.pch *.vspscc *.vssscc *_i.c *_p.c *.ncb *.suo *.tlb *.tlh *.bak *.[Cc]ache *.ilk *.log *.lib *.sbr *.sdf *.pyc *.xml ipch/ obj/ [Bb]in [Dd]ebug*/ [Rr]elease*/ Ankh.NoLoad #Tooling _ReSharper*/ *.resharper [Tt]est[Rr]esult* #Project files [Bb]uild/ #Subversion files .svn # Office Temp Files ~$* 

Существует целая коллекция полезных файлов .gitignore от GitHub

  1. После этого вам нужно добавить его в свой репозиторий git точно так же, как и любой другой файл, только он должен находиться в корне репозитория.

  2. Затем в вашем терминале вы должны написать следующую строку:

    git config –global core.excludesfile ~ / .gitignore_global

Из официального документа:

Вы также можете создать глобальный файл .gitignore, который представляет собой список правил для игнорирования файлов в каждом репозитории Git на вашем компьютере. Например, вы можете создать файл в ~ / .gitignore_global и добавить к нему некоторые правила.

Открытый терминал. Выполните следующую команду в своем терминале: git config –global core.excludesfile ~ / .gitignore_global

Если репозиторий уже существует, вам необходимо выполнить следующие команды:

 git rm -r --cached . git add . git commit -m ".gitignore is now working" 

Если шаг 2 не работает, вы должны написать маршрут отверстия файлов, которые вы хотите добавить.

Как указано здесь, вы можете обновить индекс:

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

Делая это, файлы не будут отображаться в git status git diff или git diff .

Чтобы снова начать отслеживание файлов, вы можете запустить:

 git update-index --no-assume-unchanged /path/to/file 

Вот один из способов «отследить» любые файлы, которые в противном случае были бы проигнорированы в текущем наборе шаблонов исключений:

 (GIT_INDEX_FILE=some-non-existent-file \ git ls-files --exclude-standard --others --directory --ignored -z) | xargs -0 git rm --cached -r --ignore-unmatch -- 

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

Используемый здесь трюк заключается в предоставлении несуществующего файла индекса в git ls-файлах, чтобы он думал, что нет отслеживаемых файлов. Код оболочки выше запрашивает все файлы, которые будут игнорироваться, если индекс был пустым, а затем удаляет их из фактического индекса с помощью git rm.

После того, как файлы были «untracked», используйте git status, чтобы убедиться, что ничего важного не было удалено (если это так настроить ваши шаблоны исключений и использовать git reset – путь для восстановления удаленной записи индекса). Затем сделайте новый коммит, который не будет содержать «crud».

«Crud» все равно будет в любых старых записях. Вы можете использовать git filter-branch для создания чистых версий старых коммитов, если вам действительно нужна чистая история (nb, используя git filter-branch, будет «переписывать историю», поэтому ее не следует воспринимать легко, если у вас есть какие-то коллаборационисты, которые вытащили любой из ваших исторических моментов после «crud» был впервые представлен).

Использовать git clean
Получите справку об этом запуске

 git clean -h 

Если вы хотите увидеть, что произойдет первым, обязательно передайте ключ -n для сухого хода:

 git clean -xn 

Чтобы удалить gitingnored мусор

 git clean -xdf 

Осторожно: вы можете игнорировать локальные файлы конфигурации, такие как database.yml, которые также будут удалены. Используйте на свой риск.

затем

 git add . git commit -m ".gitignore is now working" git push