Git run python script filter tree on commit

I have been asked this question before #git, but since it is quite substantial, I will post it here. I want to run filter-branchin a repo to change (thousands) of files to hundreds of commits using a python script. I invoke the clean.pyscript using the following command in the repo directory:

git filter-branch -f --tree-filter '(cd ../cleaner/ && python clean.py --path=files/*/*/**)'

Clean.py looks like this and will modify all the files in the path (i.e.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)

After running the command, the following is displayed on the terminal:

$ 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 script , filter-branch . , , . win7, win8 ubuntu git v1.8 v1.9.
script , Centros git1.7.1

, CDN ( 1 ) , files/*/*/** .

+4
3

, , : ( , ) ?

Python, , , .INI , ?

, , BFG Repo-Cleaner? , Git, ( , ), , BFG, , - , git-filter-branch.

:

$ java -jar bfg.jar --strip-blobs-bigger-than 100K  my-repo.git

100 , .

jsdelivr repo 284M 138M . BFG 5 , git gc --prune=now --aggressive - 2 .

: BFG Repo-Cleaner.

+2
+1

BFG. .

0

Source: https://habr.com/ru/post/1534096/


All Articles