2010-03-03 6 views
22

Ich habe Schwierigkeiten, verschachtelte Repositorys mit TortoiseHg korrekt zu verfolgen.Was ist der richtige Weg, verschachtelte Hg-Repositories mit Mercurial/TortoiseHg zu behandeln?

Ich habe ein Haupt-Repository, das mein ganzes Projekt verfolgt. Dieses Projekt enthält mehrere kleine Plugins, die in einem Plugins/Unterverzeichnis gespeichert sind.

Ich würde gerne jedes Plugin unabhängig verfolgen (commit und BitBucket für jeden von ihnen), während immer noch in der Lage, ein "ganzes" Commit für mein Projekt, einschließlich der Änderungen an den Plugins und schieben Sie es zu machen ein anderer Ort (nicht BitBucket).

Was ich bisher gemacht habe, ist ein neues Repo für jedes meiner Plugins zu erstellen. Ich kann sie begehen und sie leicht zu BitBucket schieben. Aber als ich mein "Haupt" -Repository begehen wollte, zeigt TortoiseHg eine Fehlermeldung an, die besagt, dass abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'.

Ich kann sehen, dass ich etwas falsch mache, aber ich kann nicht sagen, was.

Ich benutze eine Nacht von Mercurial und TortoiseHg (ToirtoiseHg Version 0.9.3 + 237-ea50f793bbe4 und Mercurial-1.4.3 + 225-70dea42c9406) auf WinXP. Ich habe gelesen, dass dieser TortoiseHg-Build Subrepos-Handling hinzugefügt wurde, aber ich bin mir nicht einmal sicher, ob Subrepos das Feature ist, das ich hier verwenden soll.

aktualisieren
ich einige Fortschritte gemacht habe, aber noch kann sie nicht den Weg zur Arbeit Ich mag würde.
Hier ist meine Struktur:

-- .hg 
-- core 
-- app 
    -- file.php 
    -- file.css 
    -- plugins 
     -- plugin1 
      -- file1.php 
     -- plugin2 
      -- file2.php 

Ich ging zu app/plugins und geklont hier ein Plugin (benannt plugin3) von BitBucket. Ich erstellte dann eine .hgsub-Datei im Stammverzeichnis und fügte app/plugins/plugin3 = app/plugins/plugin3 hinzu. Ich konnte dann mein ganzes Verzeichnis übernehmen.

Aber dann habe ich versucht, die neueste Version von plugin1 von BitBucket zu greifen, also ging ich zu app/plugins, löschte den plugin1/Ordner und klonte das plugin1 von BitBucket. Ich fügte dann app/plugins/plugin1 = app/plugins/plugin1 zu .hgsub hinzu, aber als ich versuchte es zu begehen wurde ich mit abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

Das Problem scheint zu feuern, wenn mein subrepo den gleichen Namen wie ein Verzeichnis hat, das bereits von Hg im plugins/Verzeichnis verfolgt wird.

Was mache ich falsch? Soll ich etwas Spezielles in der .hg meiner Plugins hinzufügen/bearbeiten?

aktualisieren
Ich habe es endlich geschafft zu bekommen, wie ich will zu arbeiten.
Ich musste Mercurial "manuell" sagen, um die plugins/plugin1, plugins/plugin2 Verzeichnisse zu entfernen, die Änderung zu committen, dann das plugin1 und plugin2 von BitBucket zurück zu klonen, app/plugins/plugin1 = app/plugins/plugin1 zu .hgsub hinzuzufügen und alles zu committen. Es funktionierte.
Der wichtige Schritt war, nachdem Sie die Ordner plugin1/plugin2 gelöscht haben.

+0

Aus dem doc, die Zeile mit einem '.hgsub' ist" Der erste 'verschachtelte' ist der Pfad in unserem Arbeitsverzeichnis, und der zweite ist eine URL oder ein Pfad von ': also sollten Sie nicht ' app/plugins/plugin3 = app/plugins/plugin3' aber 'app/plugins/plugin3 = bitbucket url für plugin3'. Dito für plugin1 – VonC

+0

Ich habe das versucht, mit 'http: // bitbucket.org/Benutzername/plugin3 /', 'https: // Benutzername @ bitbucket.org/Benutzername/plugin3 /' und sogar 'ssh: // hg @ bitbucket.org/username/plugin3' als URL aber immer noch die gleiche Abbruchmeldung. Ich habe auch direkt von der Kommandozeile versucht, und das Ergebnis ist das gleiche. – pixelastic

+0

Es tut uns leid, dass Sie Ihren letzten Kommentar nicht beantwortet haben, aber wenn Ihr Kommentar nicht mit '@VonC' beginnt, würde ich nicht benachrichtigt werden. Siehe http://blog.stackoverflow.com/2010/01/new-improved-comments-with-reply/ (Abschnitt "Kommentar @benutzername Benachrichtigungen") – VonC

Antwort

18

Ich habe es endlich geschafft, es so zu machen, wie ich es gerne hätte. Ich benutze TortoiseHg auf winXP, deshalb kann ich dir nicht sagen, welche hg-Aufrufe intern gemacht wurden, aber ich denke nicht, dass irgendwas Schickes hier verwendet wird.

Ich begann mit einem bestehenden Repo, in dem ich ein plugins/ Verzeichnis mit plugin1/, plugin/2 Verzeichnisse (nicht Repositories, nur einfache Verzeichnisse) gefüllt hatte. Ich hatte auch diese Plugins online, auf BitBucket gehostet.

  • Ich ging zuerst nach meinem plugins/ Verzeichnis direkt auf plugin1/ klicken, TortoiseHg => Remove Files.
  • ich an die Wurzel meines Repo wieder ausgewählt wird, kopieren und Hg Commit
  • Dann ging ich zurück zu meinem plugins/ Verzeichnis, rechts klicken, TortoiseHg => Clone... ich die http-Adresse des Plugins auf bit bucket (http://bitbucket.org/username/plugin1/ und angeklickt Done
  • der wieder an die Wurzel des Haupt Repo. erstellt I (oder bearbeitet, wenn die Datei bereits vorhanden) eine .hgsub Datei und fügen sie die plugins/plugin1 = plugins/plugin1 Linie in seinem Inneren.
  • ich war dann in der Lage, entweder die Hauptwurzel Repo zu begehen oder das plugin1 repo unabhängig

Beachten Sie, dass die zusätzlichen Schritte remove und commit nur erforderlich sind, wenn der neu geklonte Repo denselben Namen wie ein bereits überwachtes Verzeichnis hat.

+0

@Pixelastic: Vielen Dank für das Feedback (+1) – VonC

+0

Sweet. Du hast ein paar Fragen beantwortet, die ich hatte. –

5

sollten Sie versuchen, mit:

Subrepositories ein Feature, das Ihnen erlaubt, Behandeln Sie eine Sammlung von Repositories als Gruppe.
Damit können Sie Projekte und ihre zugeordneten Bibliotheken als Gruppe klonen, festschreiben, verschieben und ziehen.

+0

Muss ich .hgsub-Dateien manuell bearbeiten oder behandelt TortoiseHg das alles alleine (durch Überprüfung einiger Optionen)? – pixelastic

+0

@Pixelastic: für TortoiseHg und subrepos, siehe http: // stackoverflow.com/questions/2083393/mercurial-subrepos-how-do-Sie-erstellen-sie-und-wie-tun-sie-Arbeit – VonC

+0

@VonC: Danke, aber ich habe diesen Artikel bereits gelesen und ich will nicht haben meine Plugins in einem separaten Ordner als meine Haupt-App, würde ich sie als Unterverzeichnisse mögen. Ich habe die Hauptfrage mit meinem Fortschritt aktualisiert. Danke für deine Zeit – pixelastic

Verwandte Themen