Игнорировать файлы .pyc в репозитории git - PullRequest
77 голосов
/ 05 апреля 2011

Как я могу игнорировать .pyc файлы в git?

Если я введу его в .gitignore, это не сработает. Мне нужно, чтобы их не отслеживали и не проверяли на коммиты.

Ответы [ 4 ]

182 голосов
/ 25 июля 2014

Вы должны добавить строку с:

*.pyc 

в файл .gitignore в корневой папке дерева вашего git-репозитория сразу после инициализации репозитория.

As 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/)

72 голосов
/ 05 апреля 2011

Вы, вероятно, добавили их в хранилище перед тем, как поместить *.pyc в .gitignore.
Сначала удалите их из хранилища.

34 голосов
/ 05 апреля 2011

Положите его в .gitignore.Но из справочной страницы gitignore(5):

  ·   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 в любомкаталогов, ведущих из корня хранилища (включительно).

0 голосов
/ 06 ноября 2016

Спасибо @Enrico за ответ.

Обратите внимание, что если вы используете virtualenv, у вас будет еще несколько .pyc файлов в каталоге, в котором вы находитесь в данный момент, которые будут записаны его командой find.

Например:

./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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...