Зняти файли з git тимчасово


450

Я встановив локальний git на своїй машині. Коли я ініціалізував git, я додав попередньо складені lib та binaries. Однак зараз під час своєї розробки я не хочу періодично перевіряти ці файли. Я не хочу видаляти ці файли з репо. Чи є спосіб не відстежувати ці файли, поки я не завершу свою розробку. (Я думаю, я не можу використовувати .gitignore, оскільки він працює лише для тих файлів, які не знаходяться в git. Я хочу тимчасово відключити відстеження файлів.)



Відповіді:


723

git update-index повинен робити все, що завгодно

Це підкаже git, що ви хочете почати ігнорувати зміни у файлі
git update-index --assume-unchanged path/to/file

Коли ви хочете знову почати вести облік
git update-index --no-assume-unchanged path/to/file

Документація Github: оновлення-індекс


3
Нарешті команда, яка насправді працює для мого випадково-скоєного файлу dev, дякую :)
Річард де Віт

15
Чому б не git rm -r --cached <file>?
Есан

23
@Ehsan, здається git rm --cached, призведе до видалення локальних копій на інших машинах, де перевіряється та сама гілка, під час їх наступного виведення. Дивіться arlocarreon.com/blog/git/… і особливо обговорення під ним.
міт

3
Не працює для мене, коли я вношу зміни до файлу, він все одно додається до включених змін. Я міг би виключити, але тоді в якийсь момент він, мабуть, буде доданий випадково.
MrFox

8
припустимо, що незмінними не були призначені для цієї мети. Може хочете , щоб прочитати цю нитку
Апі

264

ви можете зберегти свої файли після цього

git rm -r --cached <file>

додайте свої файли за допомогою

git add -u

вони штовхають або роблять все, що хочеш.


19
Це насправді правильна відповідь згідно з: git-scm.com/book/en/v2/…
Есан

git rm --cached .DS_Store потім він друкує rm '../.DS_Store'І локальний файл видаляється ??! ( git version 2.6.4 (Apple Git-63))
Вейші Дзенг

Отримав відповідь тут stackoverflow.com/questions/6919121 / ...
WEISHI Zeng

4
Це не правильна відповідь, оскільки це видалить файл у вихідному коді. ОП хоче ігнорувати локальні зміни цього файлу, а не видаляти його повністю відстеження
cjsimon

2
УВАГА: вона також видалить файли, які ви хочете зняти. Рішення - скопіювати всі файли кудись і скопіювати їх назад після фіксації.
псад

111
git rm --cached

Однак у першу чергу не слід здійснювати складені бінарні файли та зовнішні залежності. Використовуйте такий інструмент, як Bundler, щоб замінити їх.


2
Не забувайте -r варіант (рекурсивний) для каталогів: git rm -r --cached
Анатолій Шуба

36

Використовуйте наступну команду для відстеження файлів

git rm --cached <file path>

7

У книзі git згадується це у розділі 2.4: "Скасування речей". В основному, ви повинні скинути стан індексу для деяких файлів назад до стану HEAD, тобто до стану останньої каси (або фіксації). Це скасовує постановку файла на поточний індекс. Команда для цього завдання є git reset. [1]

Отже, команда, яку ви повинні виконати:

git reset HEAD /path/to/file

Новіші версії git (я вважаю, що з 1.6 або більше) дають цю команду (та багато іншого) як підказку під час виконання git status. Ці версії дуже зручні в користуванні. Особиста порада: якщо ви створюєте лише кілька файлів, використовуйте git add -i. Це запустить інтерактивний інструмент інсценізації, що робить річ особливо легкою. Також настійно рекомендую прочитати книгу, оскільки це дуже чітко стосується використання git у практичних ситуаціях.

[1] http://www.git-scm.com/book


Я погоджуюся, що git reset [file]це найпростіший спосіб нестабільності файлів.
Спектрал

18
скасування та розкручування - це різні речі
Хайме Сангкап

6

Не відповідь на початкове запитання. Але це може комусь допомогти.

Щоб побачити внесені вами зміни (дізнайтеся, які файли позначені як - без змін )

git ls-files -v

Отриманий список файлів матиме префікс з одним символом (наприклад: H або h) Якщо це малий регістр (тобто h), то файл позначено --assume-незмінний


5

Я припускаю, що ви запитуєте, як видалити ВСІ файли в папці збірки або папці bin, а не вибирати кожен файл окремо.

Ви можете використовувати цю команду:

git rm -r -f /build\*

Переконайтеся, що ви перебуваєте у батьківському каталозі каталогу збирання.
Ця команда буде рекурсивно "видаляти" всі файли, які знаходяться в bin / або build / папках. Під словом delete я маю на увазі, що git зробить вигляд, що ці файли "видалено" і ці файли не будуть відслідковуватися. Git дійсно позначає ці файли у режимі видалення.

Переконайтеся, що ви готові .gitignore готові до майбутніх подій.
Документація: git rm


1

git reset [файл]

Повернення файлу з області постановки в робочий каталог

Я часто забуваю додати свої модулі вузлів до файлу .gitignore, це вирішує цю проблему.



1

Щоб видалити всі файли Uckrack. Спробуйте цю термінальну команду

 git clean -fdx

Це видалить файли з диска, а не з історії git.
Леонардо

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