Samenwerken met behulp van een pull-opdracht

Voltooid

In uw downtime buiten uw nieuwe baan hebt u gewerkt aan een website die foto's van katten host. U hebt Git gebruikt voor versiebeheer en het is tijd om samenwerkers uit te nodigen voor het project. Tijdens een pizzafeest in uw huis biedt uw vriend en mede kattenliefhebber Alice aan om uw visie tot fruit te brengen en u graag te accepteren.

Alice moet eerst een kopie van uw Git-project maken. Vervolgens wil Alice hun wijzigingen naar u verzenden wanneer ze ze aanbrengen. Deze situatie is waar git's gedistribueerde natuur schijnt. Met Behulp van Git kunnen twee of meer personen samenwerken aan een project zonder bang te zijn voor het overschrijven van het werk van de ander. Bovendien kunt u het werk van Alice controleren voordat u het samenvoegt met uw werk. (Alice is getalenteerd, maar geen ontwikkelaar is perfect. Vertrouwen maar verifiëren.)

In deze les leert u hoe u een opslagplaats (ook wel een opslagplaats genoemd) kloont om deze beschikbaar te maken voor andere personen. U leert ook hoe u een van de belangrijkste functies van Git gebruikt: pull-aanvragen.

Een opslagplaats klonen (git-kloon)

In Git kopieert u een opslagplaats door deze te klonen met behulp van de git clone opdracht. U kunt een opslagplaats klonen, ongeacht waar deze is opgeslagen, zolang u een URL of pad hebt waarnaar u deze wilt verwijzen.

git clone accepteert een bestandssysteempad; een SSH-pad (bijvoorbeeld git@example.com:alice/Cats: u bent bekend met dit formulier als u Rsync of SCP hebt gebruikt); of een URL, meestal een URL die begint met file:, git:of ssh. De verschillende formulieren worden beschreven in de documentatie voor git clone. In Unix en Linux maakt de kloonbewerking gebruik van vaste koppelingen, dus het is snel en maakt gebruik van minimale ruimte omdat alleen de mapvermeldingen moeten worden gekopieerd, niet de bestanden.

Externe opslagplaatsen (git-pull)

Wanneer Git een opslagplaats kloont, wordt er een verwijzing gemaakt naar de oorspronkelijke opslagplaats die een externe opslagplaats wordt genoemd met behulp van de naam origin. Hiermee stelt u de gekloonde opslagplaats zo in dat de gekloonde opslagplaats wordt opgehaald uit of gegevens uit de externe opslagplaats worden opgehaald. (Git kan ook pushen. Verderop in deze module leert u hoe u pusht in Git.) origin is de standaardlocatie voor Git om wijzigingen op te halen van en wijzigingen te pushen naar. git pull kopieert wijzigingen van de externe opslagplaats naar de lokale opslagplaats. De git pull opdracht is zeer efficiënt omdat deze alleen nieuwe doorvoeringen en objecten kopieert en deze vervolgens in uw werkstructuur controleert.

U haalt vandaan origin met behulp van de git pull opdracht. Het is handig om git pull te vergelijken met andere methoden voor het kopiëren van bestanden. Met de scp opdracht wordt alles gekopieerd. (scp is vergelijkbaar met de Unix-opdracht cp , behalve dat de bestanden die worden gekopieerd, zich niet op dezelfde computer hoeven te bevinden.) Als er 10.000 bestanden in de externe map staan, scp kopieert u ze allemaal. Een efficiënter programma met de naam Rsync kijkt naar elk bestand in de lokale en externe mappen en kopieert alleen de bestanden die verschillend zijn. Rsync wordt vaak gebruikt voor het maken van back-ups, maar het moet nog steeds elk bestand hashen, tenzij de bestanden verschillende grootten of aanmaakdatums hebben.

Git kijkt alleen naar doorvoeringen. Deze kent al de laatste doorvoering die is ontvangen uit de externe opslagplaats, omdat de lijst met doorvoeringen is opgeslagen. Vervolgens vertelt Git de computer dat deze wordt gekopieerd om alles te verzenden dat is gewijzigd, inclusief de nieuwe doorvoeringen en de objecten waarnaar ze verwijzen. Deze doorvoeringen en objecten worden gebundeld in een bestand dat een pakket wordt genoemd en in één batch wordt verzonden. Ten slotte werkt Git de werkstructuur bij door alle objecten uit te pakken die ze (indien nodig) hebben gewijzigd en samengevoegd met de doorvoeringen en objecten in de actieve boomstructuur.

Git haalt of pusht alleen wanneer u dit aangeeft. Dat verschilt van Dropbox, dat het besturingssysteem moet vragen om het op de hoogte te stellen van eventuele wijzigingen die u in de map aanbrengt en af en toe de server te vragen of iemand anders wijzigingen heeft aangebracht.

Pull-aanvragen maken (git request-pull)

Nadat een andere ontwikkelaar, zoals Alice, uw opslagplaats heeft gekloond en lokaal enkele wijzigingen heeft aangebracht, willen ze deze wijzigingen weer opnemen in de oorspronkelijke opslagplaats. Het lijkt erop dat het pushen van deze wijzigingen naar de oorspronkelijke opslagplaats de juiste aanpak is. Een push naar de oorspronkelijke opslagplaats mislukt echter omdat andere gebruikers niet gemachtigd zijn om wijzigingen aan te brengen in uw opslagplaats. En zo hoort het ook. Voorlopig wilt u binnenkomende wijzigingen controleren voordat u ze samenvoegt in de hoofdcodebasis.

Alice moet voorlopig een pull-aanvraag indienen om u te vragen om de wijzigingen in de hoofdcodebasis op te halen. Alice kan dit doen met behulp van git request-pull, wat er als volgt uitziet:

git request-pull -p origin/main .

Alice verwijst naar de main vertakking op de origin externe locatie als origin/main.

Deze pull-aanvraag is in feite hetzelfde als een pull-aanvraag op GitHub (GitHub is een plek om code op te slaan, die we niet in deze module behandelen). Met een pull-aanvraag kunt u de wijzigingen van andere medewerkers bekijken voordat u hun werk opneemt in het werk dat u op de website uitvoert. Codebeoordelingen zijn een belangrijk onderdeel, waarvan sommige het belangrijkste deel zeggen, van gezamenlijke programmering.

Een externe (git remote) maken en de pull-aanvraag voltooien (git pull)

Als projecteigenaar moet u weten hoe u pull-aanvragen kunt samenvoegen. Eerst gebruikt u de git remote opdracht om de opslagplaats van een andere ontwikkelaar in te stellen als een externe opslagplaats. Vervolgens gebruikt u die externe functie voor pull- en pull-aanvragen met behulp van de git pull opdracht.

Achter de schermen is git pull een combinatie van twee eenvoudigere bewerkingen: git fetch, waarmee de wijzigingen worden opgehaald, en git merge, waarmee deze wijzigingen worden samengevoegd in uw opslagplaats. In dit geval was de samenvoeging snel, wat betekent dat Alice uw meest recente doorvoering in hun opslagplaats had, zodat hun doorvoer kon worden toegevoegd aan het begin van uw geschiedenis zonder enige wijziging.