Invoering
Git is een open-source gedistribueerd versiebeheersysteem dat samenwerkingssoftwareprojecten beter beheersbaar maakt. Veel projecten bewaren hun bestanden in een Git-repository, en platforms zoals GitHub hebben het delen van en bijdragen aan code toegankelijk, waardevol en effectief gemaakt.
Open-sourceprojecten die in openbare repository's worden gehost, profiteren van de bijdragen van de bredere ontwikkelaarsgemeenschaptrek verzoeken, waarin wordt gevraagd dat een project de wijzigingen accepteert die u in de coderepository hebt aangebracht.
Deze tutorial begeleidt je bij het maken van een pull-verzoek naar een Git-repository via de opdrachtregel, zodat je kunt bijdragen aan open-source softwareprojecten.
Vereisten
Je zou Git op je lokale computer moeten hebben geïnstalleerd. U kunt controleren of Git op uw computer is geïnstalleerd en het installatieproces voor uw besturingssysteem doorlopen door het volgende te volgendeze gids.
Je moet ook een GitHub-account hebben of aanmaken. U kunt dit doen via de GitHub-website,github.comen kunt u inloggen of uw account aanmaken.
Vanaf november 2020 heeft GitHub wachtwoordgebaseerde authenticatie verwijderd. Om deze reden moet u eenpersoonlijk toegangstokenof voeg jouw toeInformatie over de openbare SSH-sleutelom toegang te krijgen tot GitHub-repository's via de opdrachtregel.
Ten slotte moet u een open-sourcesoftwareproject identificeren waaraan u kunt bijdragen. U kunt meer vertrouwd raken met open-sourceprojecten door dit door te lezendeze introductie.
Maak een kopie van de repository
Aopslagplaats, ofrepositoryKortom, is in wezen de hoofdmap van een project. De repository bevat alle relevante projectbestanden, inclusief documentatie, en bewaart ook de revisiegeschiedenis van elk bestand. Op GitHub kunnen opslagplaatsen meerdere bijdragers hebben en zowel openbaar als privé zijn.
Om aan een open-sourceproject te kunnen werken, moet je eerst je eigen kopie van de repository maken. Om dit te doen, moet u de repository splitsen en vervolgens klonen, zodat u een lokale werkkopie heeft.
Vork de opslagplaats
Je kunt een repository op GitHub afsplitsen door met je browser naar de GitHub-URL te navigeren van het open-sourceproject waaraan je wilt bijdragen.
GitHub-repository-URL's verwijzen naar zowel de gebruikersnaam die is gekoppeld aan de eigenaar van de repository, als naar de naam van de repository. Bijvoorbeeld DigitalOcean Community (gebruikersnaam:doe-gemeenschap
) is de eigenaar van decloud_haikuprojectrepository, dus de GitHub-URL voor dat project is:
https://github.com/do-community/cloud_haiku
In het bovenstaande voorbeelddoe-gemeenschap
is de gebruikersnaam encloud_haiku
is de naam van de opslagplaats.
Zodra u het project heeft geïdentificeerd waaraan u wilt bijdragen, kunt u naar de URL navigeren, die er als volgt uitziet:
https://github.com/gebruikersnaam/opslagplaats
Of u kunt naar het project zoeken met behulp van de GitHub-zoekbalk.
Wanneer u zich op de hoofdpagina van de repository bevindt, aVorkDe knop wordt rechtsboven op de pagina weergegeven, onder uw gebruikerspictogram:
Klik op deVorkknop om het vorkproces te starten. In uw browservenster ontvangt u een melding dat de repository die u zoekt, wordt verwerkt:
Zodra het proces is voltooid, gaat uw browser naar een scherm dat lijkt op het vorige repositoryscherm, behalve dat u bovenaan uw gebruikersnaam vóór de repositorynaam ziet, en in de URL staat ook uw gebruikersnaam vóór de repositorynaam.
Dus in het bovenstaande voorbeeld in plaats vandoe-community / cloud_haikubovenaan de pagina zie je hetje gebruikersnaam/ cloud_haiku, en de nieuwe URL ziet er ongeveer zo uit:
https://github.com/je gebruikersnaam/cloud_haiku
Nu de repository is gevorkt, bent u klaar om deze te klonen, zodat u over een lokale werkkopie van de codebasis beschikt.
Kloon de opslagplaats
Om uw eigen lokale kopie te maken van de repository waaraan u wilt bijdragen, openen we eerst een terminalvenster.
We gebruiken degit kloon
commando samen met de URL die naar uw fork van de repository verwijst.
Deze URL zal vergelijkbaar zijn met de URL hierboven, behalve dat deze nu eindigt met.git
. In decloud_haiku
In het bovenstaande voorbeeld ziet de URL er ongeveer zo uit, waarbij uw daadwerkelijke gebruikersnaam wordt vervangenje gebruikersnaam
:
https://github.com/je gebruikersnaam/cloud_haiku.git
U kunt de URL ook kopiëren door gebruik te maken van de groene“⤓ Code”knop van uw repositorypagina die u van de oorspronkelijke repositorypagina hebt afgeleid. Zodra u op de knop klikt, kunt u de URL kopiëren door op de klembordknop naast de URL te klikken:
Zodra we de URL hebben, zijn we klaar om de repository te klonen. Om dit te doen, combineren we degit kloon
opdracht met de repository-URL vanaf de opdrachtregel in een terminalvenster:
gitkloon https://github.com/je gebruikersnaam/opslagplaats.git
Nu we een lokale kopie van de code hebben, kunnen we verder gaan met het maken van een nieuwe branch waarop we met de code kunnen werken.
Maak een nieuwe vestiging
Wanneer u aan een samenwerkingsproject werkt, zullen u en andere programmeurs die aan de repository bijdragen, in één keer verschillende ideeën hebben voor nieuwe functies of oplossingen. Sommige van deze nieuwe functies zullen niet veel tijd vergen om te implementeren, maar sommige zullen doorlopend worden uitgevoerd. Daarom is het belangrijk om de repository te vertakken, zodat u de workflow kunt beheren, uw code kunt isoleren en kunt bepalen welke functies teruggaan naar de hoofdtak van de projectrepository.
De primaire tak van een projectrepository wordt gewoonlijk devoornaamsttak. Een aanbevolen praktijk is om alles op de hoofdvertakking te beschouwen als inzetbaar voor anderen om op elk moment te gebruiken.
Opmerking: In juni 2020 heeft GitHub zijn terminologie bijgewerkt om te verwijzen naar standaardbroncodevertakkingen als devoornaamst
vestiging, in plaats van demeester
tak. Als uw standaardvertakking nog steeds verschijnt alsmeester
je kunt het updaten naarvoornaamst
doorhet wijzigen van de standaardfiliaalinstellingen.
Wanneer u een vertakking maakt op basis van het bestaande project, is het erg belangrijk dat u uw nieuwe vertakking buiten de hoofdvertakking maakt. Zorg er ook voor dat uw filiaalnaam beschrijvend is. In plaats van te bellenmijn-filiaal
, je zou voor zoiets moeten gaanfrontend-hook-migratie
offix-documentatie-typefouten
in plaats van.
Om de branch vanuit ons terminalvenster te maken, veranderen we onze directory zodat we in de directory van de repository werken. Zorg ervoor dat u de daadwerkelijke naam van de repository gebruikt (zoalscloud_haiku
) om naar die map te gaan.
CDopslagplaats
Nu zullen we onze nieuwe tak creëren met degit-tak
commando. Zorg ervoor dat u het een beschrijvende naam geeft, zodat anderen die aan het project werken, begrijpen waar u aan werkt.
gittaknieuwe tak
Nu onze nieuwe branch is gemaakt, kunnen we overschakelen om er zeker van te zijn dat we aan die branch werken door degit afrekenen
commando:
gituitcheckennieuwe tak
Zodra u degit afrekenen
opdracht, ontvangt u de volgende uitvoer:
Uitvoer
Overgestapt naar vestiging 'nieuwe vestiging'
Als alternatief kun je de twee bovenstaande commando's samenvatten, een nieuwe branch creëren en er naar overschakelen, met het volgende commando en-B
vlag:
gituitchecken-B nieuwe tak
Als u terug wilt schakelen naarvoornaamst
, je gebruikt deuitchecken
commando met de naam van de hoofdtak:
gitafrekenen hoofd
Deuitchecken
Met command kunt u schakelen tussen meerdere vertakkingen, zodat u mogelijk aan meerdere functies tegelijk kunt werken.
Op dit punt kunt u nu bestaande bestanden wijzigen of nieuwe bestanden toevoegen aan het project op uw eigen branch.
Breng lokaal wijzigingen aan
Laten we het voorbeeld gebruiken om het maken van een pull-verzoek te demonstrerencloud_haiku
repo en maak een nieuw bestand in onze lokale kopie. Gebruik de teksteditor van uw voorkeur om een nieuw bestand te maken, zodat we een nieuw haiku-gedicht kunnen toevoegen, zoals uitgelegd in derichtlijnen bijdragen. We kunnen bijvoorbeeld nano gebruiken en ons voorbeeldbestand aanroepenbestandsnaam.md
. U moet uw bestand een originele naam geven met de.md
extensie voor Markdown.
nano bestandsnaam.md
Vervolgens voegen we wat tekst toe aan het nieuwe bestand, volgens hetrichtlijnen bijdragen. We moeten het Jekyll-formaat gebruiken en een haiku met regeleinden toevoegen. Het volgende bestand is een voorbeeldbestand, omdat u een originele haiku moet bijdragen.
bestandsnaam.md
---lay-out: haikutitel: Octopus Cloudauteur: Sammy---Gedistribueerde cloud
Net als de geesten van de octopussen
Over het hele netwerk
Nadat u uw tekst heeft toegevoegd, slaat u het bestand op en sluit u het. Als je nano hebt gebruikt, doe dit dan door op te drukkenCTRL+X
, DanY
, en danBINNENKOMEN
.
Zodra u een bestaand bestand heeft gewijzigd of een nieuw bestand aan het project van uw keuze heeft toegevoegd, kunt u het naar uw lokale repository plaatsen, wat we kunnen doen met degit toevoegen
commando. In ons voorbeeld,bestandsnaam.md
, typen we de volgende opdracht.
git toevoegen bestandsnaam.md
We hebben de naam van het bestand dat we hebben gemaakt aan deze opdracht doorgegeven om het naar onze lokale repository te brengen. Dit zorgt ervoor dat uw bestand klaar is om te worden toegevoegd.
Als u alle bestanden die u hebt gewijzigd in een bepaalde map wilt toevoegen, kunt u ze allemaal klaarzetten met de volgende opdracht:
git toevoegen .
Hier voegt de punt of punt alle relevante bestanden toe.
Als u alle wijzigingen recursief wilt toevoegen, inclusief die in submappen, typt u:
git toevoegen -A
Of u kunt typengit voeg -all toe
voor alle nieuwe bestanden die moeten worden geënsceneerd.
Nu ons bestand is geënsceneerd, willen we de wijzigingen vastleggen die we in de repository hebben aangebracht met degit commit
commando.
Wijzigingen doorvoeren
Decommit berichtis een belangrijk aspect van uw codebijdrage; het helpt de beheerders en andere bijdragers om de wijziging die u heeft aangebracht volledig te begrijpen, waarom u deze heeft aangebracht en hoe belangrijk deze is. Bovendien bieden commit-berichten een historisch overzicht van de wijzigingen voor het project als geheel, waardoor toekomstige bijdragers onderweg geholpen kunnen worden.
Als we een heel kort bericht hebben, kunnen we dat opnemen met de-M
vlag en het bericht tussen aanhalingstekens. In ons voorbeeld van het toevoegen van een haiku, onzegit commit
kan vergelijkbaar zijn met het volgende.
gitverbinden-M "Een nieuwe haiku toegevoegd in het bestand bestandsnaam.md"
Tenzij het een kleine of verwachte verandering is, willen we misschien een langer commit-bericht toevoegen, zodat onze medewerkers volledig op de hoogte zijn van onze bijdrage. Om dit grotere bericht op te nemen, zullen we degit commit
commando waarmee de standaard teksteditor wordt geopend:
gitverbinden
Wanneer u deze opdracht uitvoert, merkt u mogelijk dat u zich in de vim-editor bevindt, die u kunt afsluiten door te typen:Q
. Als u uw standaardteksteditor wilt configureren, kunt u dit doen met degit-config
commando en stel nano in als de standaardeditor, bijvoorbeeld:
gitconfiguratie--globaalkern.editor"nano"
Of vim:
gitconfiguratie--globaalkern.editor"vim"
Na het uitvoeren van degit commit
Afhankelijk van de standaard teksteditor die u gebruikt, zou uw terminalvenster een document moeten weergeven dat u kunt bewerken en dat er ongeveer zo uitziet:
GNU nano 2.0.6 Bestand: …gebruikersnaam/repository/.git/COMMIT_EDITMSG
# Voer het commit-bericht in voor uw wijzigingen. Regels die # beginnen met '#' worden genegeerd, en een leeg bericht breekt de commit af.# Op branchnieuwe tak# Uw branche is up-to-date met 'oorsprong/nieuwe tak'.## Wijzigingen die moeten worden doorgevoerd:# aangepast:nieuwe functie.py#
Onder de inleidende opmerkingen moet u het commit-bericht aan het tekstbestand toevoegen.
Om een nuttig commit-bericht te schrijven, moet u op de eerste regel een samenvatting van ongeveer 50 tekens lang plaatsen. Hieronder, en opgesplitst in begrijpelijke secties, moet u een beschrijving opnemen die de reden aangeeft waarom u deze wijziging heeft aangebracht, hoe de code werkt, en aanvullende informatie die het contextualiseert en verduidelijkt zodat anderen het werk kunnen beoordelen wanneer het wordt samengevoegd. Probeer zo behulpzaam en proactief mogelijk te zijn om ervoor te zorgen dat degenen die het project onderhouden uw bijdrage volledig kunnen begrijpen.
Wijzigingen pushen
Zodra je het tekstbestand van het commit-bericht hebt opgeslagen en afgesloten, kun je verifiëren wat Git gaat committen met het volgende commando:
gittoestand
Afhankelijk van de wijzigingen die u heeft aangebracht, ontvangt u uitvoer die er ongeveer zo uitziet:
Uitvoer
Op taknieuwe takniets te plegen, boom schoon werken
Op dit punt kunt u gebruik maken van degit push
commando om de wijzigingen naar de huidige tak van uw gevorkte repository te pushen:
gitpush --set-upstream oorsprong nieuwe branch
De opdracht geeft u uitvoer om u op de hoogte te stellen van de voortgang, en deze zal vergelijkbaar zijn met het volgende:
Uitvoer
Objecten tellen: 3, klaar. Deltacompressie met maximaal 4 threads. Objecten comprimeren: 100% (2/2), klaar. Objecten schrijven: 100% (3/3), 336 bytes | 0 bytes/s, klaar.Totaal 3 (delta 0), hergebruikt 0 (delta 0)Naar https://github.com/je gebruikersnaam/opslagplaats.git a1f29a6..79c0e80nieuwe tak->nieuwe takTaknieuwe takingesteld om externe vertakking te volgennieuwe takvan oorsprong.
Je kunt nu naar de gevorkte repository op je GitHub-webpagina navigeren en naar de branch gaan die je hebt gepusht om de wijzigingen te zien die je in de browser hebt aangebracht.
Op dit punt is het mogelijk omeen pull-request doennaar de oorspronkelijke repository, maar als u dit nog niet heeft gedaan, moet u ervoor zorgen dat uw lokale repository up-to-date is met de upstream-repository.
Update lokale opslagplaats
Terwijl u samen met andere bijdragers aan een project werkt, is het belangrijk dat u uw lokale repository up-to-date houdt met het project, omdat u geen pull-request wilt indienen voor code die automatisch conflicten veroorzaakt (hoewel in gezamenlijke codeprojecten, conflicten zullen onvermijdelijk voorkomen). Om uw lokale kopie van de codebasis up-to-date te houden, moet u wijzigingen synchroniseren.
We bespreken eerst het configureren van een afstandsbediening voor de fork en vervolgens het synchroniseren van de fork.
Configureer een afstandsbediening voor de vork
Externe opslagplaatsenmaken het voor u mogelijk om met anderen aan een Git-project samen te werken. Elke externe repository is een versie van het project die wordt gehost op internet of op een netwerk waartoe u toegang hebt. Elke externe repository moet voor u toegankelijk zijn als alleen-lezen of als lezen-schrijven, afhankelijk van uw gebruikersrechten.
Om de wijzigingen die u in een fork aanbrengt te kunnen synchroniseren met de oorspronkelijke repository waarmee u werkt, moet u een afstandsbediening configureren die verwijst naar de upstream-repository. U dient de afstandsbediening slechts één keer in te stellen op de upstream-repository.
Laten we eerst controleren welke externe servers u heeft geconfigureerd. Degit op afstand
Het commando zal de externe repository weergeven die je al hebt gespecificeerd, dus als je je repository hebt gekloond zoals we hierboven hebben gedaan, zul je op zijn minst uitvoer ontvangen met betrekking tot de oorspronkelijke repository, wat de standaardnaam is die door Git is gegeven voor de gekloonde map.
Laten we vanuit de map van de repository in ons terminalvenster degit op afstand
opdracht samen met de-v
flag om de URL’s weer te geven die Git heeft opgeslagen, samen met de relevante korte namen op afstand (zoals in “origin”):
gitop afstand-v
Omdat we een repository hebben gekloond, zou onze uitvoer er ongeveer zo uit moeten zien:
Uitvoer
oorsprong https://github.com/je gebruikersnaam/gevorkte-repository.git (ophalen)origin https://github.com/je gebruikersnaam/gevorkte-repository.git (push)
Als u eerder meer dan één afstandsbediening hebt ingesteld, wordt degit op afstand -v
commando geeft een lijst van allemaal.
Vervolgens specificeren we een nieuwe externe upstream-repository die we met de fork kunnen synchroniseren. Dit zal de originele repository zijn waaruit we zijn geforkt. Dit doen wij met degit op afstand toevoegen
commando.
gitop afstandtoevoegenstroomopwaarts https://github.com/oorspronkelijke-eigenaar-gebruikersnaam/origineel-repository.git
Voor onzecloud_haiku
Dit commando zou bijvoorbeeld het volgende zijn:
gitop afstandtoevoegenupstream https://github.com/do-community/cloud_haiku.git
In dit voorbeeldstroomopwaarts
is de korte naam die we hebben opgegeven voor de externe repository, omdat in termen van Git “upstream” verwijst naar de repository waaruit we hebben gekloond. Als we een externe aanwijzer willen toevoegen aan de repository van een bijdrager, willen we mogelijk de gebruikersnaam van die medewerker of een verkorte bijnaam voor de korte naam opgeven.
We kunnen verifiëren dat onze externe verwijzing naar de upstream-repository correct is toegevoegd door gebruik te maken van degit op afstand -v
opdracht opnieuw vanuit de repositorymap:
gitop afstand-v
Uitvoer
oorsprong https://github.com/je gebruikersnaam/gevorkte-repository.git (ophalen)origin https://github.com/je gebruikersnaam/gevorkte-repository.git (push)upstream https://github.com/oorspronkelijke-eigenaar-gebruikersnaam/origineel-repository.git (ophalen) upstream https://github.com/oorspronkelijke-eigenaar-gebruikersnaam/origineel-repository.git (push)
Nu kunt u ernaar verwijzenstroomopwaarts
op de opdrachtregel in plaats van de volledige URL te schrijven, en u bent klaar om uw fork te synchroniseren met de oorspronkelijke repository.
Synchroniseer de vork
Zodra we een afstandsbediening hebben geconfigureerd die verwijst naar de upstream en originele repository op GitHub, zijn we klaar om onze fork van de repository te synchroniseren om deze up-to-date te houden.
Om onze fork te synchroniseren, gebruiken we vanuit de map van onze lokale repository in een terminalvenster degit ophalen
commando om de branches samen met hun respectievelijke commits op te halen uit de upstream repository. Omdat we de korte naam ‘upstream’ hebben gebruikt om naar de upstream-repository te verwijzen, geven we die door aan de opdracht.
gitstroomopwaarts halen
Afhankelijk van hoeveel wijzigingen er zijn aangebracht sinds we de repository hebben gesplitst, kan uw uitvoer anders zijn en enkele regels bevatten over het tellen, comprimeren en uitpakken van objecten. Uw uitvoer eindigt op dezelfde manier als de volgende regels, maar kan variëren afhankelijk van het aantal vertakkingen dat deel uitmaakt van het project:
Uitvoer
Van https://github.com/oorspronkelijke-eigenaar-gebruikersnaam/origineel-repository* [nieuwe tak] hoofd -> stroomopwaarts/hoofd
Nu zullen commits naar de hoofdbranch worden opgeslagen in een lokale branch genaamdstroomopwaarts/hoofd
.
Laten we overschakelen naar de lokale hoofdtak van onze repository:
gitafrekenen hoofd
Uitvoer
Overgeschakeld naar filiaal 'hoofd'
We zullen nu alle wijzigingen samenvoegen die zijn aangebracht in de hoofdvertakking van de oorspronkelijke repository, waartoe we toegang hebben via onze lokalestroomopwaarts/hoofd
vestiging, met onze lokale hoofdvestiging:
gitstroomopwaarts/hoofd samenvoegen
De uitvoer hier zal variëren, maar het zal beginnen metUpdaten
als er wijzigingen zijn aangebracht, ofAl bijgewerkt
. als er geen wijzigingen zijn aangebracht sinds u de repository hebt geforkt.
De hoofdtak van je fork is nu gesynchroniseerd met de upstream-repository en eventuele lokale wijzigingen die je hebt aangebracht, zijn niet verloren gegaan.
Afhankelijk van uw eigen workflow en de hoeveelheid tijd die u besteedt aan het aanbrengen van wijzigingen, kunt u uw fork zo vaak als zinvol voor u is, synchroniseren met de upstream-code van de oorspronkelijke repository. Maar u moet uw fork zeker synchroniseren vlak voordat u een pull-verzoek indient, om er zeker van te zijn dat u niet automatisch conflicterende code bijdraagt.
Pull-aanvraag maken
Op dit punt bent u klaar om een pull-aanvraag in te dienen bij de oorspronkelijke repository.
U moet naar uw gevorkte repository navigeren en op drukkenNieuw pull-verzoekknop aan uw linkerkant van de pagina.
Op het volgende scherm kunt u de vertakking wijzigen. Aan beide kanten kunt u de juiste repository selecteren in het vervolgkeuzemenu en de juiste vertakking.
Zodra u bijvoorbeeld de hoofdtak van de oorspronkelijke repository aan de linkerkant hebt gekozen, en denieuwe takvan uw gevorkte repository aan de rechterkant, zou u een scherm moeten ontvangen waarin staat dat uw branches kunnen worden samengevoegd als er geen concurrerende code is:
U moet een titel en commentaar toevoegen aan de juiste velden en vervolgens op drukkenPull-aanvraag makenknop.
Op dit punt zullen de beheerders van de oorspronkelijke repository beslissen of ze uw pull-verzoek wel of niet accepteren. Ze kunnen u vragen uw code te bewerken of te herzien voordat ze het pull-verzoek accepteren door een codebeoordeling in te dienen.
Conclusie
Op dit punt hebt u met succes een pull-verzoek naar een open-source softwareopslagplaats verzonden. Hierna moet u ervoor zorgen dat u uw code bijwerkt en opnieuw baseert terwijl u wacht totdat deze wordt beoordeeld. Projectbeheerders kunnen u vragen uw code te herwerken, dus u moet daartoe bereid zijn.
Bijdragen aan open-sourceprojecten – en een actieve open-source-ontwikkelaar worden – kan een lonende ervaring zijn. Door regelmatig bijdragen te leveren aan software die u vaak gebruikt, kunt u ervoor zorgen dat die software zo waardevol mogelijk is voor andere eindgebruikers.
Als je meer wilt weten over Git en wilt samenwerken aan open-source software, kun je onze tutorialreeks lezen met de titelEen inleiding tot open source. Als je al bekend bent met Git en een spiekbriefje wilt, kun je verwijzen naar "Hoe Git te gebruiken: een referentiegids.”