早些时候有人问过我这个问题,#git
但由于它相当重要,我会在这里发布。我想filter-branch
在 repo 上运行 a 以使用 python 脚本在数百次提交中修改(数千个)文件。我clean.py
在 repo 目录中使用以下命令调用脚本:
git filter-branch -f --tree-filter '(cd ../cleaner/ && python clean.py --path=files/*/*/**)'
Clean.py看起来像这样,并将修改路径中的所有文件(即files/*/*/**
):
from os import environ as environment
import argparse, yaml
import logging
from cleaner import Cleaner
parser = argparse.ArgumentParser()
parser.add_argument("--path", help="path to run cleaner on", type=str)
args = parser.parse_args()
# logging.basicConfig(level=logging.DEBUG)
with open("config.yml") as sets:
config = yaml.load(sets)
path = args.path
if not path:
path = config["cleaner"]["general_pattern"]
cleaner = Cleaner(config["cleaner"])
print "Cleaning path: " + str(path)
cleaner.clean(path, True)
运行命令后,将以下内容输出到终端:
$ python deploy.py --verbose
INFO:root:Checked out master branch
INFO:root:Running command:
'git filter-branch -f --tree-filter '(cd C:/Users/Graeme/Documents/programming/clean-cdn/clean-jsdelivr/ && python clean.py --path=files/*/*/**)' -d "../tmp"' in ../jsdelivr
Rewrite 298ec3a2ca5877a25ebd40aeb815d7b5a5f33a7e (1/1535)
Cleaning path: files/*/*/**
C:\Program Files (x86)\git/libexec/git-core\git-filter-branch: line 343: ../commit: No such file or directory
C:\Program Files (x86)\git/libexec/git-core\git-filter-branch: line 346: ../map/298ec3a2ca5877a25ebd40aeb815d7b5a5f33a7e
: No such file or directory
could not write rewritten commit
rm: cannot remove `/c/Users/Graeme/Documents/programming/clean-cdn/tmp/revs': Permission denied
rm: cannot remove directory `/c/Users/Graeme/Documents/programming/clean-cdn/tmp': Directory not empty
python 脚本成功执行并正确修改了文件,但filter-branch
没有完成修复提交。似乎存在权限问题,但是我无法以提升的权限运行它。我尝试使用 git v1.8 和 v1.9 在 win7、win8 和 ubuntu 上运行过滤器分支。
编辑该脚本在 Centros 上的工作方式与git1.7.1
files/*/*/**
目标是在内容完成与数据库同步后减小 CDN 存储库的大小(接近 1GB) 。用于重写的项目目标 repo
的源代码