Wie trage ich zum Code anderer in GitHub bei? [geschlossen]


231

Ich möchte zu einem bestimmten Projekt in GitHub beitragen . Soll ich es gabeln ? Verzweigen ? Was wird empfohlen und wie geht das?


61
Ein weiterer lächerlicher Abschluss
Stephen

4
Ich habe eine detailliertere Schritt-für-Schritt-Anleitung zum Beitrag zu Concrete5 auf Github geschrieben, aber der Prozess kann auf jedes Projekt angewendet werden. Schau es dir an .
Joe Meyer

7
Ich sehe nicht wirklich, wie das "nicht konstruktiv" ist. Allein die Stimmen und Ansichten beweisen, dass es sich um eine beliebte Frage handelt, die die Menschen beantwortet haben möchten.
Ian


1
Vielleicht sollte es mit ausreichender Mehrheit möglich sein, zuvor geschlossene Fragen wieder auferstehen zu lassen und die Leute wieder zum Thread beitragen zu lassen.
Peter Teoh

Antworten:


180

Idealerweise Sie:

  1. Gabel das Projekt
  2. Machen Sie einen oder mehrere gut kommentierte und saubere Commits für das Repository. Sie können hier einen neuen Zweig erstellen, wenn Sie mehr als einen Teil oder eine Funktion ändern.
  3. Führen Sie eine Pull-Anfrage in der Weboberfläche von github durch.

Wenn es sich um eine neue Funktionsanforderung handelt, starten Sie die Codierung nicht zuerst. Denken Sie daran, ein Problem zu veröffentlichen, um die neue Funktion zu diskutieren.

Wenn die Funktion gut besprochen ist und es +1 gibt oder der Projektbesitzer sie genehmigt hat, weisen Sie sich das Problem zu und führen Sie die obigen Schritte aus.

Einige Projekte verwenden das Pull-Request-System nicht. Erkundigen Sie sich beim Autor oder in der Mailingliste, wie Sie Ihren Code am besten wieder in das Projekt integrieren können.


4
Details zu GitHubs Forking- und Pull-Anfragen
Gabriel Grant

1
Ja, Anfrage ziehen. Die Zusammenführungsanforderung ist eine großartige Terminologie.
Yann Ramin

2
@MariusKavansky es ist umgekehrt! Sobald Sie wissen, woran Sie arbeiten müssen, tragen nur Sie bei :)
Hashbrown

nachdem ich zu einem Open Source Projekt beigetragen habe. Ich denke, es ist eine bessere Idee, ein Problem zu eröffnen, um die neue Funktion zu diskutieren, wenn es sich um eine neue Funktion handelt. Wenn es sich um eine gut diskutierte Funktion oder ein Problem handelt, sollten Sie das Problem sich selbst zuweisen und dann die obigen Schritte ausführen. Das sind meine 2 Cent.
wizztjh

@hashbrown, er fragt, wo die "Liste" der angeforderten Funktionen bisher ist. Die Funktionen, die bereits angefordert und + 1ed werden.
Pacerier

31

Um Yanns Antwort zu ergänzen , können Sie nach dem Verzweigen eines Projekts in jedem gewünschten Zweig (einem neuen oder einem aus dem ursprünglichen Projekt) entwickeln.

Erinnere dich an:


1
Können Sie Details oder Links zu Ihrem zweiten Punkt hinzufügen (Zweig neu gründen) ?
JorgeArtware

1
@JorgeArtware Ich habe die Antwort mit ein paar Links aktualisiert, die die Rebase veranschaulichen.
VonC

@VonC Ich stelle hier eine Frage, aber wenn Sie glauben, dass es notwendig ist, werde ich eine ganz neue Frage daraus machen. Warum sollte ich neu gründen, anstatt zu verschmelzen, außer die "gerade Geschichte" zu haben? Mit anderen Worten, hier ist, was ich mache, wenn ich zu einigen Projekten beitrage (nachdem die PR aus meinem Feature-Zweig zusammengeführt wurde, um Zweige zu entwickeln und zu beherrschen): git checkout master; git pull;Gleiches gilt für die Entwicklung (wo mein Feature-Zweig zuerst zusammengeführt wurde) Der Unterschied, den ich mir vorstellen kann von, nach dem Lesen von "pull vs pull --rebase" und "merge vs rebase" ist nur die flache Geschichte. Sonst noch etwas tiefer?
Linuxbandit

@grasshopper In Bezug auf "Beitrag" (der Kontext dieser Seite) möchten Sie Ihre lokalen Commits immer auf aktualisierte Zweige zurücksetzen, bevor Sie darauf klicken. Dadurch wird es für den Betreuer trivial, diesen Beitrag in den ursprünglichen Projektzweig zu integrieren. Im Kontext Ihrer Frage, in der Ihre PR akzeptiert wurde, können Sie sicher zusammenführen, anstatt neu zu gründen, um vorhandene Zweige zu aktualisieren.
VonC

(Entschuldigung, der Benutzername wurde gerade geändert, um meinen Github wiederzugeben.) - @VonC, danke. Alle Vorschläge, die ich über die Rebase gelesen habe, gelten vor der PR. Gibt es eine gängige Praxis (Rebase statt Merge), um die akzeptierte und zusammengeführte PR in meinem lokalen Repo widerzuspiegeln, oder kann ich irgendetwas tun? Was ist, wenn ich eine weitere PR einreichen werde?
Linuxbandit

15

Um die Antworten von Yan und VonC zu ergänzen, ist dies eine gute Ressource von Github selbst: http://help.github.com/forking/

Achten Sie auch darauf, in der rechten Seitenleiste unter der Überschrift "Zusammenarbeit" nachzuschauen.


10

Hier gibt es ein großartiges Railscast-Video , das Sie durch den Prozess führt. Es enthält auch eine Reihe guter Tipps, z. B. Informationen zum Bestimmen, an welchem ​​Zweig Sie möglicherweise arbeiten möchten, wenn Sie Beiträge leisten, Tests, Submodule usw. verwenden.

Während sich dieser Screencast in erster Linie an Rails-Entwickler richtet, sind die meisten Informationen für Beiträge zu Open Source-Projekten gültig.


4

Github hat viele Möglichkeiten, an einem Projekt zusammenzuarbeiten. Das Modell, das am häufigsten in Projekten verwendet wird, ist ein Pull-Request-Modell. Ich habe ein Projekt gestartet, um Leuten zu helfen, ihre erste GitHub-Pull-Anfrage zu stellen. Hier können Sie das praktische Tutorial durchführen, um Ihre erste PR zu erstellen

Der Workflow ist so einfach wie

  • Gabel das Repo in Github
  • Klonen Sie das Repo auf Ihren Computer
  • Machen Sie einen Zweig und nehmen Sie die notwendigen Änderungen vor
  • Schieben Sie Ihre Änderungen auf GitHub auf Ihre Gabel git push origin branch-name
  • Gehen Sie zu Ihrer Gabelung auf GitHub, um eine Compare and pull requestSchaltfläche zu sehen
  • Klicken Sie darauf und geben Sie die erforderlichen Details an


2

Technischer Workflow

Ich würde den folgenden Workflow vorschlagen:

  1. Fork das Repository (über GitHub Webinterface: "Fork" Button)
  2. Kopieren Sie in Ihrem gespaltenen Repository die URL
  3. Klonen (in der Kommandozeile)

    git clone <url-from-your-workspace>

  4. Geben Sie das gerade erstellte Verzeichnis ein und erstellen Sie einen Zweig

    cd <directory> git checkout -b <branchname>

  5. Nehmen Sie jetzt Ihre Änderungen vor

  6. Sie können nach jeder Änderung ein oder mehrere Commits erstellen:

    commit -a

  7. Wenn Sie fertig sind, drücken Sie Ihre Änderungen

    git push origin <branch>

  8. In Ihrer Befehlszeile sollte eine URL zum Erstellen der PR angezeigt werden . Besuchen Sie die URL und klicken Sie auf die Schaltfläche, um eine PR zu erstellen.

  9. Wenn nicht, besuchen Sie das Repository im Browser und es bietet Ihnen eine Schaltfläche zum Erstellen der Pull-Anforderung

Das ist es.

Im Grunde haben Sie das Repository in Ihren Arbeitsbereich gegabelt, einen neuen Zweig erstellt und diesen neuen Zweig verschoben.

Wenn Sie später mehr PR aus demselben geklonten Repo erstellen, sollten Sie synchronisieren (die neuesten Änderungen aus dem ursprünglichen Repository abrufen), bevor Sie einen weiteren Zweig für einen anderen PR erstellen:

git checkout master
git remote add upstream <url-of-original-repo>
git pull upstream master

Weitere Überlegungen:

  • Das Projekt verfügt möglicherweise über Beitragsrichtlinien: Suchen Sie nach einer Datei CONTRIBUTING.rst oder .md
  • Möglicherweise möchten Sie die Codierungsrichtlinien für das Projekt befolgen
  • Vielleicht möchten Sie Ihre Idee zuerst als Problem skizzieren
  • Möglicherweise möchten Sie auf der Registerkarte Pull-Anforderungen für das Projekt nachsehen, ob offene PR und zusammengeführte PR vorhanden sind

Diese Vorschläge sollen Sie vor der Mühe bewahren, Arbeit in eine PR zu stecken, die nicht zusammengeführt wird. Wenn das Projekt aktiv ist und PR zusammengeführt wird, ist dies ein gutes Zeichen. Wenn es Beitragsrichtlinien gibt, befolgen Sie diese.

Sei immer höflich. Denken Sie daran, dass die Projektbetreuer in keiner Weise verpflichtet sind, Ihre PR zusammenzuführen. Haben Sie etwas Wertvolles zum Projekt hinzuzufügen?


1
Gut detaillierter Prozess (genauer als meine 9 Jahre alte Antwort). Upvoted.
VonC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.