-
1. Aan de slag
- 1.1 Over versiebeheer
- 1.2 Een kort historisch overzicht van Git
- 1.3 Wat is Git?
- 1.4 De commando-regel
- 1.5 Git installeren
- 1.6 Git klaarmaken voor eerste gebruik
- 1.7 Hulp krijgen
- 1.8 Samenvatting
-
2. Git Basics
-
3. Branchen in Git
- 3.1 Branches in vogelvlucht
- 3.2 Eenvoudig branchen en mergen
- 3.3 Branch-beheer
- 3.4 Branch workflows
- 3.5 Branches op afstand (Remote branches)
- 3.6 Rebasen
- 3.7 Samenvatting
-
4. Git op de server
- 4.1 De protocollen
- 4.2 Git op een server krijgen
- 4.3 Je publieke SSH sleutel genereren
- 4.4 De server opzetten
- 4.5 Git Daemon
- 4.6 Slimme HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Hosting oplossingen van derden
- 4.10 Samenvatting
-
5. Gedistribueerd Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revisie Selectie
- 7.2 Interactief stagen
- 7.3 Stashen en opschonen
- 7.4 Je werk tekenen
- 7.5 Zoeken
- 7.6 Geschiedenis herschrijven
- 7.7 Reset ontrafeld
- 7.8 Mergen voor gevorderden
- 7.9 Rerere
- 7.10 Debuggen met Git
- 7.11 Submodules
- 7.12 Bundelen
- 7.13 Vervangen
- 7.14 Het opslaan van inloggegevens
- 7.15 Samenvatting
-
8. Git aanpassen
- 8.1 Git configuratie
- 8.2 Git attributen
- 8.3 Git Hooks
- 8.4 Een voorbeeld van Git-afgedwongen beleid
- 8.5 Samenvatting
-
9. Git en andere systemen
- 9.1 Git als een client
- 9.2 Migreren naar Git
- 9.3 Samenvatting
-
10. Git Binnenwerk
- 10.1 Binnenwerk en koetswerk (plumbing and porcelain)
- 10.2 Git objecten
- 10.3 Git Referenties
- 10.4 Packfiles
- 10.5 De Refspec
- 10.6 Uitwisseling protocollen
- 10.7 Onderhoud en gegevensherstel
- 10.8 Omgevingsvariabelen
- 10.9 Samenvatting
-
A1. Bijlage A: Git in andere omgevingen
- A1.1 Grafische interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in Eclipse
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Samenvatting
-
A2. Bijlage B: Git in je applicaties inbouwen
- A2.1 Commando-regel Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Bijlage C: Git Commando’s
- A3.1 Setup en configuratie
- A3.2 Projecten ophalen en maken
- A3.3 Basic Snapshotten
- A3.4 Branchen en mergen
- A3.5 Projecten delen en bijwerken
- A3.6 Inspectie en vergelijking
- A3.7 Debuggen
- A3.8 Patchen
- A3.9 Email
- A3.10 Externe systemen
- A3.11 Beheer
- A3.12 Binnenwerk commando’s (plumbing commando’s)
4.4 Git op de server - De server opzetten
De server opzetten
Laten we het opzetten van SSH toegang aan de server kant eens doorlopen.
In dit voorbeeld zul je de authorized_keys
methode gebruiken om je gebruikers te authenticeren.
We gaan er ook vanuit dat je een standaard Linux distributie gebruikt zoals Ubuntu.
Noot
|
Het leeuwendeel van wat er hier beschreven is kan worden geautomatiseerd door het |
Als eerste maak je een git gebruiker aan en een .ssh
directory voor die gebruiker.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Vervolgens moet je een aantal publieke SSH sleutels van ontwikkelaars aan het authorized_keys
bestand toevoegen voor de git
gebruiker.
Laten we aannemen dat je een aantal sleutels per e-mail ontvangen hebt en ze hebt opgeslagen in tijdelijke bestanden.
Nogmaals, de publieke sleutels zien er ongeveer zo uit:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
Je voegt ze eenvoudigweg toe aan het authorized_keys
bestand van de git
gebruiker in de .ssh
directory:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
Nu kun je een lege repository voor ze instellen door git init
uit te voeren met de --bare
optie, wat de repository initialiseert zonder een werkdirectory:
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/
Daarna kunnen John, Josie of Jessica de eerste versie van hun project in de repository pushen door het als een remote toe te voegen en een branch te pushen.
Merk op dat iemand met een shell op de machine zal moeten inloggen en een kale repository moet creëren elke keer dat je een project wilt toevoegen.
Laten we gitserver
als hostnaam gebruiken voor de server waar je de git
gebruiker en repository hebt aangemaakt.
Als je het binnenshuis draait, en je de DNS instelt zodat gitserver
naar die server wijst, dan kun je de commando’s vrijwel ongewijzigd gebruiken (aangenomen dat myproject
een bestaand project is met bestanden):
# on Johns computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master
Vanaf dat moment kunnen de anderen het klonen en wijzigingen even gemakkelijk terug pushen:
$ git clone git@gitserver:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
Op deze manier kun je snel een lees/schrijf Git server draaiend krijgen voor een handjevol ontwikkelaars.
Je moet je ervan bewust zijn dat al deze gebruikers ook de server op kunnen en een shell als de git
gebruiker kunnen krijgen.
Als je dat wilt beperken, moet je de shell in iets anders veranderen in het passwd
bestand.
Je kunt eenvoudig de git
gebruiker beperken tot alleen Git activiteiten met een beperkte shell-tool genaamd git-shell
wat met Git wordt meegeleverd.
Als je dit als login shell voor je git
gebruiker instelt, dan kan de git
gebruiker geen normale shell toegang hebben op je server.
Specificeer git-shell
in plaats van bash of csh voor je gebruikers login shell om dit te gebruiken.
Om dit te doen moet je eerst git-shell
aan /etc/shells/
moeten toevoegen als dat al niet gebeurd is:
$ cat /etc/shells # see if `git-shell` is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo -e /etc/shells # and add the path to git-shell from last command
Nu kan je de shell wijzigen voor een gebruiker met chsh <username> -s <shell>
:
$ sudo chsh git -s $(which git-shell)
Nu kan de git
gebruiker alleen de SSH verbinding gebruiken om Git repositories te pullen en pushen en kan hij niet naar een shell op de machine gaan.
Als je het probeert, zie je een login-weigering als dit:
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
De Git netwerk commando’s zullen nog steeds blijven werken, maar gebruikers zullen niet in staat zijn een reguliere shell te starten.
Zoals de uitvoer aangeeft, kan je ook een directory opgeven in de home directory van de git
gebruiker die het git-shell
commando een beetje aanpast.
Als voorbeeld, je kunt de Git commando’s die de server accepteert beperken of je kunt het bericht aanpassen dat de gebruikers zien als ze op deze manier met SSH verbinding maken.
Roep git help shell
aan voor meer informatie hoe de shell aanpassing te doen.