Ігноруйте .pyc файли у сховищі git


107

Як я можу ігнорувати .pycфайли в git?

Якщо я покладу, це .gitignoreне працює. Мені потрібно, щоб вони не відслідковувались та не перевірялися на комітети.


4
.gitignore має працювати. Чи можете ви надати копію рядків, які ви ввели .gitignore, щоб спробувати вирішити цю проблему?
Al Riddoch

Відповіді:


41

Покладіть його .gitignore. Але зі gitignore(5)сторінки man:

  ·   If the pattern does not contain a slash /, git treats it as a shell
       glob pattern and checks for a match against the pathname relative
       to the location of the .gitignore file (relative to the toplevel of
       the work tree if not from a .gitignore file).

  ·   Otherwise, git treats the pattern as a shell glob suitable for
       consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in
       the pattern will not match a / in the pathname. For example,
       "Documentation/*.html" matches "Documentation/git.html" but not
       "Documentation/ppc/ppc.html" or
       "tools/perf/Documentation/perf.html".

Отже, або вкажіть повний шлях до відповідного *.pycзапису, або помістіть його у .gitignoreфайл у будь-якому з каталогів, що ведуть із кореня сховища (включно).


6
Просто, щоб ніхто не заплутався, тлумачення Ігнасіо на сторінці чоловіка є неправильним. Вам не потрібно ставити * .pyc в один і той же каталог, достатньо помістити його в батьківський каталог (або бабусь і дідусів тощо).
Godsmith

@Godsmith: Виправлено.
Ігнасіо Васкес-Абрамс

241

Ви повинні додати рядок із:

*.pyc 

до .gitignoreфайлу в кореневій папці вашого дерева сховища git відразу після ініціалізації сховища.

Як сказала ralphtheninja , якщо ви забули це зробити заздалегідь, якщо ви просто додасте рядок до .gitignoreфайлу, всі попередньо закріплені .pycфайли все одно будуть відслідковуватися, тому вам потрібно буде видалити їх із сховища.

Якщо ви перебуваєте в системі Linux (або "батьки та сини", як MacOSX), ви можете швидко виконати це лише за допомогою однієї рядкової команди, яку потрібно виконати з кореня сховища:

find . -name "*.pyc" -exec git rm -f "{}" \;

Це просто означає:

Починаючи з каталогу, в якому я зараз перебуваю, знайдіть усі файли, ім’я яких закінчується розширенням .pyc, і передайте ім'я файлу командіgit rm -f

Після *.pycвидалення файлів із git як відслідковуваних файлів, зафіксуйте цю зміну у сховищі, і тоді ви, нарешті, можете додати *.pycрядок у .gitignoreфайл.

(адаптовано з http://yuji.wordpress.com/2010/10/29/git-remove-all-pyc/ )


3
Крім того, просто видалити файли з git та з локальної машини, ви можете зробити це git rm --cached *.pycз каталогу верхнього рівня. Отримав це звідси
Анупам

У мене це існує, але як тільки ви вкажете файли .pyc, він все одно відслідковується git, ви повинні їх видалити спочатку та здійснити фіксацію, якщо вони є у сховищі
Махмуд Хбубаті

84

Ви, напевно , додали їх в сховище , перш ніж покласти *.pycв .gitignore.
Спочатку вийміть їх із сховища.


3

я намагаюся використовувати речення попередньої публікації і не працюю рекурсивно, тоді прочитайте допомогу і отримайте цей рядок:

find . -name "*.pyc" -exec git rm -f "{}" \;

pd необхідно додати * .pyc у .gitignore файл для підтримки чистоти git

echo "*.pyc" >> .gitignore

Насолоджуйтесь.


1

Якщо ви хочете ігнорувати файли '.pyc' у всьому світі (тобто якщо ви не хочете додавати рядок до файлу .gitignore у кожному каталозі git), спробуйте наступне:

$ cat ~/.gitconfig 
[core]
    excludesFile = ~/.gitignore
$ cat ~/.gitignore
**/*.pyc

[Довідка]
https://git-scm.com/docs/gitignore

  • Шаблони, які користувач хоче, щоб Git ігнорував у будь-яких ситуаціях (наприклад, резервні копії або тимчасові файли, згенеровані редактором за вибором користувача), як правило, переходять у файл, визначений core.excludesFile в ~ / .gitconfig користувача.

  • Ведучий "**" з подальшим нахилом означає збіг у всіх каталогах. Наприклад, "** / foo" відповідає файлу або каталогу "foo" де завгодно, як і зразок "foo". "** / foo / bar" відповідає файлу або каталогу "bar" в будь-якому місці, що знаходиться безпосередньо під каталогом "foo".


0

Дякую @Enrico за відповідь.

Зверніть увагу, якщо ви використовуєте virtualenv, .pycу каталозі, в якому ви зараз перебуваєте, у вас буде ще кілька файлів, які будуть захоплені командою пошуку.

Наприклад:

./app.pyc
./lib/python2.7/_weakrefset.pyc
./lib/python2.7/abc.pyc
./lib/python2.7/codecs.pyc
./lib/python2.7/copy_reg.pyc
./lib/python2.7/site-packages/alembic/__init__.pyc
./lib/python2.7/site-packages/alembic/autogenerate/__init__.pyc
./lib/python2.7/site-packages/alembic/autogenerate/api.pyc

Я припускаю, що видалити всі файли нешкідливо, але якщо ви хочете лише видалити .pycфайли в головному каталозі, просто виконайте

find "*.pyc" -exec git rm -f "{}" \;

Це видалить просто app.pycфайл із сховища git.

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