Hinzufügen eines Git-Subrepository zu Mercurial

Lesezeit: 3 Minuten

Benutzer-Avatar
summatix

Ich habe versucht, ein Projekt mit Bitbucket einzurichten, dessen Projektabhängigkeiten auf Github gehostet werden. Mit dem Hg-Git Mercurial Plugin komme ich fast dorthin.

Aber wenn es an der Zeit ist zu pushen, werden die Dinge mühsam.

Die Dokumentation für Mercurial-Unterrepositorys Zustände:

2.4 Drücken

Mercurial versucht automatisch, beim Pushen zuerst alle Subrepos des aktuellen Repositorys zu pushen. Dadurch wird sichergestellt, dass neue Änderungssätze in Unterrepositorys verfügbar sind, wenn sie von Repositories der obersten Ebene referenziert werden.

Aber das verursacht ein großes Problem, da ich nicht alle Subrepositories pushen möchte (warum sollte ich?) – ich habe nur Lesezugriff auf sie, also wird github es nicht zulassen. Nur das Haupt-Repository muss auf den Remote-Server verschoben werden, aber ich kann nicht herausfinden, wie das geht. hg möchte die Kontrolle übernehmen und alle Subrepositories pushen, unabhängig davon, ob es Änderungen gibt oder nicht. Gibt es eine Möglichkeit dies zu umgehen Besonderheit?

Die einzigen Dinge, die gedrückt werden müssen, sind .hgsub und .hgsubstate. Sobald sie über alternative Routen gepusht wurden (Aktualisierung auf ein Changeset, in dem die Subrepositories nicht vorhanden sind), ist es möglich, die Änderungen dann zu aktualisieren und aus den Remote-Repositories zu ziehen, aber wenn ich erneut pushen würde, während ich mich in einem Changeset mit dem Subrepositories wiederholt sich die ganze Tortur.

Für zukünftige Referenzen unterstützt der Entwicklungszweig von Mercurial (und damit die kommende Version 1.8) jetzt native Git-Subrepos. Dieser spezielle Fall ist sehr gut implementiert und ein Push aus dem Root-Repository wird das Git-Subrepo nur dann anweisen, zu pushen, wenn nicht bekannt ist, dass sein Remote-Repository den aktuellen Commit hat.

Dies ist aufgrund der Push-Methode von Mercurial nicht möglich. Das ist ein von Entwurf Error.

Die beste Lösung besteht darin, auf eine frühere Revision zu aktualisieren, in der die Unterrepositories nicht vorhanden sind, und dann zu pushen. Dadurch wird die Beschränkung von Mercurial umgangen und das Erforderliche hochgeladen .hgsub und .hgsubstate Dateien. Das ist ein wenig umständlich, aber bisher der beste Weg, um Mercurial und Git dazu zu bringen, miteinander zu arbeiten.

Vielleicht wird Hg-Git in Zukunft aktualisiert, um diesen Anwendungsfall automatisch zu handhaben.

  • Es ist ein Fehler, der sich bei der Verwendung von github, hg-git und einer Subrepository-Funktion manifestiert. Versuchen Sie, ein natives Git-Subrepository zu verwenden

    – Lukasz Gruner

    25. August 2012 um 14:24 Uhr

Ich denke, Sie sollten mehrere Repositorys verwenden. DVCS funktioniert so besser.

Erstellen Sie beispielsweise ein Repository, das die Abhängigkeiten von github enthält. Sie ziehen nur dieses Repo ein, um die Änderungen zu erhalten, Sie drücken nie. Dann haben Sie ein weiteres Repository für Ihr Projekt, für die Entwicklung. Hier können Sie tun und lassen, was Sie wollen. Und dann verlinken Sie auf Ihr eigenes hg-Repo für die Abhängigkeiten.

Das ist, wenn ich dein Problem und das, was du zu tun versuchst, richtig verstanden habe 🙂

  • Entschuldigung, ich verstehe nicht. Mein Problem ist, dass ich Mercurial und Git brauche, um gut miteinander zu spielen – was sie auch tun. Aber das sogenannte hg-Feature macht die Dinge nur ein wenig lästig.

    – summatix

    30. Oktober 2010 um 22:00 Uhr

  • Es ist kein „so genanntes Feature“, sondern ein wesentlicher Schritt in der Arbeit mit hg. Push/Pull synchronisiert Ihr lokales Repository mit dem entfernten. Was ich vorschlage, ist, dass Sie möglicherweise eine andere Repository-Konfiguration für das benötigen, was Sie versuchen zu tun; Bei der Verwendung von git/mercurial ist es üblich, mehrere Repositories für Ihr Projekt zu haben. Das Pushen in Ihrem Mercurial-Repo sollte sich nicht auf die Dinge auswirken, die Sie von Github zu bekommen versuchen, und natürlich sollten Sie nicht in das Github-Repo pushen.

    – Alex Florescu

    30. Oktober 2010 um 23:11 Uhr


Wenn Sie keine ausgehenden Änderungssätze im Unterrepository haben, sollte der „Push“ eigentlich nichts anderes tun, als die neueste Änderungssatzliste aus dem Remote-Repository abzurufen. Daher findet der eigentliche „Push“-Teil des Pushs nicht statt. Ich habe erfolgreich schreibgeschützte BitBucket-Repositories als Submodule verwendet.

1064210cookie-checkHinzufügen eines Git-Subrepository zu Mercurial

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

Privacy policy