Was ist der beste Git-Workflow für die Arbeit mit einem Open Source-Projekt mit arbeitgeberspezifischen Änderungen?

11

Bei meinem derzeitigen Arbeitgeber verwenden wir ein Open-Source-Projekt, das auf Github gehostet wird, als Bestandteil unserer Anwendung. Ich habe an diesem Projekt gearbeitet, um sowohl einige Funktionen hinzuzufügen, die wir benötigen, als auch um sie in unsere Build-Systeme zu integrieren. Mein Manager und ich sind uns einig, dass wir so viel von unserer Arbeit an dieser Komponente wie möglich an das Open-Source-Projekt zurückgeben möchten. Meine Frage ist, was der beste Workflow / die beste Technik ist, um meine Git-Commits so zu verwalten, dass ich leicht Dinge herausfiltern kann, die sinnvoll sind, um sie dem Open-Source-Projekt wieder hinzuzufügen - Fehlerkorrekturen und neue Funktionen, die allgemein genug sind - von Dingen, die für unser Projekt spezifisch sind, wie Build-Speicherorte und Anwendungskonstanten.

Was ich bisher getan habe, ist die Pflege eines privaten Git-Zweigs, in dem ich alle meine Änderungen mit angemessener Granularität festschreibe. Ich cherry-pickfüge dann die Open-Sourcing-Commits zur Hauptniederlassung hinzu und sende sie an Github zurück.

Es scheint, als sollte ich Merge verwenden, um dies zu tun, damit ich nicht ständig separate Commits mit identischen Inhalten erstelle, aber ich bin mir nicht sicher, wie ich das tun soll, während ich die unternehmensspezifischen Commits ausschließe und einen angemessenen Workflow einhalte.

Ich nehme zum Beispiel an, ich könnte Open-Sourcing-fähige Dinge für Master- und unternehmensspezifische Dinge in der privaten Niederlassung festschreiben und dann den Master nach Bedarf in diese Niederlassung einbinden, wobei die Hauptniederlassung vor der Zusammenführung auf die Festschreibung zeigen würde, so dass ich dies könnte Legen Sie Open-Sourcing-fähige Dinge erneut fest und führen Sie sie dann erneut zusammen. Was an diesem Workflow unangenehm erscheint, ist, dass ich mich für alles, was ich tue, im Voraus entscheiden muss, zu welchem ​​Zweig er gehört, daran arbeiten muss, bis er abgeschlossen ist, ihn dann festschreiben und vor dem Testen zusammenführen muss. Eines der Dinge, die ich an Git wirklich mag, ist, wie einfach es ist, einfach alles zu tun, was Sie brauchen, damit Ihre Anwendung funktioniert, und später zu entscheiden, wie und wo Sie Ihre Änderungen übernehmen möchten. Soweit ich das beurteilen kann, gibt es dort, wenn Sie sich derzeit in einer Niederlassung befinden und einige Arbeiten erledigen müssen. '

Ist das, was ich mache, ein vernünftiger Workflow für langfristige Beiträge? Kann jemand einen anderen Workflow empfehlen, der möglicherweise besser ist, und warum ist er besser?

Mason
quelle
1
Sie können ganz einfach Arbeiten an einen anderen Zweig senden - mithilfe von rebase git-scm.com/book/en/Git-Branching-Rebasing . Solange Sie zuerst ein Commit durchführen, können Sie dieses Commit auf einen anderen Zweig zurücksetzen und dann Ihren aktuellen Zweig zurücksetzen, um das Commit zu entfernen.
Artbristol

Antworten:

2

Hier ist eine Strategie, die für Sie funktionieren könnte:

Erstellen Sie zwei private Git-Repos, wobei ein Repo für die Arbeit im Unternehmen und das andere für das allgemeine Repo (ich möchte es zurückschreiben) bestimmt ist.

Damit dieses System funktioniert, müssen Sie Folgendes tun (was ich als die wichtigste Strategie betrachte): Definieren Sie, was "allgemein" ist und von allen anderen in der Community verwendet werden kann

Mit dieser Definition können Sie trennen, was Sie zurückschreiben und was Sie nicht festschreiben müssen.

Es ist sinnvoll, dass das, was Sie für die Community codieren, in einer allgemeinen Form vorliegt, da ein zu spezifischer Code niemandem zugute kommt (und es möglicherweise nicht einmal in den Hauptzweig schafft).

Jetzt, da Sie wissen, was Sie für die Community tun werden, können Sie die meisten "Give-Back" -Arbeiten in dem dafür vorgesehenen Repo ausführen. Dann geben Sie dieses Repo einfach an Ihr arbeitsbasiertes Repo weiter und erledigen darüber hinaus alle arbeitsspezifischen Arbeiten.

Ich vermute, dass Sie viel mehr Zeit im "Give-Back" -Repo verbringen werden. Denken Sie also daran, wertvolle Kommentare usw. (möglicherweise sogar Dokumentation) für Personen bereitzustellen, die dieses Projekt in Zukunft verwenden würden.

Ich glaube auch, dass Git viel mehr kann als Sie denken. Ich habe dieses Video auf Vimeo gesehen: http://vimeo.com/46010208 und sie hat großartige Arbeit geleistet, um viele verrückte Dinge zu erklären, die Git tun kann.

Meine Strategie ist nicht die einzige da draußen, aber es kann definitiv ein Ausgangspunkt für Sie sein, an eine zu denken, die speziell zu Ihnen passt.

Joe
quelle
1

Abhängig von der Art der Open-Source-Codebasis und dem, was Sie durch Änderungen erreichen müssen, können Sie durch die Trennung Ihrer Bedenken eine Menge Meilen sammeln. Fügen Sie in Ihrem Projektgabel nur Dinge hinzu, die Sie zum Original beitragen möchten. Fügen Sie Hooks oder Erweiterungspunkte hinzu, damit Sie Ihre Unternehmensarbeit ausführen können, die nicht freigegeben wird.

Auf diese Weise müssen Sie sich nie darum kümmern, sich zu teilen oder im Voraus zu entscheiden, was Sie teilen möchten und was nicht. Da Sie dem ursprünglichen Projekt mehr Flexibilität verliehen haben, können Sie später jederzeit einige Teile Ihrer Unternehmensarbeit freigeben.

Allan
quelle