newren / git-filter-repo

Quickly rewrite git repository history (filter-branch replacement)
Other
8.52k stars 708 forks source link

Apply inverted '--path' filtering after '--path-rename'? #504

Open MarkusMit opened 1 year ago

MarkusMit commented 1 year ago

I have a repository like this:

my-repo/
├── folder_a/
├── folder_b/
│   ├── folder_b_1/
│   ├── folder_b_2/
│   └── folder_b_3/
├── folder_c/
...
└── folder_z/

and - as part of a bigger restructuring - I want to change it like this: folder_b_3 should be moved up to root, and folder folder_b with all its remaining contents should be removed:

my-repo/
├── folder_a/
├── folder_b_3/
├── folder_c/
...
└── folder_z/

I tried to do this with inverted path filtering (--invert-paths), but it seems the --path filtering is always executed before the --path-rename regardless of the order of the commands:

python3 'git-filter-repo' --force --invert-paths              \
            --path-rename 'folder_b/folder_b_3/:folder_b_3/'  \
            --path 'folder_b/' 

So, the current (undesired) result is, that nothing of folder_b survives:

my-repo/
├── folder_a/
├── folder_c/
...
└── folder_z/

Since "ordering issues" are mentioned with (positive) path filtering and renames in the user manual, I thought it should also be considered accordingly with inverted path filtering.

newren commented 3 months ago

Yeah, sorry, can you split this into two steps?

   python3 'git-filter-repo' --force \
            --path-rename 'folder_b/folder_b_3/:folder_b_3/'
   python3 'git-filter-repo' --invert-paths \
            --path 'folder_b/' 
MarkusMit commented 3 months ago

Yeah, since this was already some months ago, I already found a solution for it. ;-)

But my main intend was anyway that this behaviour may be worth mentioning in the documentation.