Was ist die richtige Etikette und der empfohlene GitHub-Workflow, um gleichzeitig zum Upstream-Repo beizutragen und von diesem abzuweichen?

21

Ich bin neu in GitHub und VCS im Allgemeinen. Ich programmiere seit Jahren in verschiedenen Sprachen, habe aber immer alleine an eigenen Projekten gearbeitet (keine öffentlichen Veröffentlichungen). Ich habe kürzlich angefangen, ein jQuery-UI-Widget zu verwenden, das ich in einem Projekt, an dem ich arbeite, von GitHub heruntergeladen habe. Das Repo wird nicht mehr vom ursprünglichen Autor gepflegt. Eine andere Gabel hat einige der ursprünglichen Zuganforderungen übernommen. Dies ist der, von dem ich gegabelt habe.

Ich habe ein paar Fehler gefunden und die entsprechenden Korrekturen gefunden. Ich möchte diese Korrekturen beisteuern, aber ich möchte auch eine ganze Reihe anderer Änderungen vornehmen, die für unseren eigenen Gebrauch einige der vorhandenen Funktionen beeinträchtigen. Außerdem möchte ich eine Idee von einer anderen Gabelung übernehmen.

Ich lerne immer noch GIT und GitHub und versuche herauszufinden, wie ich am besten vorgehen kann. Ich habe viel über verschiedene Konzepte / Aufgaben gelesen (hier SO, GitHub-Hilfeseiten, Pro Git): Workflows, Zusammenführen, Pull-Anforderungen, Cherry-Picking, Rebasing, Verzweigen. Meine graue Substanz schwimmt und ich muss anfangen , damit ich besser verstehen kann, was ich gelesen habe.

Hauptprobleme:

  1. Ich glaube, ich habe (irgendwo) gelesen, dass Sie immer nur eine Pull-Anforderung für einen Zweig gleichzeitig haben können. Heißt das, ich sollte für jeden Fehler einen eigenen Zweig haben und dann für jeden einen eigenen Pull-Request ausführen?

  2. Ich möchte Whitespace-Probleme beseitigen und erinnere mich, dass ich gelesen habe, dass es am besten ist, dies in einem separaten Commit zu tun. Soll ich das in meinem Master oder einer separaten Filiale machen? Ich möchte keine Pull-Anforderung für etwas so Triviales ausführen. Wenn ich jedoch vor dem Verzweigen Leerzeichen ändere, hat dies Auswirkungen auf die Pull-Anforderung für die Fehlerkorrekturen? Einige Gabeln haben Whitespace-Aufräumarbeiten durchgeführt und das Diff praktisch unbrauchbar gemacht.

  3. Ich dachte daran, Probleme gegen meine Gabel zu erstellen, um die Fehler zu dokumentieren, obwohl ich bereits die Lösung für sie habe. Ist das eine gute idee Wie gehe ich vor, um das Problem, das Festschreiben und die Zusammenführung miteinander zu verknüpfen? Wenn ich eine Pull-Anforderung im Upstream-Modus durchführe, wird mein Problem auch im Upstream-Modus angezeigt oder geht der Dokumentationslink verloren? Ich kann kein Problem mit dem Upstream-Repo eröffnen (es gibt keinen Issue-Tab).

  4. Was ist der beste Weg, um dem anderen Fork-Autor die Idee zu würdigen, die ich verwenden möchte? Ich kann seinen Code nicht genau verwenden, zumal seine Änderung auf eine ältere Version des Upstreams angewendet wird und so wie sie ist nicht mit meinen anderen Änderungen kompatibel ist. Aber ich möchte die Idee nutzen und Kredit geben, wo Kredit fällig ist. Sollte ich in meiner Commit-Nachricht nur auf sein Repo (oder Profil oder spezifisches Commit) verlinken?

  5. Was ist die Etikette zum Ändern der Readme-Datei und des DocBlocks oben in der Hauptdatei? Ist es in Ordnung, Änderungen vorzunehmen, meinen Namen hinzuzufügen, Links zu meinem Repo und meiner Demo hinzuzufügen, Links zur ursprünglichen Demo zu entfernen (da meine Gabel letztendlich nicht mit dem Original kompatibel ist)? Natürlich werde ich den ursprünglichen Autorennamen und die Lizenzinformationen hinterlassen. Für die Aufzeichnung ist es unter der MIT-Lizenz lizenziert.

Als Solo-Entwickler, der VCS noch nie benutzt hat, bin ich es gewohnt, die Geschichte neu zu schreiben . Ich bin Perfektionist und mag es, wenn Dinge ordentlich und ordentlich sind. Die Idee, Geschichte aufzuzeichnen, macht mich etwas nervös und ich möchte es gleich beim ersten Mal richtig machen . Ich habe ein neues Repo zum Spielen / Lernen erstellt, möchte aber unbedingt das jQuery-UI-Widget reparieren, damit ich mit meinem Projekt weitermachen kann.

Toxalot
quelle

Antworten:

15
  1. Richtig: Eine Pull-Anfrage ist mit einem Zweig in Ihrem Repository verknüpft. Wenn Sie den Zweig ändern, ändern Sie auch das, was Sie als Pull-Request einreichen.

    Ja, Sie müssen einen Zweig (und eine Pull-Anfrage) pro Fehlerbehebung erstellen. Es kann ratsam sein, mit einem zu beginnen und zu sehen, wie der Betreuer auf diesen reagiert, bevor der Rest erledigt wird. Open Source ist ein von Natur aus sozialer Prozess.

  2. Machen Sie eine Pull-Anfrage für Ihre Whitespace-Änderungen! Da ich als jemand spreche, der manchmal ein Betreuer ist, mag ich diese Art von Pull-Requests: Ich genehmige sie entweder oder nicht, und die Bearbeitung nimmt wenig Zeit in Anspruch.

    Was Sie auch antreffen könnten, ist, dass der Betreuer mit Ihren Whitespace-Änderungen nicht einverstanden ist! Hüte dich..

  3. Hmm .. Es ist nicht klar, was Sie hier erreichen wollen. Es klingt nach Überdokumentation und ist keine so gute Idee - vielleicht können Sie klarstellen, warum Sie dies tun möchten?

  4. Das Verlinken auf sein Repo in Ihrer Commit-Nachricht (oder sogar in einem Kommentar im Code) ist eine großartige Möglichkeit, Kredit zu geben. Seien Sie jedoch vorsichtig - machen Sie deutlich, dass Sie ihm für seine Ideen und nicht für seinen Code danken . Wenn Sie Code kopiert haben, würde ich ihn per E-Mail darüber informieren, es sei denn, es ist sehr klar, welche Lizenz er für seinen Code verwendet. Wenn die Lizenzierung eindeutig ist (und es sich um eine andere Lizenz als das Repository handelt, an das Sie das Commit senden), müssen Sie die andere Lizenz in Ihrer Pull-Anfrage hinzufügen und dies auch in Ihrer Pull-Anfrage-Nachricht erwähnen.

  5. Dies ist eine wirklich gute Frage und hängt davon ab, mit wem Sie sprechen. Meiner Meinung nach sollten Sie niemals einen Commit oder Code mit Ihrem Namen versehen. Der Hauptgrund ist, dass dies "Besitz und Verantwortung für den Code" impliziert - es könnte andere daran hindern, den Code zu ändern, weil "es Ihnen" gehört. Aber jetzt geraten wir in eine große Diskussion über die Natur von Open Source, also höre ich hier auf und sage - frag den Projektbetreuer oder mach es einfach und schau, wie er reagiert.

  6. Mit GIT können Sie (Ihre lokale, noch nicht veröffentlichte) Geschichte umschreiben! Lerne den Befehl git rebase - das ist einer der Hauptgründe, warum ich git liebe. Es ist eine wirklich schlechte Idee, umgeschriebene Commits / History in das freigegebene Repository (z. B. Github) zu verschieben (zu erzwingen). Dies wird sich dann mit den Repositorys der anderen Entwickler vermischen - sie müssen schwierige Dinge tun, wenn Sie Ihre (umgeschriebenen) Änderungen abrufen.

[# 6: Danke @toxalot!]

Marco
quelle
Für # 6 können Sie zwar die Geschichte umschreiben, aber nur die lokale Geschichte. Sobald es in ein öffentliches Repo verschoben wurde, ist es eine wirklich schlechte Idee, die Geschichte neu zu schreiben.
Toxalot