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