newren / git-filter-repo

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

Breaking change in git 2.43 or 2.44 #551

Closed SjoerdvE closed 4 months ago

SjoerdvE commented 8 months ago

The working version I have is with git 2.42.0.windows.2. When I ran it on another pc with the latest git version 2.44.0 git-filter-repo is broken.

I did some digging to see if it was my problem, but I found the following issue between git-filter-repo and git. git-filter-repo is calling git fast-export -h and parsing the output to determine which flags to enable, but the output format of git fast-export -h has changed into the output copied below. The added [no-] part to every parameter probably breaks all of them.

In my case I needed --mark-tags, but it resulted in an error: fatal: Error: Cannot export nested tags unless --mark-tags is specified. See line 2070: if b'--mark-tags' not in output: # pragma: no cover, the check is against exactly --mark-tags.

If this was the only problem I might have prepared a PR for you, but since all of them have to be updated I think it's better that somebody more involved in the project updates this.

p.s.: it also means that the published version of git-filter-repo on PyPI will not work on the latest git version anymore.

usage: git fast-export [<rev-list-opts>]

    --[no-]progress <n>   show progress after <n> objects
    --[no-]signed-tags <mode>
                          select handling of signed tags
    --[no-]tag-of-filtered-object <mode>
                          select handling of tags that tag filtered objects
    --[no-]reencode <mode>
                          select handling of commit messages in an alternate encoding
    --[no-]export-marks <file>
                          dump marks to this file
    --[no-]import-marks <file>
                          import marks from this file
    --[no-]import-marks-if-exists <file>
                          import marks from this file if it exists
    --[no-]fake-missing-tagger
                          fake a tagger when tags lack one
    --[no-]full-tree      output full tree for each commit
    --[no-]use-done-feature
                          use the done feature to terminate the stream
    --no-data             skip output of blob data
    --data                opposite of --no-data
    --[no-]refspec <refspec>
                          apply refspec to exported refs
    --[no-]anonymize      anonymize output
    --anonymize-map <from:to>
                          convert <from> to <to> in anonymized output
    --[no-]reference-excluded-parents
                          reference parents which are not in fast-export stream by object id
    --[no-]show-original-ids
                          show original object ids of blobs/commits
    --[no-]mark-tags      label tags with mark ids

update: added reference to line of code

marcows commented 7 months ago

Duplicate of #523.

newren commented 4 months ago

@marcows: Thanks for marking as a duplicate; I'll close this out.