У мене в Github розміщено сховище git. Після створення багатьох файлів я розумію, що мені потрібно створити .gitignore
та виключити .exe
,.obj
файли.
Однак чи автоматично буде видалено ці довірені файли із сховища? Чи є якийсь спосіб змусити це?
У мене в Github розміщено сховище git. Після створення багатьох файлів я розумію, що мені потрібно створити .gitignore
та виключити .exe
,.obj
файли.
Однак чи автоматично буде видалено ці довірені файли із сховища? Чи є якийсь спосіб змусити це?
Відповіді:
Ні, ви не можете примушувати видаляти файл, який вже зроблено в репо-файлі, лише тому, що він доданий до .gitignore
Ви повинні git rm --cached
видалити файли, які ви не бажаєте в репо. (- кешовано, оскільки ви, мабуть, хочете зберегти локальну копію, але видалити з репо.
git rm --cached /\*.exe
(Зверніть увагу, що зірочка * цитується з оболонки - це дозволяє git, а не оболонку розширювати назви файлів і підкаталогів)
git rm /\*.exe
це зробите, ви видалите всі exe's у вашій репо
git
.
git pull
, побачать, що їх файли видалено.
Однак чи автоматично буде видалено ці довірені файли із сховища?
Ні. Навіть за наявності існуючих .gitignore
ви можете встановити "ігноровані" файли з -f
прапорцем (сила). Якщо вони вже зафіксовані, вони не видаляються автоматично.
git rm --cached path/to/ignored.exe
Мені довелося видалити .idea та цільові папки, і після прочитання всіх коментарів це працювало для мене:
git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'
а потім підштовхнути до майстра
.idea
була моя проблема, я гадаю, це теж було твоє:)
Однак чи автоматично буде видалено ці довірені файли із сховища?
Немає.
Найкращим рецептом для цього є використання, git filter-branch
як написано тут:
Сторінка man для git-filter-branch містить вичерпні приклади.
Примітка Ви будете переписувати історію. Якщо ви опублікували будь-які редакції, що містять випадково додані файли, це може створити проблеми для користувачів цих публічних відділень. Поінформуйте їх або, можливо, подумайте про те, як погано потрібно видалити файли.
Примітка При наявності тегів завжди використовуйте --tag-name-filter cat
параметр до git filter-branch
. Це ніколи не зашкодить і позбавить вас від головного болю, коли згодом ви зрозумієте, що вам це потрібно
--all
щоб переписати одразу всі (локальні) гілки
Навіть після того, як ви видалите файли (файли), а потім скопіюєте, ви збережете ці файли в історії. Щоб видалити їх, подумайте про використання BFG Repo-Cleaner . Це альтернатива git-filter-branch.