所以这是使用git和python的一个有趣的情况,我相信它也适用于其他情况.
假设我用文件夹/ foo /制作一个git repo.在那个文件夹中我放了/foo/program.py.我运行program.py并创建program.pyc.我在.gitignore文件中有*.pyc,所以git不会跟踪它.
现在让我们说我做另一个分支,开发.在这个dev分支中,我完全删除/ foo /文件夹.
现在我切换回主分支,并且/ foo /重新出现.我运行program.py并重新出现program.pyc文件.一切都很好.
我切换回我的开发分支./ foo /目录应该消失.它只存在于master分支中,而不是dev分支中.但是,它仍然存在.为什么?因为忽略的program.pyc文件阻止在切换分支时删除该文件夹.
解决此问题的方法是在切换分支之前以递归方式删除所有*.pyc文件.我可以使用此命令轻松完成此操作.
find . -name "*.pyc" -exec rm '{}' ';'
Run Code Online (Sandbox Code Playgroud)
问题是,每次更换分支时都必须记住这样做很烦人.我可以为这个命令创建一个别名,但是每次我改变分支时我仍然要记得输入它.我也可以为git-branch制作一个别名,但这也不好.除了更改分支之外,git branch命令还可以执行其他操作,并且我不希望每次使用它时都删除所有pyc文件.哎呀,我甚至可以在非python回购中使用它,那么呢?
有没有办法设置一个只在我更改分支时才执行的git钩子?或者是否有其他方法可以设置所有*.pyc文件,以便在切换分支时删除?
Cas*_*bel 41
有一个post-checkout挂钩,放在.git/hooks/post-checkout中.那里可能有一个示例,可能名为.sample或可能不可执行,具体取决于您的git版本.简短描述:它获得三个参数,前一个HEAD,新HEAD,以及一个标志,如果分支发生变化则为1,如果仅仅是文件结账则为0.查看man githooks更多信息!您应该能够编写一个shell脚本来执行您需要的操作并将其放在那里.
编辑:我意识到你正在寻找这个预先结帐,这样结账会自动清理变空的目录.但是,没有预先签出的钩子,所以你必须使用你的脚本来删除目录.
另一个注意事项:别名是gitconfig的一部分,它可以是存储库的本地存储(在.git/config中,而不是〜/ .gitconfig).如果你选择使用别名(对于git-checkout,而不是git-branch),你可以轻松地将它们放在与python相关的存储库中.同样在这种情况下,我会专门为此目的制作一个别名(例如cc用于结账清理).如果您不想清理pyc文件,您仍然可以使用checkout(或其他别名形式).
Chr*_*ard 36
只需复制并更新Apreche中包含在评论中的优秀解决方案:
将此shell脚本保存到该文件/path/to/repo/.git/hooks/post-checkout,并使其可执行.
#! /bin/sh
# Start from the repository root.
cd ./$(git rev-parse --show-cdup)
# Delete .pyc files and empty directories.
find . -name "*.pyc" -delete
find . -type d -empty -delete
Run Code Online (Sandbox Code Playgroud)
另一种选择是根本不解决这个git问题,而是解决Python问题.您可以使用PYTHONDONTWRITEBYTECODE环境变量来防止Python首先编写.pyc文件.然后,当您切换分支时,您将无法清理任何内容.
| 归档时间: |
|
| 查看次数: |
10667 次 |
| 最近记录: |