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

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

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

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

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

Ответ 1

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

Прежде всего, подтвердите все ожидающие изменения.

Затем выполните эту команду:

git rm -r --cached .

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

git add .

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

git commit -m ".gitignore is now working"

Ответ 2

  • Создайте файл .gitignore, поэтому для этого просто создайте пустой файл .txt.

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

    rename git.txt .gitignore

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

`` `

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 не работает, вы должны написать маршрут отверстия файлов, которые вы хотите добавить.

Ответ 3

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

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

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

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

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

Ответ 4

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

Во-первых, чтобы проверить, какие файлы вы действительно отслеживаете, вы можете запустить:

git ls-tree --name-only --full-tree -r HEAD

Допустим, вы нашли ненужные файлы в каталоге, подобном cache/, поэтому безопаснее ориентироваться на этот каталог, а не на все ваши файлы.

Так что вместо:

git rm -r --cached .

Целевой файл или каталог безопаснее:

git rm -r --cached cache/

Затем добавьте все изменения,

git add .

и совершить...

git commit -m ".gitignore is now working"

Ссылка: https://amyetheredge.com/code/13.html

Ответ 5

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

(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.

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

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

Ответ 6

Я думаю, что это простой способ добавить файл .gitignore в существующий репозиторий.

Условие:

Вам нужен браузер для доступа к вашей учетной записи на github.

меры

  1. Создайте новый файл в требуемом (существующем) проекте и назовите его .gitignore. Вы получите подсказку для шаблонов .gitignore, как только вы назовете файл .gitignore. Либо используйте эти шаблоны, либо используйте gitignore.io для создания содержимого файла gitignore.
  2. Зафиксируйте изменения.
  3. Теперь клонируйте этот репозиторий.

Повеселись!

Ответ 7

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

git clean -h

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

git clean -xn

Чтобы удалить gitingnored garbage

git clean -xdf

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

Тогда

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