Примените .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
-
После этого вам нужно добавить его в свой репозиторий git, как и любой другой файл, только он должен находиться в корне репозитория.
-
Затем в вашем терминале вы должны написать следующую строку:
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.
меры
- Создайте новый файл в требуемом (существующем) проекте и назовите его .gitignore. Вы получите подсказку для шаблонов .gitignore, как только вы назовете файл .gitignore. Либо используйте эти шаблоны, либо используйте gitignore.io для создания содержимого файла gitignore.
- Зафиксируйте изменения.
- Теперь клонируйте этот репозиторий.
Повеселись!
Ответ 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