У мене в 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.