Hallo,
ich versioniere jetzt schon länger meine Projekte mit Git und komme
damit auch relativ gut zurecht. Jetzt wollte ich aber mal mit GitHub
anfangen, also das ganze auf einem externen Server. Soweit ja nicht so
schwer, aber dennoch habe ich eine Frage:
Ich klone das Repo
Ich lege einen neuen Branch an
Ich mache ein paar Commits
Währenddessen legt ein anderer einen weiteren Branch an und uploadet das
Wie kann ich jetzt diesen Branch samt aller Commits runterladen, mit
fetchmuss ich dann ja noch mergen, um darauf schreiben zu können, darauf
habe ich allerdings nicht wirklich Lust.
Ich will also quasi das gesamte Repo herunterladen und dabei will ich
dann auch auf alle schreibzugriff haben.
Geht das, ist das nicht so vorgesehen oder bin zu doof?
Vielen Dank im Vorraus,
Ivo
"git pull" ist git fetch + git merge in Einem.
Um neue Remote-Branches auch lokal zu haben, kannst du "git checkout
foo" benutzen, wobei "foo" der Name des Remote-Branches ist (der volle
Name wäre remotes/origin/foo).
Danke schon mal, aber wenn ich die Dokumentation richtig verstanden
habe, mergst git pull nur in den aktuellen Branch, wenn ich also noch
einen weiteren Branch habe, wird dort nicht gemergt, oder habe ich das
falsch verstanden?
Ivo
Ivo Z. schrieb:> Währenddessen legt ein anderer einen weiteren Branch an und uploadet das
Im Normalfall wird das nicht passieren, weil man nur seltenst ein
Repository für Fremde zum Schreiben frei gibt. Der gebräuchliche Weg
ist, daß jemand dein Repo cloned, neuen Code eincheckt und dir einen
pull-request schickt, damit du den Change aus seinem Repo in deins
mergst und damit übernimmst.
Das mag auf den ersten Blick ungewöhnlich erscheinen, hat aber den
Vorteil, daß Code-Review und Tests nicht übersprungen werden können (es
sei denn, du machst das selbst).
Axel S. schrieb:> Ivo Z. schrieb:>> Währenddessen legt ein anderer einen weiteren Branch an und uploadet das>> Im Normalfall wird das nicht passieren, weil man nur seltenst ein> Repository für Fremde zum Schreiben frei gibt.
Gut, kluger Gedanke, bin ich selber noch nicht drauf gekommen (also bin
ich doch zu doof;-)
Dann bleibt dennoch die prinzipielle Frage, wie geht das? Es gibt ja
auch durchaus Projekte mit mehreren Entwicklern. Oder gibt es dann
trotzdem nur einen mit Schreibzugriff und die anderen Entwickler müssen
weiterhin PRs stellen?
Ivo
Ich wärme diesen Thread noch mal auf:
Ich lege lokal einen neuen Branch an
Mache auf dem Branch ein paar Commits
Lade den Branch hoch (git push neuerbranch oder?)
Merge auf Github die Branches
Und wie kriege ich jetzt das Merging und die Löschung des Branches lokal
ins Repo?
Oder muss ich lokal mergen und dann hochladen?
Danke für eure Hilfe,
Ivo
Also lokal mergen? Über git merge oder einen Pull-Request? Bei git merge
und löschen des Branchs wird doch aber das löschen nicht synchronisiert
oder habe ich da was nicht verstanden?
Ivo
Hä? Was ist denn ein lokaler Pull-Request?
Nein, der Branch wird nicht gelöscht wenn du git merge tippst, aber du
kannst git branch -D foo benutzen, dann ist er weg.
Statt merge kannst Du auch Deinen lokalen Branch "rebasen". Das zieht
quasi die Abzweigstelle nach oben. Jedesmal wenn die Kollegen wieder was
nach "master" gepusht haben machst Du in Deinem Branch einen Rebase auf
master und danach sieht es wieder so aus als ob Dein Branch auf der
Spitze von master aufbaut, also zuerst alle deren Änderungen in deren
Reihenfolge und ganz oben drauf dann Deine Änderung relativ zu deren
letzten Stand.
Rebasen würd ich aber nur mit privaten Branches machen die außer Dir
niemand anders trackt, denn jedesmal wenn Du Deinen Branch quasi an der
Abzweigstelle herausreißt und oben an der Spitze wieder reinschraubst
hast Du die History Deines Branches umgeschrieben (die ganzen neu
hinzugekommenen Änderungen im master mussten beim Umstöpseln ja in den
Branch eingearbeitet werden so als wären sie schon immer in Deinem
Branch dringewesen [denn er baut ja darauf auf]).
Sven B. schrieb:> Hä? Was ist denn ein lokaler Pull-Request?>> Nein, der Branch wird nicht gelöscht wenn du git merge tippst, aber du> kannst git branch -D foo benutzen, dann ist er weg.
Sorry, dass ich erst jetzt antworte, bin vorher nicht dazu gekommen.
Lokaler PR, das meinte ich nicht, da habe ich mich wohl etwas
missverständlich ausgedrückt.
Soweit ich das jetzt verstanden habe, macht man in der Gruppe einen PR
und alleine git merge, oder?
Das einzige was ich dann nicht verstehe, ist wie ich dann das lokale
löschen des Branches sysnchronisiere, oder wird der Branch einfach nicht
gelöscht und bleibt?
Ivo
Ivo Z. schrieb:> Das einzige was ich dann nicht verstehe, ist wie ich dann das lokale> löschen des Branches sysnchronisiere, oder wird der Branch einfach nicht> gelöscht und bleibt?>> Ivo
Wenn der Branch zurück in den Master gemergt wurde dann sieht man in der
Historie wie es verzweigt und weiter oben wieder zusammenläuft. Du
kannst dann zwar das Schildchen an der Spitze des Branches wegmachen so
daß er keinen Namen mehr hat aber der Verlauf (Verzweigung, Commits,
Zusammenführung) bleibt natürlich stehen, er gehört ja jetzt zur
offiziellen Historie des master-Branches und Deine Commits gehen so wie
sie sind in die Geschichte ein.
Ein Branch ist nur ein Name für einen Commit, sonst nichts.
Das ganze Konzept "Pull Request" ist ein Meta-Begrif. Es entsteht durch
Konventionen, wie git in bestimmten Umfeldern benutzt. Git selbst kennt
so etwas nicht.
Kann man, hat eigentlich keinen Effekt außer dass halt der Name in der
List der Branches steht, was schon irgendwann störend sein kann wenn es
zu viele werden.