我有以下Python函数,我在Windows 7上运行:
def update():
temp_dir = tempfile.mkdtemp()
git.Git().clone('my_repo', temp_dir)
try:
repo = git.Repo(temp_dir)
repo.index.add('*')
repo.index.commit('Empty commit')
finally:
from git.util import rmtree
rmtree(temp_dir)
不幸的是,在rmtree上,我得到了:
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'c:\\users\\myaccount\\appdata\\local\\temp\\tmpdega8h\\.git\\objects\\pack\\pack-0ea07d13498ab92388dc33fbabaadf37511623c1.idx'
我应该怎么做才能删除Windows中的临时目录?
答案 0 :(得分:2)
已花费lot中的一个effort来修复 Windows 中的此行为,在该情况下,文件锁定是文件系统的默认行为,但在{ {3}}:
[GitPython]是在析构函数(如
__del__
方法)仍然可以确定地运行。”如果您仍想在这种情况下使用它,则需要进行搜索
__del__
实现的代码库,并在合适时自行调用。
无论如何,项目测试用例使用的Limitations可能会有所帮助:
repo_dir = tempfile.mktemp()
repo = Repo.init(repo_dir)
try:
## use the repo
finally:
repo.git.clear_cache() # kill deamon-procs responding to hashes with objects
repo = None
if repo_dir is not None:
gc.collect()
gitdb.util.mman.collect() # kept open over git-object files
gc.collect()
rmtree(repo_dir)
注意:这是
repo.close()
自2.1.1(2016年12月)以来的工作。