Looking for git Keywords? Try Ask4Keywords

Gitgit-svn


Bemerkungen

Klonen wirklich großer SVN-Repositories

Wenn der SVN-Repo-Verlauf wirklich sehr groß ist, kann dies einige Stunden dauern, da git-svn den gesamten Verlauf des SVN-Repos neu erstellen muss. Glücklicherweise müssen Sie das SVN-Repo nur einmal klonen. Wie bei jedem anderen git-Repository können Sie den Repo-Ordner einfach auf andere Mitbearbeiter kopieren. Das Kopieren des Ordners auf mehrere Computer ist schneller als das Klonen großer SVN-Repos von Grund auf.

Über Commits und SHA1

Ihre lokalen git Commits wird neu geschrieben werden , wenn der Befehl git svn dcommit . Dieser Befehl fügt der Nachricht von git commit einen Text hinzu, der auf die auf dem SVN-Server erstellte SVN-Version verweist, was sehr nützlich ist. Wenn Sie jedoch einen neuen Text hinzufügen, müssen Sie die Nachricht eines vorhandenen Commits ändern, was eigentlich nicht möglich ist: git-Commits sind nicht veränderbar. Die Lösung besteht darin, ein neues Commit mit demselben Inhalt und der neuen Nachricht zu erstellen, aber technisch gesehen ist es sowieso ein neues Commit (dh die SHA1 des Git-Commits ändert sich).

Da für git-svn erstellte git-Commits lokal sind, unterscheiden sich die SHA1-IDs für git-Commits zwischen den einzelnen git-Repositorys! Das bedeutet, dass Sie ein SHA1 nicht verwenden können, um auf ein Commit einer anderen Person zu verweisen, da das gleiche Commit in jedem lokalen Git-Repository ein anderes SHA1 hat. Sie müssen sich auf die an die Commit-Nachricht angehängte svn-Revisionsnummer verlassen, wenn Sie auf den SVN-Server pushen, wenn Sie ein Commit zwischen verschiedenen Kopien des Repositorys referenzieren möchten.

Sie können den SHA1 jedoch für lokale Operationen verwenden (ein bestimmtes Commit anzeigen, abgleichen, zurücksetzen usw.).

Fehlerbehebung

Der Befehl git svn rebase gibt einen Prüfsummenfehler aus

Der Befehl git svn rebase löst einen Fehler ähnlich dem folgenden aus:

  Checksum mismatch: <path_to_file> <some_kind_of_sha1>
  expected: <checksum_number_1>
    got: <checksum_number_2>

Die Lösung für dieses Problem ist, svn auf die Revision zurückzusetzen, wenn die problematische Datei zum letzten Mal geändert wurde. Führen Sie einen git svn-Abruf durch, damit die SVN-Historie wiederhergestellt wird. Die Befehle zum SVN-Reset sind:

  • git log -1 - <path_to_file> (kopieren Sie die SVN-Revisionsnummer, die in der Festschreibungsnachricht <path_to_file> )
  • git svn reset <revision_number>
  • git svn holen

Sie sollten in der Lage sein, Daten erneut aus dem SVN zu pushen / zu ziehen

Datei wurde beim Festschreiben nicht gefunden Wenn Sie versuchen, SVN abzurufen oder von diesem abzurufen, wird eine ähnliche Fehlermeldung angezeigt

<file_path> was not found in commit <hash>

Dies bedeutet, dass eine Revision in SVN versucht, eine Datei zu ändern, die aus irgendeinem Grund in Ihrer lokalen Kopie nicht vorhanden ist. Der beste Weg, um diesen Fehler zu beseitigen, besteht darin, einen Abruf zu erzwingen, der den Pfad dieser Datei ignoriert, und er wird in der neuesten SVN-Version auf seinen Status aktualisiert:

  • git svn fetch --ignore-paths <file_path>

git-svn Verwandte Beispiele