Im Folgenden wird das Skript beschrieben, mit dem ich den Verlauf eines Submoduls neu schreibe, auf das in mehreren übergeordneten Repositorys verwiesen wird. Dies läuft in Git bash in einer Windows-Umgebung.Verweise auf ein Submodul im übergeordneten Repository aktualisieren, nachdem das GIT-Protokoll des Submoduls neu geschrieben wurde
#!/bin/bash
cd submodule_repo
git filter-branch --index-filter 'git rm -q --cached --ignore-unmatch files_to_remove' \--tag-name-filter cat -- --all
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
Ich muß irgendwie mit dem neu geschaffenen SHA s dem SHA s des alten Commits auf der Karte, so dass ich die gleiche Referenz in den übergeordneten Repositories aktualisieren kann. Gibt es einen Weg, es zu tun? Ich habe mir Repository with submodules after rewriting history of submodule angesehen, aber es hilft nicht wirklich, da ich die Original-Refs aktualisiere, um sicherzustellen, dass die Dateien, die ich entferne, nicht zufällig neu gepackt werden. Ich bin relativ neu in der Verwendung von Git, so dass jede Anleitung wirklich geschätzt werden würde.
bearbeiten:
die Schritte in den Kommentaren Abschnitt der akzeptierte Antwort (von @torek) erwähnt Nach arbeitete für mich.
Dank @torek Das ist irgendwie enttäuschend :(Es sollte eine Option geben, um die Karte zu behalten oder zu verwerfen, sobald der Filter-Zweig fertig ist, wäre in einem solchen Szenario wirklich nützlich. Jede Umgehung, die ich verwenden kann, um die Karte manuell zu erstellen? –
Am einfachsten wäre es, den Filter-Branch-Code zu hacken.Es handelt sich um ein Shell-Skript, also ist es sehr einfach zu modifizieren.Suche einfach den Punkt, an dem das temporäre Verzeichnis entfernt wird, und mach etwas Nützliches mit der Karte, um es zu speichern. – torek
Schon eine Weile, aber ich bin jetzt wieder bei dieser Aufgabe, also habe ich die Variable '$ GIT_COMMIT' wie hier erwähnt [https://stackoverflow.com/questions/14782906/how-do-i-get- a-list-of-alt-neu-rewritten-commit-shas-from-git-filter-branch.) und erstellte die Map als Teil von filter-branch. Es scheint die Karte korrekt zu füllen (alle meine modifizierten Commits sind in der Karte registriert) zusammen mit den alten Commits. –