Wie bekomme ich "git clone --recursive` neu Submodule' Fernbedienungen und Zweige?
Habe ich ein Projekt mit einer Handvoll Submodule. Viele von Ihnen sind geklont aus einem GitHub-fork, auf die ich Hinzugefügt habe, einen Zweig für meine custom mods. Ein typisches setup ist wie so:
Im lokalen Ordner: MyProject1/Frameworks/SomeAmazingRepo/
$ git branch -vva
*my-fork 123456 [my-fork/my-fork] Latest commit msg from fork
master abcdef [origin/master] Latest commit msg from original repo
remotes/my-fork/my-fork 123456 [my-fork/my-fork] Latest commit msg from fork
remotes/my-fork/master abcdef [origin/master] Latest commit msg from original repo
remotes/origin/HEAD -> origin/master
remotes/origin/master abcdef [origin/master] Latest commit msg from original repo
$ git remote -v
my-fork [email protected]:MyUser/SomeAmazingRepo.git (fetch)
my-fork [email protected]:MyUser/SomeAmazingRepo.git (push)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (fetch)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (push)
Ich git clone --recursive
mein Projekt zu beginnen, eine neue spin-off-Projekt, und wenn es beginnt zu recurse, es spuckt eine Fehlermeldung behauptet, es nicht finden können, die gespeichert sind verpflichtet, die für diese repos. Bei der Untersuchung scheint es, dass die Fernbedienungen noch nicht Hinzugefügt wurden und der Zweig Links (leer) im master ...
Im lokalen Ordner: MyProject2/Frameworks/SomeAmazingRepo/
$ git branch -vva
*master abcdef [origin/master] Latest commit msg from original repo
remotes/origin/HEAD -> origin/master
remotes/origin/master abcdef [origin/master] Latest commit msg from original repo
$ git remote -v
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (fetch)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (push)
Das einzige Heilmittel ist, zu gehen und fügen Sie die Fernbedienung manuell auf alle repos (sehr mühsam).
Gibt es ein ähnliches Problem in den Fällen, in denen gibt es zwei tracking-Zweige wie oben, jedoch nur ein remote (origin => mein github-fork). In diesen Fall, es findet die übergabe-und auscheckt, kann Sie aber nicht erstellen Sie die tracking-Zweig, so dass ein "baumeln" zu Begehen...sehr beängstigend, da es nicht Sie warnen!
Wie kann ich mein Klon-Projekt, so dass es zuverlässig erschafft die Submodule' Fernbedienungen und Zweige?
InformationsquelleAutor der Frage Hari Karam Singh | 2012-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
git clone --recursive
entsprichtgit submodule update --init --recursive
.Und ein git submodule update wird nur die Kasse erfasst SHA1 (aufgenommen in der Eltern-repo):
2012: So finden sich keine aktive Niederlassung in einem Submodul ist die norm.
Ein
git submodule foreach 'git checkout master'
zumindest stellen Sie den master-Zweig (wenn Sie sicher sind, dass alle aufgezeichneten SHA1-eigentlich ein Teil von einem 'master' - branch für die einzelnen Submodule.2013-2014: Sie können Ihren
.gitmodules
- Datei, um anzugeben, eine Filiale an der Kasse in Ihrem Submodul.Siehe "Wie aktualisiere ich meine git-Submodule aus bestimmten Branchen?"
Jede Fernbedienung, die Sie hinzufügen, die lokal in einem Submodul, wie
my-fork
sind nicht aufgenommen in der Eltern-repo überhaupt.Wenn Sie also ein Klon wieder, dass Eltern repo, es wird zum initialisieren und aktualisieren der Submodule als aufgenommen in die
.gitmodules
- Datei (Sie können ändern Sie diese Adresse, aber nur eine ist im Zusammenhang mit der jeweiligen teilmodule).Wenn Sie andere remote-Adresse zuordnen, um jedes Submodul, müssen Sie ein Skript, um den Prozess zu automatisieren.
Erläutert in "Die wahre Natur des Submodul", ein Submodul ist in Erster Linie da, um Aufzeichnung/Zugriff auf eine festen Punkt in der Geschichte.
Sie entwickeln können direkt in ein Submodul, aber Sie brauchen, um dorthin zu gehen und die richtige Niederlassung und/oder fügen Sie die richtigen Fernbedienungen.
Jedes mal, wenn Sie ein commit in ein Submodul, müssen Sie zu:
.gitmodules
des übergeordneten repo)Aber:
Wenn Sie gedrückt haben, um '
my-fork
", während die damit verbundenen remote-repo von diesem Submodul wurde nicht 'my-fork
'... dann der nächste Klon nicht in der Lage sein, checkout submodule Begehen.Update August 2014 (Git 2.1)
Sehen commit 9393ae7 von Matthew Chen (
charlesmchen
):Submodul: Dokument "
sync --recursive
"InformationsquelleAutor der Antwort VonC