我正在尝试编写一个脚本,我想为其复制 git 存储库,但没有
.git
文件夹。这是我的完整代码:
import shutil
shutil.copytree([src], [dst], ignore=shutil.ignore_patterns('**/.git/**'), dirs_exist_ok=True)
但是,这仍然是复制
.git
目录。我已经使用 Python glob
包测试了给定的 glob,所以我知道它是有效的。我知道可以编写自己的函数来传递 ignore
参数,但是我仍然不明白为什么我的代码不起作用。 文档特别指出ignore_patterns
接受glob样式模式,所以这应该基于我的理解。
传递给
ignore
回调函数的参数是目录名称和文件列表。由于您想忽略整个目录,因此您可以提供自己的函数来仅检查目录是否为.git
,而不是使用 glob 模式。
def is_git_dir(dir, files):
return ".git" in dir.split('/')
shutil.copytree([src], [dst], ignore=is_git_dir, dirs_exist_ok=True)