git продолжает контролировать изменения в __pycache__, даже когда он находится в gitignore - PullRequest
0 голосов
/ 11 июля 2019

Это мой .gitignore:

*__pycache__*
*.pyc
db.sqlite3
*.DS_Store
media/
res/

Я вижу на своем Atom , что каталоги __pycache__ имеют VcsIgnored (что означает, что они распознаются как не контролируемые по версии git )

enter image description here

Но, в любом случае, когда я делаю изменения в файле, я получаю несколько __pycache__ файлов с изменениями и без изменений в моем окне Atom git:

enter image description here

Не знаю, в чем проблема: git или Atom .

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Попробуйте git rm --cached */__pycache__/*

.gitignore file только сообщает git, какие новые файлы не следует отслеживать. Не удалять из репозитория уже отслеженные файлы.

0 голосов
/ 11 июля 2019

Обновлено с учетом последующих вопросов в комментариях


.gitignore только работает с неотслеживаемыми файлами.

Если пути отображаются как «измененные» или «не помеченные», это означает, что файлы уже отслежены - они были в индексе и, вероятно, в предыдущих коммитах до того, как вы поместили их в gitignore, или они были принудительно добавлены после того, как вы их поместили в гитиньоре.

Итак, вы пытаетесь игнорировать изменения в отслеживаемых файлах, а это не то, что вы можете сделать в git.

(Для ясности, вы, вероятно, найдете ответы о том, что вы можете использовать различные флаги в индексе, чтобы игнорировать изменения в поэтапных файлах. Это почти всегда приводит к проблемам, потому что это не то, для чего эти флаги.)


Так как же вы можете игнорировать эти файлы? Вы должны сказать Git прекратить их отслеживание. Это легко сделать, но у него могут быть неприятные побочные эффекты.

При условии, что у вас не много долгоживущих веток, простой подход - git rm --cached, чтобы отменить изменения и затем создать новый коммит. Например, если вас беспокоит только очистка главной ветки, вы можете

git checkout master
git rm -r --cached __pycache__ # or whatever other paths
git commit -m "remove unwanted files'

Теперь вы обнаружите, что git status не показывает эти файлы по умолчанию, а git add не добавляет их. НО, если вы делаете что-то, что изменяет файлы, а затем

git checout HEAD^

вернувшись к коммиту, в котором были эти файлы, git будет спокойно обрабатывать изменения, внесенные вами в эти файлы, даже если у него нет копии изменений, из которых можно восстановить. И когда вы впоследствии

git checkout master

они будут полностью удалены с рабочего дерева.

Для *.pyc файлов, возможно, это приемлемо (поскольку Python все равно быстро / тихо восстанавливает их); для других файлов это может быть не так, так что в лучшем случае это подход «используйте с осторожностью».

Альтернатива - которая позволяет избежать вышеуказанных проблем, но сопряжена с собственными затратами - состоит в том, чтобы переписать историю так, чтобы игнорируемые файлы никогда не фиксировались.

  • Имейте в виду, что, как и при любом переписывании истории, вам придется координировать свои действия с кем-либо, кто разделяет репо

  • Если вы решите пойти по этому пути, существуют существующие вопросы / ответы, которые документируют процедуру; вы бы искали git-filter-branch with tree-filter или index-filter.

...