Github-Organisationsrepositorys, Probleme, mehrere Entwickler und Forking - Best Workflow Practices

14

Ein seltsamer Titel, ja, aber ich denke, ich habe ein bisschen Boden zu decken.

Wir haben ein Organisationskonto auf Github mit privaten Repositories. Wir möchten die nativen Issues / Pull-Requests-Funktionen von Github nutzen (Pull-Requests sind genau das , was wir für Code-Reviews und Feature-Diskussionen wollen). Wir haben den Tool Hub von defunkt gefunden, der ein kleines Feature hat, ein vorhandenes Problem in eine Pull-Anfrage umzuwandeln und Ihre aktuelle Filiale automatisch damit zu verknüpfen.

Ich frage mich, ob es die beste Vorgehensweise ist, wenn jeder Entwickler in der Organisation das Repository der Organisation aufteilt, um seine Aufgaben zu erledigen / Fehlerbehebungen / etc. Dies scheint ein ziemlich solider Arbeitsablauf zu sein (wie es im Grunde bei jedem Open Source-Projekt auf github der Fall ist), aber wir möchten sicherstellen, dass wir Probleme verfolgen und Anfragen aus EINER Quelle, dem Repository des Unternehmens, abrufen können.

Ich habe also ein paar Fragen:

  1. Ist in diesem Fall ein Fork-per-Developer-Ansatz angemessen? Es scheint, als könnte es ein wenig übertrieben sein. Ich bin mir nicht sicher, ob wir für jeden Entwickler einen Fork benötigen, es sei denn, wir stellen Entwickler vor, die keinen direkten Push-Zugriff haben und deren Code überprüft werden muss. In diesem Fall möchten wir eine solche Richtlinie nur für diese Entwickler einrichten. Also, was ist besser? Alle Entwickler in einem einzigen Repository oder eine Abzweigung für alle?
  2. Hat jemand Erfahrung mit dem Hub-Tool, insbesondere der Pull-Request-Funktion? Wenn wir einen Fork pro Entwickler (oder sogar für weniger privilegierte Entwickler) durchführen, wird die Pull-Request-Funktion von Hub auf die Pull-Requests aus dem Upstream-Master-Repository (dem Repository der Organisation?) Angewendet oder hat sie ein anderes Verhalten?

BEARBEITEN
Ich habe einige Tests mit Problemen, Gabeln und Pull-Anfragen durchgeführt und festgestellt, dass dies der Fall ist. Wenn Sie ein Problem im Repository Ihrer Organisation erstellen, geben Sie das Repository aus Ihrer Organisation an Ihr eigenes Github-Konto weiter, nehmen Sie einige Änderungen vor und führen Sie es in der Hauptniederlassung Ihrer Gabel zusammen. Wenn Sie versuchen, auszuführen hub -i <issue #>, wird eine Fehlermeldung angezeigt User is not authorized to modify the issue. Offensichtlich wird dieser Arbeitsablauf nicht funktionieren.

Jim Rubenstein
quelle

Antworten:

6

Ist in diesem Fall ein Fork-per-Developer-Ansatz angemessen? Es scheint, als könnte es ein wenig übertrieben sein. Ich bin mir nicht sicher, ob wir für jeden Entwickler einen Fork benötigen, es sei denn, wir stellen Entwickler vor, die keinen direkten Push-Zugriff haben und deren Code überprüft werden muss. In diesem Fall möchten wir eine solche Richtlinie nur für diese Entwickler einrichten. Also, was ist besser? Alle Entwickler in einem einzigen Repository oder eine Abzweigung für alle?

Kommt auf die Größe Ihres Teams an, denke ich. Ich habe in einem kleinen Team gearbeitet, in dem wir nur ein einziges Repo hatten und Features ihre eigenen Filialen innerhalb dieses Repos hatten. Das hat bei uns prima geklappt.

Mittlerweile beteilige ich mich regelmäßig an einem größeren Open-Source-Projekt, bei dem ein paar Dutzend Menschen Zugriff auf das zentrale Repo haben. Wir machen immer noch alle wichtigen Entwicklungen im Bereich Personal Repos und senden PRs für Features, damit der Code überprüft werden kann, obwohl Bugfixes direkt übertragen werden können. Das Hauptrepo enthält nur Master- und Release-Zweige, so dass keine Unordnung entsteht. Feature-Zweige befinden sich in persönlichen Repos, sodass sie auch von anderen gesehen werden können (frühzeitige PRs machen andere im Team darauf aufmerksam, dass an einem Feature gearbeitet wird). Ich kann diesen Workflow für jedes Projekt mit mehr als einer Handvoll Entwicklern empfehlen. Der einzige Nachteil ist, mit mehreren Fernbedienungen arbeiten zu müssen.

Fred Foo
quelle
2

Der Fork-per-Developer-Ansatz ist ein sehr guter Ansatz, wenn Sie Wert auf Codeüberprüfungen und Codequalität legen. Das Schöne an Pull-Anfragen ist, dass die Verantwortung vom Betreuer auf den Entwickler verlagert wird.

Der Entwickler möchte seinen Code in die Hauptniederlassung aufnehmen und bittet um dessen Aufnahme.

Dies ist ein ganz anderer Kontext als das alte Modell, in dem die Leute sich verpflichten, und später musste der Rezensent ihnen sagen: "Oh, das, was Sie vor ein paar Wochen getan haben, war nicht so gut, beheben Sie es jetzt."

Wir verwenden dieses Modell in unserem Unternehmen. Pull-Anfragen machten Code-Anfragen realisierbar, förderten die Diskussion über den Code anderer Leute und halfen im Allgemeinen bei der Codequalität, selbst bei Entwicklern, die als Erste gegen das neue Tool waren. Ich habe das Gefühl, dass die Leute dadurch auch die Codeüberprüfungen ernster nehmen, weil der Prüfer den Code aktiv in den Hauptzweig einbinden muss, anstatt nur 'ok' oder 'nicht ok' zu sagen, nachdem der Code bereits festgeschrieben wurde.

Wilbert
quelle
1

Ich würde nicht für alles das Gabeln und Verzweigen tun. Das ist ein gutes Modell für Open-Source-Edelsteine ​​auf Github, aber Ihr Modell befindet sich in einer Organisation, die normalerweise ein höheres Maß an Vertrauen in Änderungen hat.

Ein wichtiger Punkt bei der Quellcodeverwaltung ist, dass Sie Änderungen sehen, rückgängig machen, rückgängig machen usw. können. Eine hohe Anzahl von Gabeln und Ästen in Ihrer Situation zu tun, ist meiner Meinung nach übertrieben.

Ich würde Zweige reservieren für Dinge wie: Versions-Upgrades, Ändern eines der Technologieteile, Arbeiten an einem Submodul für 3 Monate, das wenig mit der Hauptbasis gemein hat.

Ich kann es sein, dass ich in einer Organisation überhaupt nicht bin. Dieser Modus scheint eher für Open-Source-Projekte geeignet zu sein, die sich von internen Projekten unterscheiden.

Ich würde Ihren Fokus auf Tests und Code-Reviews verlagern. Schreiben Leute Tests? Sind sie gut? Werden Codeüberprüfungen durchgeführt?

Junkie
quelle
1
Wir schreiben nicht wirklich so viele Tests. Wir überprüfen den Code des anderen nur selten. Das Verfolgen von Fehlern und Implementierungen zu Lösungen ist für uns derzeit das wichtigste. Ich denke, jeder würde zustimmen, dass Tests in der Theorie gut sind und bei einem Projekt, das bei null beginnt, viel einfacher durchzuführen sind. Aber wir haben eine Menge älterer Projekte, die für das Schreiben von Tests sehr viel Zeit in Anspruch nehmen würden. Ich stimme im Allgemeinen über das Gabeln und Verzweigen zu. Wir kommen von HG. Kurzzeitfilialen zu haben, die eigentlich nicht Teil der öffentlichen Geschichte sind, erscheint uns seltsam, aber ich sehe definitiv den Zweck.
Jim Rubenstein
Ich sehe das Problem tatsächlich nicht in einer großen Codebasis vorhandener Funktionen. Morgen, wenn Sie eine große Korrektur durchführen, schreiben Sie einen Test, und schreiben Sie dann für die nächste Funktion einen Test. Sie müssen nicht zurückgehen und alte schreiben. Sie müssen nur anfangen, neue zu schreiben. Tu es genug und es besteht eine gute Chance, dass du den Test zuerst schreibst. Das ist professionelle Softwareentwicklung von Software, die zählt.
Junky
Übrigens, ich persönlich benutze git und stelle fest, dass es ein lokales Repository hat, im Gegensatz zu svn say, wo Sie sich direkt auf remote festlegen (kein Push / Pull), was mir hilft, zuerst lokal etwas zum Laufen zu bringen. Es ist einfacher, denn ich kann noch hinzufügen und festschreiben, ohne den letzten Schubs zu machen, bis ich fertig bin.
Junky
Sofern Sie nicht die dynamische ClearCase-Ansicht verwenden (von der Sie, falls Sie es jemals versucht haben, wissen, dass sie von PITA verwendet wird), haben Sie alles im Griff, da jede Kasse wirklich eine Gabel ist, nur eine, die in zentralen Versionskontrollsystemen nicht enthalten sein kann mehrfache Überarbeitungen. In dezentralen und verteilten Systemen (git ist eins) kann und ist es eine normale Abzweigung.
Jan Hudec