Chapters ▾ 2nd Edition

6.2 GitHub - Bidra till ett projekt

Bidra till ett projekt

Nu när vårt konto är på plats går vi igenom några detaljer som kan hjälpa dig att bidra till ett befintligt projekt.

Avgrena projekt

Om du vill bidra till ett befintligt projekt där du inte har rätt att skicka ändringar kan du "avgrena" projektet. När du avgrenar ett projekt skapar GitHub en kopia av projektet som helt tillhör dig; den ligger i din namnrymd och du kan skicka till den.

Notera

Historiskt sett har ordet "avgrening" i den här betydelsen haft en något negativ klang och betytt att någon tog ett öppet källkodsprojekt i en annan riktning, ibland skapade ett konkurrerande projekt och splittrade medverkande. I GitHub betyder en avgrening helt enkelt samma projekt i din egen namnrymd, vilket gör att du kan göra ändringar offentligt och bidra på ett öppnare sätt.

På det här sättet slipper projekt lägga till användare som medarbetare bara för att ge dem rätt att skicka. Folk kan avgrena ett projekt, skicka till det och bidra tillbaka till det ursprungliga kodförrådet genom att skapa något som kallas en ändringsförfrågan, vilket vi tar upp härnäst. Det öppnar en diskussionstråd med kodgranskning, och ägaren och bidragslämnaren kan kommunicera om ändringen tills ägaren är nöjd, varpå ägaren kan sammanfoga den.

För att avgrena ett projekt går du till projektsidan och klickar på knappen för att avgrena uppe till höger.

Knappen för att avgrena
Figur 86. Knappen för att avgrena

Efter några sekunder hamnar du på din nya projektsida, med din egen skrivbara kopia av koden.

GitHub-flödet

GitHub är utformat kring ett särskilt samarbetsflöde som kretsar kring ändringsförfrågningar. Det fungerar oavsett om du samarbetar i ett tätt team i ett delat kodförråd, eller i en globalt distribuerad organisation eller ett nätverk av främlingar som bidrar via dussintals avgreningar. Det bygger på arbetsflödet med Ämnesgrenar som beskrivs i Git-grenar.

Så här ser det i regel ut:

  1. Avgrena projektet.

  2. Skapa en ämnesgren från master.

  3. Gör några incheckningar som förbättrar projektet.

  4. Skicka grenen till ditt GitHub-projekt.

  5. Öppna en ändringsförfrågan på GitHub.

  6. Diskutera och fortsätt vid behov att checka in.

  7. Projektägaren sammanfogar eller stänger ändringsförfrågan.

  8. Synkronisera den uppdaterade master tillbaka till din avgrening.

I grunden är detta samma integrationsstyrda arbetsflöde som i Integrationsstyrt arbetsflöde, men teamen använder GitHubs webbverktyg i stället för e-post för kommunikation och granskning.

Vi går igenom ett exempel på hur du föreslår en ändring i ett öppet källkodsprojekt som ligger på GitHub med det här flödet.

Tips

Du kan använda det officiella verktyget GitHub CLI i stället för GitHubs webgränssnitt för det mesta. Verktyget fungerar på Windows, macOS och Linux. Gå till GitHub CLI:s startsida för installationsinstruktioner och manual.

Skapa en ändringsförfrågan

Tony letar efter kod att köra på sin programmerbara Arduino-mikrostyrning och har hittat en bra programfil på GitHub på https://github.com/schacon/blink.

Projektet vi vill bidra till
Figur 87. Projektet vi vill bidra till

Det enda problemet är att blinktakten är för hög. Vi tycker att det är trevligare att vänta 3 sekunder i stället för 1 mellan varje lägesändring. Låt oss förbättra programmet och skicka tillbaka det till projektet som en föreslagen ändring.

Först klickar vi på knappen för att avgrena som nämndes tidigare för att få en egen kopia av projektet. Vårt användarnamn här är "tonychacon", så vår kopia av projektet finns på https://github.com/tonychacon/blink och det är där vi kan redigera den. Vi klonar den lokalt, skapar en ämnesgren, gör kodändringen och skickar slutligen upp ändringen tillbaka till GitHub.

$ git clone https://github.com/tonychacon/blink (1)
Cloning into 'blink'...

$ cd blink
$ git checkout -b slow-blink (2)
Switched to a new branch 'slow-blink'

$ sed -i '' 's/1000/3000/' blink.ino (macOS) (3)
# If you're on a Linux system, do this instead:
# $ sed -i 's/1000/3000/' blink.ino (3)

$ git diff --word-diff (4)
diff --git a/blink.ino b/blink.ino
index 15b9911..a6cc5a5 100644
--- a/blink.ino
+++ b/blink.ino
@@ -18,7 +18,7 @@ void setup() {
// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  [-delay(1000);-]{+delay(3000);+}               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  [-delay(1000);-]{+delay(3000);+}               // wait for a second
}

$ git commit -a -m 'Change delay to 3 seconds' (5)
[slow-blink 5ca509d] Change delay to 3 seconds
 1 file changed, 2 insertions(+), 2 deletions(-)

$ git push origin slow-blink (6)
Username for 'https://github.com': tonychacon
Password for 'https://tonychacon@github.com':
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 340 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/tonychacon/blink
 * [new branch]      slow-blink -> slow-blink
  1. Klona vår avgrening av projektet lokalt.

  2. Skapa en beskrivande ämnesgren.

  3. Gör vår ändring i koden.

  4. Kontrollera att ändringen ser bra ut.

  5. Checka in ändringen i ämnesgrenen.

  6. Skicka vår nya ämnesgren till vår GitHub-avgrening.

Om vi nu går tillbaka till vår avgrening på GitHub kan vi se att GitHub har märkt att vi har skickat upp en ny ämnesgren och presenterar en stor grön knapp för att granska våra ändringar och öppna en ändringsförfrågan mot ursprungsprojektet.

Du kan också gå till sidan för grenar på https://github.com/<user>/<project>/branches för att hitta din gren och öppna en ny ändringsförfrågan därifrån.

Knapp för ändringsförfrågan
Figur 88. Knapp för ändringsförfrågan

Om vi klickar på den gröna knappen får vi en skärm som ber oss ange titel och beskrivning för ändringsförfrågan. Det är nästan alltid värt att lägga lite tid på detta, eftersom en bra beskrivning hjälper ägaren av ursprungsprojektet att avgöra vad du försökte göra, om de föreslagna ändringarna är riktiga och om det förbättrar projektet att ta in dem.

Vi ser också en lista över incheckningarna i vår ämnesgren som ligger före master-grenen (i det här fallet bara en) samt en sammanfogad diff över alla ändringar som görs om grenen sammanfogas av projektägaren.

Sida för att skapa ändringsförfrågan
Figur 89. Sida för att skapa ändringsförfrågan

När du trycker på knappen för att skapa ändringsförfrågan på den här skärmen får ägaren av projektet du avgrenade en avisering om att någon föreslår en ändring, och en länk till en sida som innehåller all informationen.

Notera

Även om ändringsförfrågningar ofta används för publika projekt som detta när bidragslämnaren har en färdig ändring, används de också ofta i interna projekt i början av utvecklingscykeln. Eftersom du kan fortsätta skicka till ämnesgrenen även efter att ändringsförfrågan öppnats, öppnas den ofta tidigt och används för att iterera arbetet som ett team i ett sammanhang, i stället för att öppnas allra sist i processen.

Iterera på en ändringsförfrågan

Här kan projektägaren granska den föreslagna ändringen och sammanfoga den, avvisa den eller kommentera den. Säg att han gillar idén, men föredrar att lampan är släckt lite längre än den är tänd.

I arbetsflödena i Distribuerat Git kan sådana samtal ske via e-post; på GitHub sker det på webben. Projektägaren kan granska den sammanfogade diffen och lämna en kommentar genom att klicka på någon av raderna.

Kommentera en specifik kodrad i en ändringsförfrågan
Figur 90. Kommentera en specifik kodrad i en ändringsförfrågan

När förvaltaren gör denna kommentar får den som öppnade ändringsförfrågan (och i själva verket alla som följer kodförrådet) en avisering. Vi går igenom hur du anpassar det senare, men om han hade e-postaviseringar aktiverade skulle Tony få ett e-postmeddelande som detta:

Kommentarer skickade som e-postaviseringar
Figur 91. Kommentarer skickade som e-postaviseringar

Vem som helst kan också lämna allmänna kommentarer på ändringsförfrågan. I Diskussionssida för ändringsförfrågan ser vi ett exempel där projektägaren både kommenterar en kodrad och sedan lämnar en allmän kommentar i diskussionsdelen. Du ser att kodkommentarerna förs in i samtalet.

Diskussionssida för ändringsförfrågan
Figur 92. Diskussionssida för ändringsförfrågan

Nu kan bidragslämnaren se vad som behöver göras för att få ändringen godkänd. Lyckligtvis är det mycket rakt på sak. Där man via e-post kan behöva rulla om sin serie och skicka in den till e-postlistan igen, räcker det på GitHub att checka in i ämnesgrenen igen och skicka, vilket automatiskt uppdaterar ändringsförfrågan. I Ändringsförfrågan, slutligt läge kan du också se att den gamla kodkommentaren har fällts ihop i den uppdaterade ändringsförfrågan, eftersom den gjordes på en rad som sedan ändrats.

Att lägga till incheckningar i en befintlig ändringsförfrågan triggar ingen avisering, så när Tony har skickat upp sina rättelser väljer han att lämna en kommentar för att meddela projektägaren att han gjort den begärda ändringen.

Ändringsförfrågan, slutligt läge
Figur 93. Ändringsförfrågan, slutligt läge

En intressant detalj är att om du klickar på fliken för ändrade filer i ändringsförfrågan får du den sammanfogade diffen — alltså den sammanlagda skillnaden som skulle införas i din huvudgren om ämnesgrenen sammanfogas. I git diff-termer visar den i praktiken automatiskt git diff master…​<branch> för grenen som ändringsförfrågan bygger på. Se Avgöra vad som ska integreras för mer om denna typ av diff.

Det andra du märker är att GitHub kontrollerar om ändringsförfrågan sammanfogas rent och erbjuder en knapp för att göra sammanslagningen åt dig på servern. Den knappen visas bara om du har skrivrättigheter till kodförrådet och en enkel sammanslagning är möjlig. Om du klickar på den utför GitHub en icke-snabbspolad sammanslagning, vilket betyder att även om sammanslagningen skulle kunna snabbspolas, skapar den ändå en sammanslagningsincheckning.

Om du föredrar kan du helt enkelt dra ner grenen och sammanfoga den lokalt. Om du sammanfogar grenen in i master-grenen och skickar upp den till GitHub stängs ändringsförfrågan automatiskt.

Det här är det grundläggande arbetsflödet som de flesta GitHub-projekt använder. Ämnesgrenar skapas, ändringsförfrågningar öppnas, en diskussion följer, eventuellt görs mer arbete i grenen och till sist stängs eller sammanfogas förfrågan.

Notera
Inte bara avgreningar

Det är viktigt att notera att du också kan öppna en ändringsförfrågan mellan två grenar i samma kodförråd. Om du arbetar på en funktion med någon och ni båda har skrivrättigheter till projektet kan du skicka en ämnesgren till kodförrådet och öppna en ändringsförfrågan mot master-grenen i samma projekt för att starta kodgranskning och diskussion. Ingen avgrening behövs.

Avancerade ändringsförfrågningar

Nu när vi har gått igenom grunderna i att bidra till ett projekt på GitHub tittar vi på några intressanta tips och knep om ändringsförfrågningar så att du kan använda dem mer effektivt.

Ändringsförfrågningar som ändringspatchar

Det är viktigt att förstå att många projekt inte riktigt ser ändringsförfrågningar som köer av perfekta ändringspatchar som ska appliceras rent i ordning, såsom de flesta e-postlistebaserade projekt ser bidrag i form av ändringspatchserier. De flesta GitHub-projekt ser ämnesgrenar för ändringsförfrågningar som iterativa samtal kring en föreslagen ändring, som mynnar ut i en sammanfogad diff som appliceras genom sammanslagning.

Det här är en viktig skillnad, eftersom ändringar ofta föreslås innan koden är helt färdig, vilket är betydligt ovanligare i e-postlistebaserade patchserier. Det möjliggör ett tidigare samtal med förvaltarna så att rätt lösning blir mer av ett gemensamt arbete. När kod föreslås via en ändringsförfrågan och förvaltare eller gemenskapen föreslår en ändring, rullas ändringspatchserien i regel inte om, utan skillnaden skickas upp som en ny incheckning till grenen, vilket för samtalet framåt med tidigare kontext intakt.

Om du till exempel går tillbaka och tittar på Ändringsförfrågan, slutligt läge ser du att bidragslämnaren inte ombaserade sin incheckning och skickade in en ny ändringsförfrågan. I stället lade de till nya incheckningar och skickade upp dem till den befintliga grenen. På så vis kan du gå tillbaka och se all kontext kring varför beslut fattades. När du trycker på sammanslagningsknappen på webbplatsen skapas medvetet en sammanslagningsincheckning som refererar till ändringsförfrågan så att det är lätt att gå tillbaka och undersöka den ursprungliga diskussionen vid behov.

Häng med uppströms

Om din ändringsförfrågan blir inaktuell eller på annat sätt inte går att sammanfoga rent vill du åtgärda den så att förvaltaren enkelt kan sammanfoga. GitHub kontrollerar detta åt dig och talar om längst ner i varje ändringsförfrågan om sammanslagningen är enkel eller inte.

Ändringsförfrågan sammanfogas inte rent
Figur 94. Ändringsförfrågan sammanfogas inte rent

Om du ser något som Ändringsförfrågan sammanfogas inte rent vill du fixa din gren så att den blir grön och förvaltaren slipper extra arbete.

Du har två huvudalternativ för att göra det. Antingen ombaserar du din gren ovanpå den gren som är målet (vanligen master i kodförrådet du avgrenade), eller så sammanfogar du målets gren in i din egen gren.

De flesta utvecklare på GitHub väljer det senare, av samma skäl som vi gick igenom i föregående avsnitt. Det som spelar roll är historiken och den slutliga sammanslagningen, så ombasering ger dig inte mycket mer än en lite renare historik och är i gengäld betydligt svårare och mer felbenägen.

Om du vill sammanfoga målgrenen för att göra ändringsförfrågan sammanslagningsbar lägger du till ursprungskodförrådet som ett nytt fjärrkodförråd, uppdaterar därifrån, sammanfogar huvudgrenen från det kodförrådet in i din ämnesgren, löser eventuella problem och skickar sedan upp tillbaka till samma gren som ändringsförfrågan pekar på.

Till exempel, säg att vi i "tonychacon"-exemplet från tidigare använder, gjorde ursprungsförfattaren en ändring som skapade en konflikt i ändringsförfrågan. Låt oss gå igenom stegen.

$ git remote add upstream https://github.com/schacon/blink (1)

$ git fetch upstream (2)
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From https://github.com/schacon/blink
 * [new branch]      master     -> upstream/master

$ git merge upstream/master (3)
Auto-merging blink.ino
CONFLICT (content): Merge conflict in blink.ino
Automatic merge failed; fix conflicts and then commit the result.

$ vim blink.ino (4)
$ git add blink.ino
$ git commit
[slow-blink 3c8d735] Merge remote-tracking branch 'upstream/master' \
    into slower-blink

$ git push origin slow-blink (5)
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 682 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To https://github.com/tonychacon/blink
   ef4725c..3c8d735  slower-blink -> slow-blink
  1. Lägg till ursprungskodförrådet som ett fjärrkodförråd med namnet upstream.

  2. Uppdatera det senaste arbetet från det fjärrkodförrådet.

  3. Sammanfoga huvudgrenen från det kodförrådet in i din ämnesgren.

  4. Åtgärda konflikten som uppstod.

  5. Skicka tillbaka till samma ämnesgren.

När du har gjort detta uppdateras ändringsförfrågan automatiskt och kontrolleras igen för att se om den sammanfogas rent.

Ändringsförfrågan sammanfogas nu rent
Figur 95. Ändringsförfrågan sammanfogas nu rent

En av de stora fördelarna med Git är att du kan göra detta kontinuerligt. Om du har ett projekt som pågår länge kan du enkelt sammanfoga från målgrenen om och om igen och bara behöva hantera konflikter som uppstått sedan senaste sammanslagningen, vilket gör processen lätt att hantera.

Om du absolut vill ombasera grenen för att städa till den kan du göra det, men det är starkt rekommenderat att inte tvinga upp en ombaserad gren över den gren som ändringsförfrågan redan pekar på. Om andra har dragit ner den och gjort mer arbete stöter du på problemen som beskrivs i Farorna med grenflyttning. Skicka i stället upp den ombaserade grenen till en ny gren på GitHub och öppna en helt ny ändringsförfrågan som refererar till den gamla, och stäng sedan den ursprungliga.

Referenser

Din nästa fråga kan vara "Hur refererar jag den gamla ändringsförfrågan?". Det visar sig att det finns många sätt att referera till andra saker nästan överallt där du kan skriva i GitHub.

Vi börjar med hur du korsrefererar en annan ändringsförfrågan eller ett ärende. Alla ändringsförfrågningar och ärenden får nummer och de är unika inom projektet. Du kan till exempel inte ha ändringsförfrågan #3 och ärende #3. Om du vill referera till en ändringsförfrågan eller ett ärende från en annan kan du helt enkelt skriva #<num> i en kommentar eller beskrivning. Du kan också vara mer specifik om ärendet eller ändringsförfrågan ligger någon annanstans: skriv användare#<num> om du refererar till ett ärende eller en ändringsförfrågan i en avgrening av kodförrådet du är i, eller användare/kodförråd#<num> för att referera till något i ett annat kodförråd.

Låt oss titta på ett exempel. Säg att vi ombaserade grenen i det föregående exemplet, skapade en ny ändringsförfrågan för den, och nu vill vi referera till den gamla ändringsförfrågan från den nya. Vi vill också referera till ett ärende i avgreningen av kodförrådet och ett ärende i ett helt annat projekt. Vi kan fylla i beskrivningen som i Korsreferenser i en ändringsförfrågan.

Korsreferenser i en ändringsförfrågan
Figur 96. Korsreferenser i en ändringsförfrågan

När vi skickar in ändringsförfrågan ser vi allt renderat som i Korsreferenser renderade i en ändringsförfrågan.

Korsreferenser renderade i en ändringsförfrågan
Figur 97. Korsreferenser renderade i en ändringsförfrågan

Lägg märke till att hela GitHub-adressen vi la in kortades till precis den information som behövs.

När Tony går tillbaka och stänger den ursprungliga ändringsförfrågan ser vi att GitHub automatiskt har skapat en återkopplingshändelse i ändringsförfrågans tidslinje, eftersom vi nämnde den i den nya. Det betyder att den som besöker ändringsförfrågan och ser att den är stängd enkelt kan länka tillbaka till den som ersatte den. Länken ser ut ungefär som i Länk tillbaka till den nya ändringsförfrågan i tidslinjen för den stängda.

Länk tillbaka till den nya ändringsförfrågan i tidslinjen för den stängda
Figur 98. Länk tillbaka till den nya ändringsförfrågan i tidslinjen för den stängda

Utöver ärendenummer kan du även referera till en specifik incheckning via SHA-1. Du måste ange hela SHA-1 på 40 tecken, men om GitHub ser det i en kommentar länkar den direkt till incheckningen. Återigen kan du referera till incheckningar i avgreningar eller andra kodförråd på samma sätt som med ärenden.

GitHub-anpassad Markdown

Att länka till andra ärenden är bara början på intressanta saker du kan göra i nästan varje textruta på GitHub. I beskrivningar av ärenden och ändringsförfrågningar, kommentarer, kodkommentarer med mera kan du använda det som kallas "GitHub-anpassad Markdown". Markdown är som att skriva i vanlig text, men renderas rikt.

Se Ett exempel på GitHub-anpassad Markdown, både skriven och renderad för ett exempel på hur kommentarer eller text kan skrivas och sedan renderas med Markdown.

Ett exempel på GitHub-anpassad Markdown, både skriven och renderad
Figur 99. Ett exempel på GitHub-anpassad Markdown, både skriven och renderad

GitHubs variant av Markdown lägger till fler saker du kan göra utöver den grundläggande Markdown-syntaxen. Allt detta är mycket användbart när du skapar bra ändringsförfråge- eller ärendekommentarer eller beskrivningar.

Uppgiftslistor

Den första riktigt användbara GitHub-specifika Markdown-funktionen, särskilt i ändringsförfrågningar, är uppgiftslistan. En uppgiftslista är en lista med kryssrutor för saker du vill få gjort. Att lägga dem i ett ärende eller en ändringsförfrågan innebär normalt sådant du vill ha gjort innan du anser att saken är klar.

Du kan skapa en uppgiftslista så här:

- [X] Write the code
- [ ] Write all the tests
- [ ] Document the code

Om vi tar med detta i beskrivningen av vår ändringsförfrågan eller vårt ärende ser det renderat ut som i Uppgiftslistor renderade i en Markdown-kommentar.

Uppgiftslistor renderade i en Markdown-kommentar
Figur 100. Uppgiftslistor renderade i en Markdown-kommentar

Detta används ofta i ändringsförfrågningar för att ange vad du vill få gjort i grenen innan ändringsförfrågan är redo att sammanfogas. Det riktigt smidiga är att du kan klicka i kryssrutorna för att uppdatera kommentaren — du behöver inte redigera Markdownen direkt för att bocka av uppgifter.

Dessutom letar GitHub efter uppgiftslistor i dina ärenden och ändringsförfrågningar och visar dem som metadata på sidorna som listar dem. Om du till exempel har en ändringsförfrågan med uppgifter och du tittar på översiktssidan med alla ändringsförfrågningar ser du hur långt den kommit. Det hjälper människor att bryta ned ändringsförfrågningar i deluppgifter och hjälper andra att följa grenens framsteg. Du kan se ett exempel i Sammanfattning av uppgiftslista i ändringsförfrågelistan.

Sammanfattning av uppgiftslista i ändringsförfrågelistan
Figur 101. Sammanfattning av uppgiftslista i ändringsförfrågelistan

Det är oerhört användbart när du öppnar en ändringsförfrågan tidigt och använder den för att spåra framstegen i implementationen av en funktion.

Kodsnuttar

Du kan också lägga till kodsnuttar i kommentarer. Det är särskilt användbart om du vill visa en möjlig lösning innan du checkar in den i din gren. Det används också ofta för att lägga in exempelkod som visar vad som inte fungerar eller hur ändringsförfrågan kan lösas.

För att lägga till en kodsnutt måste du "stängsla in" den med omvända citattecken.

```java
for(int i=0 ; i < 5 ; i++)
{
   System.out.println("i is : " + i);
}
```

Om du lägger till ett språknamn som vi gjorde med "java" kommer GitHub också att försöka syntaxmarkera snutten. I fallet ovan skulle den renderas ungefär som i Renderat exempel på inhägnad kod.

Renderat exempel på inhägnad kod
Figur 102. Renderat exempel på inhägnad kod

Citat

Om du svarar på en liten del av en lång kommentar kan du citera delar av den andra kommentaren genom att inleda raderna med tecknet >. Faktum är att detta är så vanligt och användbart att det finns en kortkommando för det. Om du markerar text i en kommentar du vill svara direkt på och trycker r får du texten citerad i kommentarsrutan.

Citaten ser ut ungefär så här:

> Whether 'tis Nobler in the mind to suffer
> The Slings and Arrows of outrageous Fortune,

How big are these slings and in particular, these arrows?

När kommentaren renderas ser den ut som i Renderat exempel på citat.

Renderat exempel på citat
Figur 103. Renderat exempel på citat

Emoji

Till sist kan du också använda emoji i dina kommentarer. Det används rätt flitigt i kommentarer i många GitHub-ärenden och ändringsförfrågningar. Det finns till och med en emoji-hjälpare i GitHub. Om du skriver en kommentar och börjar med tecknet : hjälper en autokomplettering dig att hitta det du söker.

Emoji-autokomplettering i praktiken
Figur 104. Emoji-autokomplettering i praktiken

Emoji skrivs som :<namn>: var som helst i kommentaren. Till exempel kan du skriva något i stil med detta:

I :eyes: that :bug: and I :cold_sweat:.

:trophy: for :microscope: it.

:+1: and :sparkles: on this :ship:, it's :fire::poop:!

:clap::tada::panda_face:

När det renderas ser det ut ungefär som i Mycket emoji i kommentarer.

Mycket emoji i kommentarer
Figur 105. Mycket emoji i kommentarer

Det är inte särskilt nyttigt, men det ger ett inslag av lek och känsla i ett medium där det annars är svårt att förmedla känslor.

Notera

Många webbtjänster använder emoji i dag. Ett bra fuskblad att slå upp emoji som uttrycker det du vill säga finns på:

Bilder

Det här är inte tekniskt sett GitHub-anpassad Markdown, men det är otroligt användbart. Utöver att lägga till Markdown-bildlänkar i kommentarer, vilket kan vara svårt att hitta och bädda in URL:er för, låter GitHub dig dra och släppa bilder i textrutor för att bädda in dem.

Dra och släpp bilder för att ladda upp och bädda in automatiskt
Figur 106. Dra och släpp bilder för att ladda upp och bädda in automatiskt

Om du tittar på Dra och släpp bilder för att ladda upp och bädda in automatiskt ser du en liten text "Tolkad som Markdown" ovanför textrutan. Om du klickar på den får du ett fullständigt fuskblad över allt du kan göra med Markdown på GitHub.

Håll ditt publika GitHub-kodförråd uppdaterat

När du har avgrenat ett GitHub-kodförråd existerar ditt kodförråd (din "avgrening") oberoende av originalet. När originalkodförrådet får nya incheckningar informerar GitHub dig via ett meddelande som:

This branch is 5 commits behind progit:master.

Men ditt GitHub-kodförråd uppdateras aldrig automatiskt av GitHub; det måste du göra själv. Lyckligtvis är det väldigt enkelt.

En möjlighet kräver ingen konfiguration. Om du till exempel avgrenade från https://github.com/progit/progit2.git kan du hålla din master-gren uppdaterad så här:

$ git checkout master (1)
$ git pull https://github.com/progit/progit2.git (2)
$ git push origin master (3)
  1. Om du var på en annan gren, gå tillbaka till master.

  2. Uppdatera ändringar från https://github.com/progit/progit2.git och sammanfoga dem i master.

  3. Skicka din master-gren till origin.

Det fungerar, men det är lite krångligt att behöva skriva ut uppdateringsadressen varje gång. Du kan automatisera detta med lite konfiguration:

$ git remote add progit https://github.com/progit/progit2.git (1)
$ git fetch progit (2)
$ git branch --set-upstream-to=progit/master master (3)
$ git config --local remote.pushDefault origin (4)
  1. Lägg till källkodförrådet och ge det ett namn. Här har jag valt att kalla det progit.

  2. Uppdatera en referens till progits grenar, särskilt master.

  3. Ställ in din master-gren att uppdatera från fjärrkodförrådet progit.

  4. Definiera standardkodförrådet för push som origin.

När det här är på plats blir arbetsflödet mycket enklare:

$ git checkout master (1)
$ git pull (2)
$ git push (3)
  1. Om du var på en annan gren, gå tillbaka till master.

  2. Hämta ändringar från progit och sammanfoga ändringar i master.

  3. Skicka din master-gren till origin.

Detta tillvägagångssätt kan vara användbart, men det har sina nackdelar. Git gör gärna jobbet åt dig i tysthet, men varnar dig inte om du gör en incheckning i master, drar från progit och sedan skickar upp till origin — alla dessa operationer är giltiga med den här uppsättningen. Så du måste se till att aldrig checka in direkt i master, eftersom den grenen i praktiken tillhör uppströmskodförrådet.