Repository mit Submodulen nach dem Neuschreiben der Submodulgeschichte

8

Nach dem Umschreiben des Verlaufs eines Repositorys mit git filter-branch ändern sich alle SHAs.

Wenn nun dieses Repository (nennen wir es X ) als git Submodul in einem anderen Repository verwendet wird (nennen wir es Y ), haben wir ein Problem.
Tatsächlich weiß Y , welche Version des Submoduls X basierend auf dem SHA des Commits in diesem Submodul geladen werden soll. Da sich nun alle SHAs in X geändert haben, zeigt Y auf SHAs, die nicht mehr existieren.

Gibt es eine Möglichkeit, die Historie von Y so umzuschreiben, dass sie auf die neuen Commit-SHAs des Submoduls X verweist (sowohl in aktuellen als auch in früheren Commits)?

Ich würde vermuten, dass dies bei gegebener Übereinstimmung zwischen alten SHAs und neuen grundsätzlich möglich ist, aber ich befürchte, dass es böse Bash-Skripte beinhalten würde Ist etwas einfacher?

    
Enzo 25.05.2016, 16:08
quelle

1 Antwort

7
  

aber ich fürchte, es würde böse Bash-Skripte beinhalten.

Ich fürchte, das tut es.

  

Gibt es etwas einfacheres?

Nicht dass ich wüsste.
Hier sind einige Hinweise (nicht ein vollwertiges Skript) von dem, was Sie benötigen, damit das Skript funktioniert:

Wenn Sie immer noch Zugriff auf den neu geschriebenen Repo haben, wird sein ursprünglicher Verlauf ( vor der Filter-Zweig) in .git/refs/original beibehalten.

Das bedeutet, dass Sie für diesen alten Verlauf SHA1 eine Schleife machen können:

%Vor%

Wenn die Änderungen auf eine Verzweigung beschränkt waren, können Sie die neue SHA1 leicht mit der alten abgleichen (die erste alte entspricht der ersten Übergabe der umgeschriebenen Verzweigung, die zweite alte ... und so weiter)

Wenn nicht, müssten Sie nach einer Drehzahl suchen, um eine Übereinstimmung zu finden (dasselbe Datum, vernünftige Commit-Nachricht)

%Vor%

Stellen Sie sicher, dass der Parent-Repo seine Refs für das Submodul aktualisiert:

%Vor%

Auf diese Weise sind die neuen SHA1 verfügbar.

Schließlich können Sie im übergeordneten Repo einen Filter-Zweig erstellen, der nach einem Gitlink , spezieller Eintrag im Index , der zu einem der alten SHA1 passt.

Für jede Übereinstimmung, checkst du die neue SHA1 im Submodul-Ordner aus, gehst zurück zum übergeordneten Repo, füge hinzu und füge ein: das wird eine neue gitlink SHA1 aufnehmen.

%Vor%     
VonC 18.06.2016, 07:28
quelle

Tags und Links