Итак, интересная ситуация при использовании git и python, и я уверен, что это происходит и для других ситуаций.
Скажем, я создаю репозиторий git с папкой /foo/. В этой папке я помещаю /foo/program.py. Я запускаю program.py и program.pyc. У меня есть *.pyc в файле .gitignore, поэтому git не отслеживает его.
Теперь позвольте сказать, что я делаю другую ветку, dev. В этой ветки dev я полностью удаляю папку /foo/.
Теперь я переключаюсь обратно на главную ветку и/foo/появляется снова. Я запускаю program.py и снова появляется файл program.pyc. Все хорошо.
Я возвращаюсь обратно в свою ветвь dev. Каталог/foo/должен исчезнуть. Он существует только в ветки мастера, а не в ветки dev. Однако он все еще существует. Зачем? Поскольку проигнорированный файл program.pyc предотвращает удаление папки при переключении ветвей.
Решение этой проблемы - это рекурсивно удалить все *.pyc файлы перед переключением ветвей. Я легко могу сделать это с помощью этой команды.
find . -name "*.pyc" -exec rm '{}' ';'
Проблема заключается в том, что досаждать нужно помнить, чтобы делать это почти каждый раз, когда я меняю ветки. Я мог бы сделать псевдоним для этой команды, но тогда мне все равно придется помнить, чтобы вводить его каждый раз, когда я меняю ветки. Я мог бы также сделать псевдоним для git -branch, но и ничего хорошего. Команда ветвления git выполняет другие действия, кроме изменений ветвей изменений, и я не хочу удалять все файлы pyc каждый раз, когда я их использую. Черт, я бы даже использовал его в нерепитоне, то что?
Есть ли способ установить крюк git, который выполняется только при изменении ветвей? Или есть какой-то другой способ, чтобы все *.pyc файлы удалялись всякий раз, когда я переключаю ветки?