2011-01-04 7 views
4

So habe ich derzeit Schienen Apps mit Git und GitHub codiert. Ich arbeite normalerweise alleine, aber in meinem letzten Projekt arbeite ich mit einem zweiten Entwickler. Ich versuche, die Standardmethoden für die Arbeit mit einem anderen Benutzer herauszufinden.Korrekter Workflow mit Git und GitHub

Zur Zeit hatte ich ihn Gabel meine gitrepo, und dann nur Pull-Anforderungen senden, wenn er Änderungen bereit hat. Das war nicht so schlimm, außer dass ich viel mehr code - und wenn es Änderungen in der Fork-Queue gibt, die er pushen kann, scheitern viele (auch wenn er seit dem letzten Mal, als er meins gedrückt hat, keine Änderungen vorgenommen hat)).

Der ganze Prozess scheint für ihn effizienter zu sein, immer wieder neu zu forkieren, was mich denken lässt, dass wir etwas falsch machen. Sollten wir Zweige statt Gabeln verwenden? Oder vielleicht Gabeln und Zweige?

Danke!

Antwort

1

Der zweite Entwickler sollte zuerst den GitHub Repo in sein lokales Repo ziehen und dort einen Konflikt lösen.

Und dann kann er Pull-Anfragen machen.

  • keine Notwendigkeit, Gabel wieder (was Sinn ohnehin nicht machen: ein „fork“ ist ein Klon auf der Seite GitHub)
  • keine Notwendigkeit für einen extra Zweig (wenn Sie beide für arbeiten der gleiche Satz von Funktion können Sie arbeiten beide auf ‚master‘ zum Beispiel)

die Idee einer Pull-Anforderung bleibt Patches zu unterbreiten, die Ihren GitHub Repo wird) vorspulen diejenigen (einfach anzuwenden.
Und das wird erreicht, indem Sie zuerst alle Konflikte lokal lösen, bevor Sie eine Pull-Anfrage machen.


Die anderen Optionen wären die zweite Entwickler als „Mitarbeiter“ auf GitHub Projekt zu erklären (er direkt zu schieben wäre in der Lage), aber das wäre nicht die Tatsache ändern, dass ein „Pull-first“ ist notwendig, um sicherzustellen, dass der Push einfach sein wird.

+0

Nun, Teil des Problems, sagen wir, wir haben den exakt gleichen Code. Dann mache ich eine Menge Veränderungen. Es sollte keine Konflikte geben, wenn er zieht, weil er keine Änderungen vorgenommen hat. Und doch wird es Konflikte geben. Vielleicht ist das nur ein Teil von git, das ich aufgrund meiner Erfahrung mit svn nicht verstehe? – Elliot

+0

@Elliot: Richtig ... in diesem Fall sollte er vielleicht seinen eigenen Zweig machen und seine Pull-Anfrage von diesem Zweig zu deinem GitHub Repo machen. Es könnte ein Problem mit dem gemeinsamen Vorfahren sein. Können Sie diese Konfiguration testen (Pull-Anforderung für Patches, die in einer lokalen Verzweigung statt direkt in derselben Verzweigung erstellt wurden)? – VonC

1

Es gibt eine Reihe von git-Workflows, die Ihnen offenstehen, weil es ein flexibles Werkzeug ist, aber ein einfacher Workflow besteht darin, einen 'Master'-Zweig und einen' Entwicklungs'-Zweig zu haben. Sie können Push- und Pull-Vorgänge direkt zu Ihrem Repo durchführen, ohne auf Github verzichten zu müssen und ohne dass Ihr Mitarbeiter ständig Github-Pull-Requests senden muss.

Sie können die meisten Ihrer lokalen Commits auf dem Zweig entwickeln, aber häufig aus dem Remote-Entwicklungszweig herunterziehen, um den Code des anderen zu fusionieren - es ist in diesem Stadium, dass Sie mit Merge-Konflikten umgehen können Fernbedienung.

Weniger häufig können Sie Master herunterziehen und das mit entwickeln. Die Idee ist, dass der Master-Zweig stabiler ist und jederzeit für die Veröffentlichung vorbereitet werden kann, so dass keine aktive Entwicklung darauf stattfindet. Das ist alles dazu.

Wenn Sie weiter gehen möchten, können Sie beide "Feature-Zweige" aus Ihrem Zweig zu entwickeln, aber das Prinzip ist das gleiche - zurück zu "up" zu entwickeln, und von dort nach oben zu meistern.

Die wichtige Sache ist, Ihre Arbeit häufig zu synchronisieren (zusammenzufügen), andernfalls sind die Unterschiede in Ihren getrennten Kopien der Codebasis wahrscheinlich größer, was eine größere Wahrscheinlichkeit von Konflikten bedeutet. Wenn Sie weiterhin Konflikte haben, drücken und ziehen Sie häufiger, so dass die Unterschiede kleiner und einfacher zu handhaben sind.

Konflikte treten besonders häufig auf, wenn Sie beide stark an denselben Dateien arbeiten. In solchen Fällen lohnt es sich manchmal, organisiert zu sein und die Arbeit in Funktionen einzuteilen, die verschiedene Teile (Dateien) der Codebasis verändern, so dass es weniger wahrscheinlich ist, dass sie sich gegenseitig auf die Füße treten.

Denken Sie daran, Ihre lokalen Änderungen vor dem Ziehen zu bestätigen, andernfalls werden die Änderungen als "Staging" betrachtet und nicht automatisch während des Ziehens zusammengeführt. Glücklicherweise ist Git ziemlich fehlerverzeihend und sehr gut im Umgang mit Merge-Konflikten.

Verwandte Themen