-
1. Kom igång
- 1.1 Om versionshantering
- 1.2 En kort historik om Git
- 1.3 Vad är Git?
- 1.4 Kommandoraden
- 1.5 Installera Git
- 1.6 Första gången med Git
- 1.7 Få hjälp
- 1.8 Sammanfattning
-
2. Grunderna i Git
- 2.1 Att få tag i ett Git‑kodförråd
- 2.2 Spara ändringar i kodförrådet
- 2.3 Visa incheckningshistoriken
- 2.4 Ångra saker
- 2.5 Arbeta med fjärrkodförråd
- 2.6 Att tagga
- 2.7 Git-alias
- 2.8 Sammanfattning
-
3. Git-grenar
- 3.1 Grenar i korthet
- 3.2 Grundläggande gren- och sammanfogningsarbete
- 3.3 Grenhantering
- 3.4 Arbetsflöden med grenar
- 3.5 Fjärrgrenar
- 3.6 Ombasering
- 3.7 Sammanfattning
-
4. Git på servern
- 4.1 Protokollen
- 4.2 Konfigurera Git på en server
- 4.3 Generera din publika SSH-nyckel
- 4.4 Konfigurera servern
- 4.5 Git-demon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Tredjepartsalternativ
- 4.10 Sammanfattning
-
5. Distribuerat Git
-
6. GitHub
-
7. Git-verktyg
- 7.1 Revisionsurval
- 7.2 Interaktiv köläggning
- 7.3 Lägga undan och städa
- 7.4 Signera ditt arbete
- 7.5 Sökning
- 7.6 Skriva om historik
- 7.7 Nollställning förklarad
- 7.8 Avancerad sammanslagning
- 7.9 Rerere
- 7.10 Felsöka med Git
- 7.11 Undermoduler
- 7.12 Bunta
- 7.13 Ersätt
- 7.14 Lagring av inloggningsuppgifter
- 7.15 Sammanfattning
-
8. Anpassa Git
- 8.1 Git‑konfiguration
- 8.2 Git‑attribut
- 8.3 Git‑krokar
- 8.4 Ett exempel på Git‑upprätthållen policy
- 8.5 Sammanfattning
-
9. Git och andra system
- 9.1 Git som klient
- 9.2 Migrera till Git
- 9.3 Sammanfattning
-
10. Git bakom kulisserna
- 10.1 Lågnivådel och användardel
- 10.2 Git-objekt
- 10.3 Git-referenser
- 10.4 Packfiler
- 10.5 Refspecen
- 10.6 Överföringsprotokoll
- 10.7 Underhåll och dataåterställning
- 10.8 Miljövariabler
- 10.9 Sammanfattning
-
A1. Bilaga A: Git i andra miljöer
- A1.1 Grafiska gränssnitt
- A1.2 Git i Visual Studio
- A1.3 Git i Visual Studio Code
- A1.4 Git i IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git i Sublime Text
- A1.6 Git i Bash
- A1.7 Git i Zsh
- A1.8 Git i PowerShell
- A1.9 Sammanfattning
-
A2. Bilaga B: Bädda in Git i dina applikationer
- A2.1 Git på kommandoraden
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Bilaga C: Git-kommandon
- A3.1 Uppstart och konfiguration
- A3.2 Skaffa och skapa projekt
- A3.3 Grundläggande ögonblicksbilder
- A3.4 Grening och sammanslagning
- A3.5 Dela och uppdatera projekt
- A3.6 Inspektion och jämförelse
- A3.7 Felsökning
- A3.8 Patchning
- A3.9 E‑post
- A3.10 Externa system
- A3.11 Administration
- A3.12 Lågnivåkommandon
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.
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:
-
Avgrena projektet.
-
Skapa en ämnesgren från
master. -
Gör några incheckningar som förbättrar projektet.
-
Skicka grenen till ditt GitHub-projekt.
-
Öppna en ändringsförfrågan på GitHub.
-
Diskutera och fortsätt vid behov att checka in.
-
Projektägaren sammanfogar eller stänger ändringsförfrågan.
-
Synkronisera den uppdaterade
mastertillbaka 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.
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
-
Klona vår avgrening av projektet lokalt.
-
Skapa en beskrivande ämnesgren.
-
Gör vår ändring i koden.
-
Kontrollera att ändringen ser bra ut.
-
Checka in ändringen i ämnesgrenen.
-
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.
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.
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.
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:
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.
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.
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 |
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.
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
-
Lägg till ursprungskodförrådet som ett fjärrkodförråd med namnet
upstream. -
Uppdatera det senaste arbetet från det fjärrkodförrådet.
-
Sammanfoga huvudgrenen från det kodförrådet in i din ämnesgren.
-
Åtgärda konflikten som uppstod.
-
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.
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.
När vi skickar in ändringsförfrågan ser vi allt renderat som i 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.
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.
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.
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.
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.
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.
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 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.
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.
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)
-
Om du var på en annan gren, gå tillbaka till
master. -
Uppdatera ändringar från
https://github.com/progit/progit2.gitoch sammanfoga dem imaster. -
Skicka din
master-gren tillorigin.
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)
-
Lägg till källkodförrådet och ge det ett namn. Här har jag valt att kalla det
progit. -
Uppdatera en referens till progits grenar, särskilt
master. -
Ställ in din
master-gren att uppdatera från fjärrkodförrådetprogit. -
Definiera standardkodförrådet för
pushsomorigin.
När det här är på plats blir arbetsflödet mycket enklare:
$ git checkout master (1)
$ git pull (2)
$ git push (3)
-
Om du var på en annan gren, gå tillbaka till
master. -
Hämta ändringar från
progitoch sammanfoga ändringar imaster. -
Skicka din
master-gren tillorigin.
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.