Git filter-branch to filter-repo : Tags nicht umgeschrieben

Lesezeit: 2 Minuten

Ich habe versucht, ein Skript mit git filter-branch zu ändern, das ein git-Repository nimmt und es in mehrere neue Verzeichnisse trennt, indem Unterordner dieses Verzeichnisses angegeben werden. Die neuen Verzeichnisse sollten nur die Commits enthalten, die ihre entsprechenden Unterordner geändert haben, daher die Verwendung von filter-branch. Mein Ziel ist es, den Filter-Zweig durch den Filter-Repo zu ändern, um eine bessere Leistung zu erzielen.

Früher wurde ein neuer Zweig $branch erstellt und dann dieser Befehl verwendet:

git filter-branch -f --prune-empty --tag-name-filter cat --subdirectory-filter $subdir $branch --tags

Gefolgt von diesem, um den Zweig zu seinem entsprechenden Repo (das denselben Namen hat) sowie die neu geschriebenen Tags zu verschieben:

git checkout $branch
ssh-agent bash -c "ssh-add ../$privateKeyName; git push $branch $branch:$branchToExtract --tags -f"

($branchToExtract ist nicht wichtig, Sie können es einfach als “Master” betrachten)

Wie bereits gesagt, habe ich versucht, filter-repo anstelle von filter-branch zu verwenden. Dies ist der Befehl, den ich verwendet habe:

git filter-repo -f --prune-empty always --subdirectory-filter $subdir --refs $branch

Und es funktioniert gut … Bis auf eine (wichtige) Sache: Wenn alles in die neuen Repos verschoben wird, sind die Tags die gleichen wie beim ursprünglichen Hauptrepo, was bedeutet, dass sie viel zu viel Inhalt (und Commits) haben und nicht was Sie sollten haben. Es ist, als würden die Tags überhaupt nicht umgeschrieben. Ich habe ein paar verschiedene Dinge wie –tag-rename ausprobiert, aber ohne Erfolg.

Jede Hilfe, was ich tun sollte, oder Hinweise darauf, was ich möglicherweise falsch mache, wäre sehr willkommen. Vielen Dank 🙂

  • Sie nutzen --refs $branch, haben Sie versucht, alle Ihre Tags hier aufzulisten? Oder arbeiten Sie immer an einem frischen Klon und schreiben Sie alle Repos neu

    – LeGEC

    27. Juli 2020 um 10:12 Uhr

Wie von LeGEC angegeben, löste das Auflisten der Tags in –refs das Problem. Mir war nicht ganz klar, wie die Option funktioniert.

Für alle Interessierten ist dies der richtige Befehl
git filter-repo -f --prune-empty always --subdirectory-filter $subdir --refs $branch $(git tag -l)

1011710cookie-checkGit filter-branch to filter-repo : Tags nicht umgeschrieben

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy