.gitignore після скоєння


210

У мене в Github розміщено сховище git. Після створення багатьох файлів я розумію, що мені потрібно створити .gitignoreта виключити .exe,.obj файли.

Однак чи автоматично буде видалено ці довірені файли із сховища? Чи є якийсь спосіб змусити це?


6
Майбутні гуглери можуть вважати це надзвичайно корисним. Короткий і суть: git-tower.com/learn/git/faq/ignore-tracked-files-in-git
Остін Дін

Відповіді:


331

Ні, ви не можете примушувати видаляти файл, який вже зроблено в репо-файлі, лише тому, що він доданий до .gitignore

Ви повинні git rm --cachedвидалити файли, які ви не бажаєте в репо. (- кешовано, оскільки ви, мабуть, хочете зберегти локальну копію, але видалити з репо.

git rm --cached /\*.exe

(Зверніть увагу, що зірочка * цитується з оболонки - це дозволяє git, а не оболонку розширювати назви файлів і підкаталогів)


6
@Madhur Ahuja Насправді, якщо ви git rm /\*.exeце зробите, ви видалите всі exe's у вашій репо
manojlds

4
Для чого використовуються / \
Коста

5
@Costa вони там, щоб уникнути зірочки, щоб не допустити інтерпретації оболонки, як вона призначена git.
Ламбарт

2
Попередження: Файли зберігаються в локальному просторі, це правда ... Але інші користувачі, які виконують файл git pull, побачать, що їх файли видалено.
ByScripts

42

Однак чи автоматично буде видалено ці довірені файли із сховища?

Ні. Навіть за наявності існуючих .gitignoreви можете встановити "ігноровані" файли з -fпрапорцем (сила). Якщо вони вже зафіксовані, вони не видаляються автоматично.

git rm --cached path/to/ignored.exe

Чи означає це, що я
знімаю

Ви, ймовірно, можете це зробити, але я не знаю, як це працює під Windows
KingCrunch

30

Якщо ви ще не натиснули зміни:

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push

15

Мені довелося видалити .idea та цільові папки, і після прочитання всіх коментарів це працювало для мене:

git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'

а потім підштовхнути до майстра


.ideaбула моя проблема, я гадаю, це теж було твоє:)
Олів'є Понс

5

Однак чи автоматично буде видалено ці довірені файли із сховища?

Немає.

Найкращим рецептом для цього є використання, git filter-branchяк написано тут:

Сторінка man для git-filter-branch містить вичерпні приклади.

Примітка Ви будете переписувати історію. Якщо ви опублікували будь-які редакції, що містять випадково додані файли, це може створити проблеми для користувачів цих публічних відділень. Поінформуйте їх або, можливо, подумайте про те, як погано потрібно видалити файли.

Примітка При наявності тегів завжди використовуйте --tag-name-filter catпараметр до git filter-branch. Це ніколи не зашкодить і позбавить вас від головного болю, коли згодом ви зрозумієте, що вам це потрібно


Я запустив цю команду, вона показала Rewrite 57c1f1f04a3ed01f50c3260714cfc82c973ac816 (3/3) ПОПЕРЕДЖЕННЯ: Ref 'refs / heads / master' є незмінним і нічого не сталося
Madhur Ahuja

Це попередження і, швидше за все, означає, що головна гілка ще не містила змін до файлів, які потрібно видалити. Ви можете це легко перевірити. Якщо є проблема, оновіть це питання. PS: використовуйте - --allщоб переписати одразу всі (локальні) гілки
1111

1

Навіть після того, як ви видалите файли (файли), а потім скопіюєте, ви збережете ці файли в історії. Щоб видалити їх, подумайте про використання BFG Repo-Cleaner . Це альтернатива git-filter-branch.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.