Thanks for everyone's advice and assistance. I had a look at all the links provided and wasn't convinced any of them quite covered my requirement, but I have now made some progress using Scoop. I had hoped that all I would need to do would be: 1. Install latest Python for Windows (3.8). Install for All Users means it's in C:\Program Files\Python38, and that's in the Path. 2. Clone git-filter-repo. 3. Point Path at git-filter-repo. (Alternative was to copy it into "exec-path" folder under Git, but that was protected.) 4. Run it. That didn't work: /usr/bin/env: 'python3': No such file or directory. That string pointed me at the shebang line of git-filter-repo, so I set about trying anything that I thought might point at my Python installation. Nothing I tried worked. Some things, like "/bin/sh", did indicate that the right file was being found and executed, but gave errors that it was being executed as a shell script, which of course it isn't. Any attempt to point at the python exe seemed to say things along the lines of "git can find it but not understand it" (sorry I can't now copy in the real error message as I had to close the Bash shell in order to update GfW.) So I gave up on getting it to run using raw Windows - well not entirely raw Windows as it's going to be run from Bash-for-git-for-windows (or so I thought). Installed Scoop. Got Scoop to install git-filter-repo and python. At last that lets me run it and have it do something useful. Though actually as Scoop gives its instructions for being run from PowerShell I'm not in the end running from bash at all. First attempt at running it was using: git filter-repo --analyze --source=core_system_archive which responded "not a git repository" even though core_system_archive does contain a ".git". But then git filter-repo --analyze --source=core_system_archive/.git or git filter-repo --analyze --source=./core_system_archive/.git didn't work either, same error, although it looks to me like core_system_archive/.git is a git repo. So would I need some different syntax to make that work? (And I've since noticed that examples use space rather than '=' to separate keyword from param, so I've tried that, with the same failures) So next option was to "cd .\core_system_archive", then just git filter-repo --analyze Which has worked. Though it isn't clear what was wrong with the parameter I used for --source. How am I supposed to reference a source repo without cd-ing into it? So thanks everyone for a lot of hints, but for me, under Windows, only the Scoop package manager managed to get all the right settings for filter-repo to work. And only now, having been rather rushing to get this to work due to other priorities, have I seen the comment about using pip to install it, so maybe that would also have worked. Regards, Richard. Oh, and having also seen Philip's reply (below) I don't think I would have recognized it as relating to my issue. What is winpty? Should that have gone in the shebang line of git-filter-repo in some form? From: Philip Oakley <philipoakley@iee.email> with a reply by dscho reminding that: This issue is listed specifically in the Known Issues in our Release Notes: Some console programs, most notably non-MSYS2 Python, PHP, Node and OpenSSL, interact correctly with MinTTY only when called through winpty (e.g. the Python console needs to be started as winpty python instead of just python). The installer even suggests (on the page titled "Configuring the terminal emulator to use with Git Bash") to Use Windows' default console window [...] which works well with Win32 console programs such as interactive Python or node.js [...] Regards Richard Kerry BNCS Engineer, SI SOL Telco & Media Vertical Practice M: +44 (0)7812 325518 2nd Floor, MidCity Place, 71 High Holborn, London, WC1V 6EA richard.kerry@xxxxxxxx This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Atos group liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.