Git og Github
Git og GitHub er meget brugt i moderne softwareudvikling, uanset hvilket programmeringssprog der bruges. I C#-udvikling kan de være yderst effektive til at håndtere versionskontrol, samarbejde, og kode deling.
Information til undervisere
Afhængig af kursisten formål med at lære C# kan denne sektion måske springes over. Hvis du tager det med så forbered et eksempel som kursisterne kan være i (pull, branch, push, pull request).
Git
Hvad er Git?
Git er et lokalt versionskontrolsystem, der blev designet af Linus Torvalds, skaberen af Linux. Versionskontrolsystemer tillader flere personer at arbejde på det samme projekt samtidigt. Git holder styr på ændringer i din kode over tid, så du kan gendanne tidligere versioner af din kode, hvis det er nødvendigt.
Som begynder i Git bør du kende lidt til begreber som
Begreb | Forklaring |
---|---|
Commit | En “commit” er en ændring til et projekt, der er gemt i en Git repository. Den repræsenterer et øjebliksbillede af projektet på et bestemt tidspunkt. Hver commit har en unik ID (ofte kaldet en “commit hash”), som bruges til at holde styr på ændringerne. |
Pull | “Pull” er en operation, der henter data fra en fjernserver. I Git-sammenhæng bruges “pull” til at hente den nyeste version af et repository fra en fjernserver og flette den med din lokale version. |
Push | “Push” er operationen, der sender dine lokale ændringer til fjernserveren. Hvis du har lavet nogle commits lokalt, som du vil dele med resten af dit team, vil du “pushe” dem til fjernserveren (for eksempel GitHub), så de bliver synlige for alle. |
Branch | En “branch” er en parallel version af et repository. Den er adskilt fra “main” linjen af udvikling og bruges til at arbejde isoleret på en feature eller en bug fix. Når arbejdet er færdigt, kan branchen flettes tilbage til main linjen. |
Pull Request | En “pull request” (ofte forkortet PR) er en metode til at foreslå ændringer til et projekt på GitHub. Når du åbner en pull request, foreslår du, at dine ændringer skal flettes ind i den originale repository. Pull requests gør det muligt for andre at gennemgå og diskutere dine ændringer, før de bliver integreret i projektet. |
Repository (Repo) | Et “repository” er et opbevaringssted for et software projekt. Det indeholder alle filer til projektet og holder styr på hver ændring lavet til disse filer. |
Fork | En “fork” er en kopi af et repository. At forke et repository giver dig mulighed for at eksperimentere med ændringer uden at påvirke det originale projekt. |
Clone | At “clone” et repository betyder at skabe en lokal kopi af et fjernrepository på din egen computer. Dette giver dig mulighed for at arbejde på projektet lokalt. |
Merge | At “merge” er at tage ændringer fra en branch og inkorporere dem ind i en anden branch. Dette er ofte hvordan du får dine ændringer ind i projektet efter du har arbejdet på dem i en separat branch. |
Issue | Et “issue” er en måde at holde styr på opgaver, forbedringer og bugs for dit projekt på GitHub. De kan være så simple som to-do lister, eller de kan være komplekse boards med labels, tildelinger og milestones. |
Ressourcer om Git
GitHub’s Learning Lab er en god måde at lære Git og GitHub på. Det er en samling af kurser, der er designet til at hjælpe dig med at lære Git og GitHub ved at bruge GitHub. Du kan tage kurserne i dit eget tempo, og de er gratis at bruge.
Han viser det faktisk også meget godt:
Microsoft har også lavet en rigtig god Youtube serie omkring Git og brug i VS:
Installation af Git
For at bruge Git skal du installere det på din computer. Git er tilgængelig for Windows, Mac og Linux. Du kan downloade den seneste version af Git fra Git’s officielle hjemmeside. Det er typisk allerede installeret på en Linux og Mac maskine, ligesom en Windows maskine brugt i undervisningslokaler også vil have det installeret. Alternativt kan downloade og installere det fra her til Windows. En installation til Windows vil typisk også installere Git Bash, som er en terminal til Windows, der giver en emulering af en Bash-oplevelse i en Windows-miljø.
Første gang du benytter git
Hvis det er første gang du benytter git på en maskine skal du tilføje et user name og email. I princippet er det underordnet hvad du skriver her hvis det kun er dig der bruger det pågældende repository, men du kan angive dine personlige oplysninger hvis du vil.
- Åbn en terminal
- Skriv følgende kommandoer:
Hvad er GitHub?
GitHub er en webbaseret platform for versionskontrol og samarbejde, der gør det muligt for udviklere at arbejde sammen om projekter. Mens Git er et kommandolinjeværktøj, leverer GitHub et webbaseret grafisk interface. Det giver også adgang til flere samarbejdsfunktioner, såsom opgavestyring, fejlsporing og projektstyring, samt funktioner, der bygger videre på Git. GitHub er ejet af Microsoft.
Arbejdsmåder i GitHub
GitHub tilbyder flere måder at arbejde med projekter på:
-
Eget repository: Når du opretter dit eget repository (projekt) på GitHub, har du fuld kontrol over det. Du kan tilføje filer, lave ændringer og push’e (overføre) dem direkte til hovedgrenen (eller en anden gren) i dit repository. Andre udviklere kan bidrage til dit projekt ved at oprette pull requests eller issues (fejlrapporter eller forslag).
-
Fork og Pull Requests: Hvis du vil bidrage til et projekt, som du ikke ejer, kan du “forke” (kopiere) det. Når du har forket projektet til din egen GitHub-konto, kan du lave ændringer lokalt og derefter sende en “pull request” (PR) til det originale repository. Repository-ejeren kan herefter gennemgå dine ændringer og vælge, om de skal flettes ind i hovedprojektet. Dette er en central arbejdsgang i open source-projekter.
-
Collaborator-modellen: I nogle projekter kan repository-ejeren give andre udviklere rettigheder til direkte at push’e ændringer til et repository. Dette er almindeligt i teams, hvor flere medlemmer arbejder sammen på lige fod uden behov for PR’er for hver eneste ændring.
Da vi i forbindelse med undervisning ofte arbejder med små projekter, vil vi ofte benytte den første model, hvor du har fuld kontrol over dit eget repository, og andre kan bidrage ved at oprette pull requests. Da undervisningen typisk foregår på en fremmed maskine, vil vi også benytte SSH-nøgler til at logge ind på GitHub. På den måde kan du arbejde med dit repository uden at risikere at efterlade login-informationer på en fremmed maskine fordi du har brugt et browser token. Det kan være noget rod at rydde op i bagefter.
Den helt simple upload til GitHub
- Sørg for at arbejde i en mappe (eksempelvis
\kursus
) så alle projekter er placeret her - Kør eventuelt følgende powershell script for at slette alle
\obj
og\bin
foldere som typisk ikke skal med op på GitHubGet-ChildItem -Recurse -Directory | Where-Object { $_.Name -in 'bin', 'obj' } | Remove-Item -Recurse -Force
- Opret et repository
- Upload samtlige mappe manuelt gennem browseren
Brug et SSH token
Her er en trin-for-trin guide til at oprette et SSH token på en fremmed maskine:
Generer en ny SSH-nøgle
Åbn Git Bash og indtast følgende kommando (erstat ‘din_email@example.com’ med din egen e-mailadresse):
Når du bliver bedt om at “Enter a file in which to save the key,” kan du trykke Enter. Dette accepterer den standardfilplacering. Indtast derefter en sikker adgangskode, når du bliver bedt om det.
Start ssh-agent
I Git Bash, start ssh-agent i baggrunden ved at indtaste:
Tilføj SSH nøgle
Tilføj derefter din SSH private nøgle til ssh-agenten ved at indtaste:
Tilføj den nye SSH-nøgle til din GitHub-konto
Kopier indholdet af SSH-nøglen (id_ed25519.pub
filen) til din udklipsholder ved at indtaste:
Det vil kopiere indholdet af din offentlige nøgle til udklipsholderen.
Login på GitHub i din webbrowser (brug Incognito hvis du er på en ekstern maskine) og klik på Settings (under dit navn i øveste højre hjørne) -> SSH og GPG nøgler -> Ny SSH nøgle. Giv nøglen en titel og indsæt den offentlige nøgle i “Key” feltet. Tryk “Add SSH key” for at tilføje nøglen.
Nu kan du bruge SSH til at interagere med GitHub.
Opret et nyt repository på GitHub
Det nemmeeste er at oprette et repository på GitHub og derefter clone det til din lokale maskine. Her er trinene:
- Gå til GitHub (Incognito) og log ind
- Vælg “New repository”.
- Giv dit repository et navn, en beskrivelse og vælg om det skal være offentligt eller privat. Du bør vælge at initialisere dit repository med en README-fil og en .gitignore-fil (vælg Visual Studio på listen).
Klon dit repository til en fremmed maskine
Når du har oprettet dit repository kan du klikke på den store grønne knap på forsiden til repositoriet. Her skal du vælge at klone via SSH og kopiere URL’en til udklipsholderen.
Åbn ny en terminal og naviger til den mappe, hvor du vil klone dit repository. Indtast følgende kommando:
Din Windows-maskine har nu adgang til dit private GitHub-repository, og du kan både push og pull. Husk at fjerne SSH-nøglen fra din GitHub-konto, når du er færdig med at bruge den fremmede maskine.
Adgang til enkelte repos
Hvis du vil begrænse adgangen til kun et bestemt repository, kan du overveje at bruge “Deploy keys”. En “Deploy key” er en SSH-nøgle, der er knyttet til et specifikt repository i stedet for en brugerkonto, og den har kun adgang til det repository, den er knyttet til.
Her er trinnene for at tilføje en Deploy key:
- Generer en ny SSH-nøgle på den fremmede maskine, som du gjorde før jvf. ovennævnte
- Kopier den offentlige nøgle til din udklipsholder.
- Gå til dit repository på GitHub.
- Klik på “Settings” i den øverste menu.
- Klik på “Deploy keys” i den venstre sidebjælke.
- Klik på “Add deploy key”.
- Giv nøglen en titel, indsæt den offentlige nøgle i “Key” feltet og tryk “Add key”.
Nu vil denne nøgle kun have adgang til det specifikke repository, den er knyttet til, og ikke alle dine repositorier. Men vær opmærksom på, at en deploy key kun kan læse data som standard. Hvis du også vil kunne skrive (push) til repository, skal du markere “Allow write access” når du tilføjer nøglen.
Info
SSH (Secure Shell) og GPG (GNU Privacy Guard) er begge kryptografiske netværksprotokoller, men de bruges til forskellige formål:
-
SSH (Secure Shell): SSH bruges til at skabe en sikker forbindelse mellem to systemer. Dette gør det muligt at eksekvere kommandoer på en fjernserver eller overføre filer mellem to systemer over en sikret forbindelse. SSH-nøgler er ofte brugt til at autentificere brugere til servere, og kan bruges til at erstatte password-baseret autentificering. Når du tilføjer en SSH-nøgle til din GitHub-konto, kan du interagere med GitHub (clone, push, pull osv.) uden at skulle indtaste dit brugernavn og password hver gang.
-
GPG (GNU Privacy Guard): GPG er en fri implementering af OpenPGP standarden, der bruges til at kryptere og dekryptere indhold og til at skabe digitale signaturer. GPG-nøgler kan bruges til at “signere” git commits eller tags, hvilket giver en verificerbar garanti for, at det indhold, du har sendt, faktisk kommer fra dig og ikke er blevet ændret undervejs. Når du tilføjer en GPG-nøgle til din GitHub-konto, kan dine commits have en “Verified” label på GitHub.
Så mens begge er kryptografiske protokoller, bruges SSH normalt til sikre forbindelser mellem systemer og password-fri autentificering, mens GPG typisk bruges til at kryptere/dekryptere indhold og lave digitale signaturer.