So erstellen Sie eine Pull-Anfrage auf GitHub

Einführung

Git ist kostenlos und Open Source und ein verteiltes Versionskontrollsystem, mit dem sich kollaborative Softwareprojekte einfacher verwalten lassen. Viele Projekte verwalten ihre Dateien in einem Git-Repository, und Websites wie GitHub haben das Teilen von Code und das Tragen zu diesem einfach, wertvoll und effektiv gemacht.

Open-Source-Projekte, die in öffentlichen Repositorys gehostet werden, profitieren von Beiträgen der breiteren Entwicklergemeinde über Pull-Anforderungen, die verlangen, dass ein Projekt Änderungen akzeptiert, die Sie an seinem Code-Repository vorgenommen haben.

Dieses Tutorial führt Sie durch die Befehlszeile, um eine Pull-Anfrage an ein Git-Repository zu senden, damit Sie einen Beitrag zu Open-Source-Softwareprojekten leisten können.

Voraussetzungen

Sie sollten Git auf Ihrem lokalen Computer installiert haben. Sie können überprüfen, ob Git auf Ihrem Computer installiert ist, und den Installationsprozess für Ihr Betriebssystem durchführen, indem Siethis guide folgen.

Sie müssen auch ein GitHub-Konto haben oder erstellen. Sie können dies über die GitHub-Websitegithub.com tun und sich entweder anmelden oder Ihr Konto erstellen.

Schließlich sollten Sie ein Open-Source-Softwareprojekt identifizieren, zu dem Sie beitragen können. Sie können sich mit Open-Source-Projekten vertraut machen, indem Siethis introduction durchlesen.

Erstellen Sie eine Kopie des Repositorys

Arepository oder kurzrepo ist im Wesentlichen der Hauptordner eines Projekts. Das Repository enthält alle relevanten Projektdateien, einschließlich der Dokumentation, und speichert auch den Revisionsverlauf für jede Datei. In GitHub können Repositorys mehrere Mitbearbeiter haben und entweder öffentlich oder privat sein.

Um an einem Open-Source-Projekt arbeiten zu können, müssen Sie zunächst eine eigene Kopie des Repositorys erstellen. Dazu sollten Sie das Repository aufteilen und dann klonen, sodass Sie eine lokale Arbeitskopie haben.

Gabeln Sie das Repository

Sie können ein Repository in GitHub aufteilen, indem Sie mit Ihrem Browser zur GitHub-URL des Open-Source-Projekts navigieren, zu dem Sie beitragen möchten.

GitHub-Repository-URLs verweisen sowohl auf den Benutzernamen, der dem Eigentümer des Repository zugeordnet ist, als auch auf den Repository-Namen. Beispielsweise ist DigitalOcean Community der Eigentümer descloud_haiku-Projekt-Repositorys. Die GitHub-URL für dieses Projekt lautet also:

https://github.com/do-community/cloud_haiku

Im obigen Beispiel istdo-community der Benutzername undcloud_haiku der Repository-Name.

Sobald Sie das Projekt identifiziert haben, zu dem Sie beitragen möchten, können Sie zu der URL navigieren, die folgendermaßen formatiert wird:

https://github.com/username/repository

Sie können das Projekt auch über die GitHub-Suchleiste suchen.

Wenn Sie sich auf der Hauptseite des Repositorys befinden, sehen Sie oben rechts auf der Seite unter Ihrem Benutzersymbol eine Schaltfläche "Fork":

GitHub Forking

Klicken Sie auf die Gabel-Schaltfläche, um den Gabelvorgang zu starten. In Ihrem Browserfenster erhalten Sie Feedback, das folgendermaßen aussieht:

Forking on GitHub

Sobald der Vorgang abgeschlossen ist, wird in Ihrem Browser ein Bildschirm angezeigt, der dem obigen Repository-Bild ähnelt, außer dass Sie oben Ihren Benutzernamen vor dem Repository-Namen und in der URL auch Ihren Benutzernamen vor dem Repository-Namen sehen.

Im obigen Beispiel wird anstelle vondo-community / cloud_haiku oben auf der Seiteyour-username / cloud_haiku angezeigt, und die neue URL sieht folgendermaßen aus:

https://github.com/your-username/cloud_haiku

Wenn das Repository gespalten ist, können Sie es klonen, sodass Sie eine lokale Arbeitskopie der Codebasis haben.

Klonen Sie das Repository

Öffnen Sie zunächst ein Terminalfenster, um eine eigene lokale Kopie des Repositorys zu erstellen, zu dem Sie beitragen möchten.

Wir verwenden den Befehlgit clone zusammen mit der URL, die auf Ihre Verzweigung des Repositorys verweist.

Diese URL ähnelt der obigen URL, endet jedoch jetzt mit.git. Im obigen cloud_haiku-Beispiel sieht die URL folgendermaßen aus:

https://github.com/your-username/cloud_haiku.git

Sie können die URL auch kopieren, indem Sie die grüne Schaltfläche "Klonen oder Herunterladen" auf Ihrer Repository-Seite verwenden, die Sie gerade von der ursprünglichen Repository-Seite aus geöffnet haben. Sobald Sie auf die Schaltfläche geklickt haben, können Sie die URL kopieren, indem Sie auf die Sammelmappe neben der URL klicken:

GitHub Clone or Download

Sobald wir die URL haben, können wir das Repository klonen. Dazu kombinieren wir den Befehlgit clonemit der Repository-URL über die Befehlszeile in einem Terminalfenster:

git clone https://github.com/your-username/repository.git

Nachdem wir eine lokale Kopie des Codes haben, können wir einen neuen Zweig erstellen, in dem wir mit dem Code arbeiten können.

Erstellen Sie einen neuen Zweig

Immer wenn Sie an einem Verbundprojekt arbeiten, haben Sie und andere Programmierer, die zum Repository beitragen, unterschiedliche Ideen für neue Funktionen oder Korrekturen. Einige dieser neuen Funktionen benötigen für die Implementierung keine nennenswerte Zeit, andere sind jedoch noch nicht abgeschlossen. Aus diesem Grund ist es wichtig, das Repository zu verzweigen, damit Sie den Workflow verwalten, Ihren Code isolieren und steuern können, welche Funktionen es zurück zum Hauptzweig des Projektrepositorys machen.

Der Standard-Hauptzweig eines Projekt-Repositorys wird normalerweise alsmaster-Zweig bezeichnet. Eine gängige Best Practice besteht darin, alles auf dem Master-Zweig als für andere jederzeit einsatzbereit zu betrachten.

Beim Erstellen einer Verzweigung ist es sehr wichtig, dass Sie die neue Verzweigung aus der Master-Verzweigung erstellen. Sie sollten auch sicherstellen, dass Ihr Filialname beschreibend ist. Anstatt esmy-branch zu nennen, sollten Sie stattdessenfrontend-hook-migration oderfix-documentation-typos verwenden.

Um unsere Filiale in unserem Terminalfenster zu erstellen, ändern wir unser Verzeichnis so, dass wir im Verzeichnis des Repositorys arbeiten. Stellen Sie sicher, dass Sie den tatsächlichen Namen des Repositorys (z. B.cloud_haiku) verwenden, um in dieses Verzeichnis zu wechseln.

cd repository

Jetzt erstellen wir unseren neuen Zweig mit dem Befehlgit branch. Vergewissern Sie sich, dass Sie ihn beschreibend benennen, damit andere, die an dem Projekt arbeiten, verstehen, woran Sie arbeiten.

git branch new-branch

Nachdem unser neuer Zweig erstellt wurde, können wir mit dem Befehlgit checkout wechseln, um sicherzustellen, dass wir an diesem Zweig arbeiten:

git checkout new-branch

Sobald Sie den Befehlgit checkout eingegeben haben, erhalten Sie die folgende Ausgabe:

OutputSwitched to branch 'new-branch'

Alternativ können Sie die beiden oben genannten Befehle mit dem folgenden Befehl und dem Flag-bverdichten, indem Sie einen neuen Zweig erstellen und zu einem neuen Zweig wechseln:

git checkout -b new-branch

Wenn Sie wieder zum Master wechseln möchten, verwenden Sie den Befehlcheckout mit dem Namen des Master-Zweigs:

git checkout master

Mit dem Befehlcheckout können Sie zwischen mehreren Zweigen wechseln, sodass Sie möglicherweise mehrere Funktionen gleichzeitig bearbeiten können.

Jetzt können Sie vorhandene Dateien ändern oder neue Dateien zum Projekt in Ihrem eigenen Zweig hinzufügen.

Änderungen lokal vornehmen

Sobald Sie vorhandene Dateien geändert oder dem Projekt neue Dateien hinzugefügt haben, können Sie diese Ihrem lokalen Repository hinzufügen, was mit dem Befehlgit add möglich ist. Fügen wir das Flag-Ahinzu, um alle vorgenommenen Änderungen hinzuzufügen:

git add -A

Als Nächstes möchten wir die Änderungen aufzeichnen, die wir mit dem Befehlgit commitam Repository vorgenommen haben.

Dascommit message ist ein wichtiger Aspekt Ihres Code-Beitrags. Es hilft den anderen Mitwirkenden, die von Ihnen vorgenommenen Änderungen vollständig zu verstehen, warum Sie sie vorgenommen haben und wie wichtig sie sind. Darüber hinaus bieten Commit-Nachrichten eine historische Aufzeichnung der Änderungen für das gesamte Projekt und helfen zukünftigen Mitwirkenden auf dem Weg.

Wenn wir eine sehr kurze Nachricht haben, können wir dies mit dem Flag-m und der Nachricht in Anführungszeichen aufzeichnen:

git commit -m "Fixed documentation typos"

Sofern es sich nicht um eine sehr geringfügige Änderung handelt, möchten wir höchstwahrscheinlich eine längere Commit-Nachricht einfügen, damit unsere Mitarbeiter mit unserem Beitrag auf dem neuesten Stand sind. Um diese größere Nachricht aufzuzeichnen, führen wir den Befehlgit commit aus, mit dem der Standardtexteditor geöffnet wird:

git commit

Wenn Sie Ihren Standardtexteditor konfigurieren möchten, können Sie dies mit dem Befehlgit config tun und nano als Standardeditor festlegen, zum Beispiel:

git config --global core.editor "nano"

Oder vim:

git config --global core.editor "vim"

Nach dem Ausführen des Befehlsgit commit sollte in Ihrem Terminalfenster abhängig vom verwendeten Standardtexteditor ein Dokument angezeigt werden, das Sie bearbeiten können und das folgendermaßen aussieht:

GNU nano 2.0.6 File:… Benutzername / Repository / .git / COMMIT_EDITMSG

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch new-branch
# Your branch is up-to-date with 'origin/new-branch'.
#
# Changes to be committed:
#       modified:   new-feature.py
#

Unter den einleitenden Kommentaren sollten Sie die Festschreibungsnachricht zur Textdatei hinzufügen.

Um eine nützliche Commit-Nachricht zu verfassen, sollten Sie in die erste Zeile eine Zusammenfassung mit etwa 50 Zeichen einfügen. Darunter sollten Sie, unterteilt in verdauliche Abschnitte, eine Beschreibung einfügen, in der der Grund für diese Änderung, die Funktionsweise des Codes und zusätzliche Informationen angegeben sind, die es anderen ermöglichen, die Arbeit beim Zusammenführen zu überprüfen und zu erläutern. Versuchen Sie, so hilfreich und proaktiv wie möglich zu sein, um sicherzustellen, dass die Projektbetreuer Ihren Beitrag vollständig verstehen können.

Nachdem Sie die Commit-Nachrichtentextdatei gespeichert und beendet haben, können Sie mit dem folgenden Befehl überprüfen, welche GIT-Datei festgeschrieben wird:

git status

Abhängig von den vorgenommenen Änderungen erhalten Sie eine Ausgabe, die ungefähr so ​​aussieht:

OutputOn branch new-branch
Your branch is ahead of 'origin/new-branch' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

Zu diesem Zeitpunkt können Sie den Befehlgit push verwenden, um die Änderungen in den aktuellen Zweig Ihres gegabelten Repositorys zu übertragen:

git push --set-upstream origin new-branch

Mit dem Befehl erhalten Sie eine Ausgabe, mit der Sie über den Fortschritt informiert werden. Die Ausgabe sieht folgendermaßen aus:

OutputCounting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 336 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/your-username /respository .git
   a1f29a6..79c0e80  new-branch  -> new-branch
Branch new-branch set up to track remote branch new-branch  from origin.

Sie können jetzt zum Forked-Repository auf Ihrer GitHub-Webseite navigieren und zu dem Zweig wechseln, den Sie gerade angeklickt haben, um die Änderungen anzuzeigen, die Sie im Browser vorgenommen haben.

Zu diesem Zeitpunkt ist es möglich,make a pull request in das ursprüngliche Repository zu übertragen. Wenn Sie dies jedoch noch nicht getan haben, sollten Sie sicherstellen, dass Ihr lokales Repository mit dem Upstream-Repository auf dem neuesten Stand ist.

Lokales Repository aktualisieren

Während Sie zusammen mit anderen Mitwirkenden an einem Projekt arbeiten, ist es wichtig, dass Sie Ihr lokales Repository mit dem Projekt auf dem neuesten Stand halten, da Sie keine Abrufanforderung für Code stellen möchten, der Konflikte verursacht. Um Ihre lokale Kopie der Codebasis auf dem neuesten Stand zu halten, müssen Sie Änderungen synchronisieren.

Wir werden zuerst eine Fernbedienung für die Gabel konfigurieren und dann die Gabel synchronisieren.

Konfigurieren Sie eine Fernbedienung für die Gabel

Remote repositories ermöglichen es Ihnen, mit anderen an einem Git-Projekt zusammenzuarbeiten. Jedes Remote-Repository ist eine Version des Projekts, das im Internet oder in einem Netzwerk gehostet wird, auf das Sie Zugriff haben. Jedes Remote-Repository sollte für Sie entweder schreibgeschützt oder schreibgeschützt sein, abhängig von Ihren Benutzerberechtigungen.

Um Änderungen, die Sie in einem Zweig vornehmen, mit dem ursprünglichen Repository, mit dem Sie arbeiten, synchronisieren zu können, müssen Sie ein Remote konfigurieren, das auf das Upstream-Repository verweist. Sie sollten die Fernbedienung nur einmal für das Upstream-Repository einrichten.

Überprüfen Sie zunächst, welche Remote-Server Sie konfiguriert haben. Der Befehlgit remote listet das Remote-Repository auf, das Sie bereits angegeben haben. Wenn Sie also Ihr Repository wie oben beschrieben geklont haben, wird mindestens das Ursprungs-Repository angezeigt. Dies ist der von Git für das geklonte Verzeichnis angegebene Standardname .

Verwenden Sie im Verzeichnis des Repositorys in unserem Terminalfenster den Befehlgit remote zusammen mit dem Flag-v, um die von Git gespeicherten URLs zusammen mit den entsprechenden Remote-Kurznamen anzuzeigen (wie in „origin“). ::

git remote -v

Da wir ein Repository geklont haben, sollte unsere Ausgabe ungefähr so ​​aussehen:

Outputorigin  https://github.com/your-username/forked-repository.git (fetch)
origin  https://github.com/your-username/forked-repository.git (push)

Wenn Sie zuvor mehr als eine Fernbedienung eingerichtet haben, enthält der Befehlgit remote -veine Liste aller dieser Fernbedienungen.

Als Nächstes geben wir ein neues Remote-Upstream-Repository für die Synchronisierung mit dem Fork an. Dies wird das ursprüngliche Repository sein, aus dem wir abgeleitet haben. Wir machen das mit dem Befehlgit remote add.

git remote add upstream https://github.com/original-owner-username/original-repository.git

In diesem Beispiel istupstream der Kurzname, den wir für das Remote-Repository angegeben haben, da sich "Upstream" in Bezug auf Git auf das Repository bezieht, aus dem wir geklont haben. Wenn Sie einen Remote-Zeiger zum Repository eines Mitarbeiters hinzufügen möchten, möchten Sie möglicherweise den Benutzernamen des Mitarbeiters oder einen verkürzten Kurznamen für den Kurznamen angeben.

Wir können überprüfen, ob unser Remote-Zeiger auf das Upstream-Repository ordnungsgemäß hinzugefügt wurde, indem wir den Befehlgit remote -v erneut aus dem Repository-Verzeichnis verwenden:

git remote -v
Outputorigin  https://github.com/your-username/forked-repository.git (fetch)
origin  https://github.com/your-username/forked-repository.git (push)
upstream    https://github.com/original-owner-username/original-repository.git (fetch)
upstream    https://github.com/original-owner-username/original-repository.git (push)

Jetzt können Sie in der Befehlszeile aufupstream verweisen, anstatt die gesamte URL zu schreiben, und Sie können Ihren Fork mit dem ursprünglichen Repository synchronisieren.

Synchronisiere die Gabel

Sobald wir eine Fernbedienung konfiguriert haben, die auf das Upstream- und Original-Repository in GitHub verweist, können wir unseren Zweig des Repositorys synchronisieren, um es auf dem neuesten Stand zu halten.

Um unseren Fork aus dem Verzeichnis unseres lokalen Repositorys in einem Terminalfenster zu synchronisieren, verwenden wir den Befehlgit fetch, um die Zweige zusammen mit ihren jeweiligen Commits aus dem Upstream-Repository abzurufen. Da wir den Kurznamen "upstream" verwendet haben, um auf das Upstream-Repository zu verweisen, übergeben wir diesen an den Befehl:

git fetch upstream

Abhängig davon, wie viele Änderungen seit dem Verzweigen des Repository vorgenommen wurden, kann Ihre Ausgabe unterschiedlich sein und einige Zeilen zum Zählen, Komprimieren und Entpacken von Objekten enthalten. Ihre Ausgabe endet ähnlich wie in den folgenden Zeilen, hängt jedoch davon ab, wie viele Zweige Teil des Projekts sind:

OutputFrom https://github.com/original-owner-username/original-repository
 * [new branch]      master     -> upstream/master

Jetzt werden Commits für den Hauptzweig in einem lokalen Zweig namensupstream/master gespeichert.

Wechseln wir zum lokalen Master-Zweig unseres Repositorys:

git checkout master
OutputSwitched to branch 'master'

Wir werden jetzt alle Änderungen, die in der Hauptniederlassung des ursprünglichen Repository vorgenommen wurden, auf die wir über unsere lokale Upstream- / Hauptniederlassung zugreifen, mit unserer lokalen Hauptniederlassung zusammenführen:

git merge upstream/master

Die Ausgabe hier variiert, beginnt jedoch mitUpdating, wenn Änderungen vorgenommen wurden, oder mitAlready up-to-date., wenn seit dem Verzweigen des Repositorys keine Änderungen vorgenommen wurden.

Der Master-Zweig Ihres Forks ist jetzt mit dem Upstream-Repository synchronisiert, und alle lokalen Änderungen, die Sie vorgenommen haben, gingen nicht verloren.

Abhängig von Ihrem eigenen Workflow und der Zeit, die Sie für das Vornehmen von Änderungen aufwenden, können Sie Ihren Fork so oft mit dem Upstream-Code des ursprünglichen Repositorys synchronisieren, wie es für Sie sinnvoll ist. Sie sollten Ihre Abzweigung jedoch unbedingt synchronisieren, bevor Sie eine Pull-Anfrage stellen, um sicherzustellen, dass Sie keinen widersprüchlichen Code beisteuern.

Pull-Anfrage erstellen

Jetzt können Sie eine Pull-Anforderung an das ursprüngliche Repository senden.

Navigieren Sie zu Ihrem Forked-Repository und klicken Sie auf die Schaltfläche "Neue Pull-Anforderung" auf der linken Seite.

GitHub Pull Request Button

Sie können den Zweig auf dem nächsten Bildschirm ändern. An beiden Standorten können Sie das entsprechende Repository aus dem Dropdown-Menü und dem entsprechenden Zweig auswählen.

Wenn Sie beispielsweise den Hauptzweig des ursprünglichen Repositorys auf der linken Seite und dienew-branch Ihres gegabelten Repositorys auf der rechten Seite ausgewählt haben, sollte ein Bildschirm angezeigt werden, der folgendermaßen aussieht:

GitHub Pull Request

GitHub weist Sie darauf hin, dass Sie die beiden Zweige zusammenführen können, da kein konkurrierender Code vorhanden ist. Sie sollten einen Titel und einen Kommentar hinzufügen und dann auf die Schaltfläche "Pull-Anfrage erstellen" klicken.

Zu diesem Zeitpunkt entscheiden die Verwalter des ursprünglichen Repositorys, ob sie Ihre Pull-Anfrage annehmen oder nicht. Möglicherweise werden Sie aufgefordert, Ihren Code zu bearbeiten oder zu überarbeiten, bevor Sie die Pull-Anfrage annehmen.

Fazit

Zu diesem Zeitpunkt haben Sie erfolgreich eine Pull-Anfrage an ein Open-Source-Software-Repository gesendet. Anschließend sollten Sie sicherstellen, dass Sie Ihren Code aktualisieren und erneut installieren, während Sie darauf warten, dass er überprüft wird. Projektbetreuer können Sie auffordern, Ihren Code zu überarbeiten, daher sollten Sie darauf vorbereitet sein.

Beiträge zu Open-Source-Projekten zu leisten - und ein aktiver Open-Source-Entwickler zu werden - kann eine lohnende Erfahrung sein. Durch regelmäßige Beiträge zu häufig verwendeter Software können Sie sicherstellen, dass diese Software für andere Endbenutzer so wertvoll wie möglich ist.

Wenn Sie mehr über Git erfahren und an Open Source zusammenarbeiten möchten, können Sie unsere Tutorial-Reihe mit dem TitelAn Introduction to Open Source lesen. Wenn Sie bereits mit Git vertraut sind und ein Spickzettel wünschen, können Sie sich auf „https://www.digitalocean.com/community/tutorials/how-to-use-git-a-reference-guide[How So verwenden Sie Git: Ein Referenzhandbuch]. “