2012-12-06 15 views
5

Ich habe subrepository Struktur wie folgt in TortoiseHg:Mit subrepositories mit bitbucket und ToritoiseHg

/MainFolder/ 
/MainFolder/SubFolder1 
/MainFolder/SubFolder2 

Hauptordner ist ein privates Repository auf bitbucket SubFolder1 ist ein privates Repository auf bitbucket Unterordner2 ist ein privates Repository auf bitbucket

Die Datei .hgsub innen Hauptordner sieht wie folgt aus:

SubFolder1 = SubFolder1 
SubFolder2 = SubFolder2 

Die Datei .hgsubstat in MainFolder hat auch gültige Guids und Subrepository-Namen.

Das Problem ist, wenn ich versuche, zu bitbucket für MainFolder zu schieben, zuerst drückt es den MainFolder, dann SubFolder1, aber wenn es zu SubFolder2 kommt, löst TortoiseHg Fehler "abort: Repository ist nicht verwandt".

Wenn ich mein MainFolder-Repository auf bitbucket überprüfe, hat es tatsächlich den Inhalt von SubFolder1 (sollte dort als Subrepository aufgeführt sein).

Wie kann ich das beheben, damit der MainFolder korrekt als übergeordnetes Repository hochgeladen wird und SubFolder1 und SubFolder2 als Unter-Repository auf bitbucket aufgelistet werden?

+1

Ich habe auch versucht mit [Subpfade] wie bei [link] in Beispiel für subrepository gezeigt (https://bitbucket.org/kiilerix/subrepodemo/). Ich habe folgendes am Ende meiner .hgsub-Datei hinzugefügt: (https: // (?: [^ @] + @)? Bitbucket \ .org/[^ /] +/[^ /] +)/(. *) = \ 1- \ 2 Dies hat auch nicht funktioniert, da das Repository für die ersetzte Benutzerschnittstelle nicht existiert. Gibt es eine andere Möglichkeit, dies zu tun, ohne alle meine Repositorys so umzubenennen, dass sie dem regulären Ausdruck entsprechen? Da dies auch ein privates Repository ist, fügt bitbucket dem formatierten Link einen Benutzernamen hinzu und schlägt anderen Benutzern fehl. – samirjaiswal

Antwort

6

Die example in bitbucket Dokumentation gezeigt erfordert Repositories umbenennen, so dass alle Repositories als MainRepository-SubRepository benannt sind. Ich wollte nicht alle meine Repositorys umbenennen, so dass der reguläre Ausdruck wie im folgenden Beispiel geändert wurde und jetzt korrekt funktioniert. Für diese Version ist das Trennzeichen im Repository-Namen nicht erforderlich. Das Haupt-Repository und die Unter-Repositories können unabhängig voneinander benannt werden. Das Beispiel .hgsub sieht so aus:

SubFolder1 = SubFolder1 
SubFolder2 = SubFolder2 
[subpaths] 
(https://(?:[^@][email protected])?bitbucket\.org/[^/]+)(/[^/]+)/(.*) = \1/\3 
1

Bitbucket macht Subrepos in situ nicht. Daher versucht Mercurial, jedes Ihrer Repositorys an denselben Speicherort zu verschieben, und beschwert sich, wenn Sie versuchen, den Repo-Unterordner2 in eine Remote-Kopie des Unterordner-Repo zu verschieben.

Subrepositories sind scheinbar Bibliotheken, die von mehreren Projekten gemeinsam genutzt werden und daher nicht unter einem einzigen Hauptrepo, sondern in ihrem eigenen Raum leben. Daher müssen Sie separate Remote-Repositorys erstellen, in denen jedes Subrepository (Bibliothek) untergebracht ist, und auf diesen separaten Remote-Pfad in der .hgsub-Datei verweisen.

Beispiel: Ihr Beispielprojekt drei bitbucket gehosteten haben könnte Repositories

https://bitbucket.org/bitbucketname/main_project 
https://bitbucket.org/bitbucketname/library1 
https://bitbucket.org/bitbucketname/library2 

Sie möchten Ihren lokalen Klon des Dateibereich wie folgt aussehen:

/MainFolder/ 
/MainFolder/SubFolder1 
/MainFolder/SubFolder2 

In Ihrem lokalen Klon von main_project (Hauptordner), setzen Sie den Standardpfad des übergeordneten Repository auf https://bitbucket.org/bitbucketname/main_project

dh /MainFolder/.hg/hgrc enthält

[paths] 
default = https://bitbucket.org/bitbucketname/main_project 

Geben Sie nun die Remote-Pfade der Unterrepositorys/Bibliotheken in der .hgsub-Datei an. Das allgemeine Format des.hgsub Einträge sind:

local/path/to/subrepo = remote/path/to/matching/library 

So Ihrer .hgsub relativ lokale und Remote-Pfade (relativ zur Position des Hauptes Repo lokal oder aus der Ferne, wie es der Fall sein kann) enthalten könnte:

SubFolder1 = ../library1 
SubFolder2 = ../library2 

oder relativ lokale Pfade mit absoluten Pfaden zu jeder Remote-Repo-Bibliothek:

SubFolder1 = https://bitbucket.org/bitbucketname/library1 
SubFolder2 = https://bitbucket.org/bitbucketname/library2 

oder absolute Pfade für alles:

012.351.

Nun, wenn Sie von Ihrem lokalen Hauptprojekt aus drücken, weiß Mercurial genau, wo alle Unter-Repositorys (lokal) zu finden sind und wohin die Änderungen an jeder Bibliothek (remote) übertragen werden.

Nehmen wir an, Sie möchten die Bibliothek von jemand anderem Ihrem Projekt hinzufügen. Dann wird Ihr .hgsub könnte wie folgt aussehen:

SubFolder1 = ../library1 
SubFolder2 = ../library2 
another_library = https://bitbucket.org/honkaboy/honkaboys_excellent_library