Denne delen vil beskrive hvordan du setter opp, administrerer og sikrer en git server. Git har mange alternativer tilgjengelig. For mer detaljert dokumentasjon se https://git-scm.com/book/en/v2.
Følgende instruksjoner vil installere en git server. Det vil bli satt opp til å bruke OpenSSH som sikker ekstern tilgangsmetode.
Konfigurasjon av serveren består av følgende trinn:
            Du må være bruker root for den
            første delen av konfigurasjonen. Opprett git bruker og gruppe og sett en ubrukelig
            passordhash med følgende kommandoer:
          
groupadd -g 58 git && useradd -c "git Owner" -d /home/git -m -g git -s /usr/bin/git-shell -u 58 git && sed -i '/^git:/s/^git:[^:]:/git:NP:/' /etc/shadow
            Sett inn en ubrukelig passordhash (erstatter ! med NP) låser opp
            kontoen, men den kan ikke brukes for å logge på via
            passordautentisering. Det kreves av sshd for å fungere skikkelig. Deretter
            oppretter du noen filer og mapper i hjemmemappen til git brukeren
            som gir tilgang til git depotet ved å bruke ssh nøkler.
          
install -o git -g git -dm0700 /home/git/.ssh && install -o git -g git -m0600 /dev/null /home/git/.ssh/authorized_keys
            For enhver utvikler som bør ha tilgang til depotet legg til
            hans/hennes offentlige ssh nøkkel til /home/git/.ssh/authorized_keys. Først må du
            legge til noen alternativer for å hindre brukere fra å bruke
            tilkobling til git for portvideresending til andre maskiner som
            git serveren kan nå.
          
echo -n "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " >> /home/git/.ssh/authorized_keys && cat <user-ssh-key> >> /home/git/.ssh/authorized_keys
            Det er også nyttig å angi standardnavnet til den første grenen av
            nye depoter ved å endre git konfigurasjonen. Som root bruker, kjør:
          
git config --system init.defaultBranch trunk
            Legg til slutt til /usr/bin/git-shell inngang til /etc/shells konfigurasjonsfil. Dette skallet
            har blitt satt i git brukerprofil
            og sørger for at kun git relaterte handlinger kan utføres:
          
echo "/usr/bin/git-shell" >> /etc/shells
            Depotet kan være hvor som helst på filsystemet. Det er viktig at
            git brukeren har lese-/skrivetilgang til den plasseringen. Vi
            bruker /srv/git som basismappe. Lag
            et nytt git depot med følgende
            kommandoer (som root bruker):
          
![[Note]](../images/note.png) 
            I alle instruksjonene nedenfor bruker vi project1 som et eksempel på depotnavn. Du bør navngi depotet ditt som et kort beskrivende navn for ditt spesifikke prosjekt.
install -o git -g git -m755 -d /srv/git/project1.git && cd /srv/git/project1.git && git init --bare && chown -R git:git .
![[Note]](../images/note.png) 
            Alle instruksjonene i denne delen og den neste bør gjøres på et brukersystem, ikke på serversystemet.
            Nå som depotet er opprettet, kan det brukes av utviklere til å
            legge inn noen filer i den. Når ssh nøkkelen til brukeren er
            importert til git sin authorized_keys fil, kan brukeren samhandle med
            depotet.
          
En minimal konfigurasjon bør være tilgjengelig på utviklerens system som spesifiserer brukernavnet og e-postadressen. Lag denne minimale konfigurasjonsfilen på klientsiden:
cat > ~/.gitconfig <<EOF
[user]
        name = <users-name>
        email = <users-email-address>
EOF
          På utviklerens maskin, sett opp noen filer som skal skyves til depotet som det første innholdet:
![[Note]](../images/note.png) 
            gitserver begrepet som brukes nedenfor skal være vertsnavnet (eller ip adressen) til git serveren.
mkdir myproject cd myproject git init --initial-branch=trunk git remote add origin git@gitserver:/srv/git/project1.git cat >README <<EOF This is the README file EOF git add README git commit -m 'Initial creation of README' git push --set-upstream origin trunk
            Det første innholdet blir nå sendt til serveren og er
            tilgjengelig for andre brukere. På den gjeldende maskinen er
            argumentet --set-upstream origin
            trunk er ikke lenger nødvendig siden det lokale depotet er
            koblet til det eksterne depotet. Påfølgende dytt kan utføres som
          
git push
Andre utviklere kan nå klone depotet og gjøre endringer i innholdet (så lenge ssh nøklene deres har blitt installert):
git clone git@gitserver:/srv/git/project1.git cd project1 vi README git commit -am 'Fix for README file' git push
![[Note]](../images/note.png) 
            
              Dette er et veldig grunnleggende serveroppsett basert på
              OpenSSH adgang. Alle utviklere
              bruker git brukeren for å
              utføre handlinger på depotet og endringene brukere foretar kan
              skilles ut som det lokale brukernavnet (se ~/.gitconfig) er registrert i endringssett.
            
            Tilgangen er begrenset av de offentlige nøklene som er lagt til
            git sin authorized_keys filen og
            det er ingen mulighet for publikum til å eksportere/klone
            depotet. For å aktiver dette, fortsett med trinn 4 for å sette
            opp git serveren for offentlig lesetilgang.
          
            I URLen som brukes til å klone prosjektet, den absolutte banen
            (her /srv/git/project1.git) må
            spesifiseres da depotet ikke er i git sin hjemmemappe, men i
            /srv/git. For å bli kvitt
            eksponeringen som avslører strukturen til serverinstallasjonen,
            en symbolkobling kan legges til i git sin hjemmemappe for hvert
            prosjekt som dette:
          
ln -svf /srv/git/project1.git /home/git/
Nå kan depotet klones ved bruk av
git clone git@gitserver:project1.git
Oppsettet beskrevet ovenfor gjør et depot tilgjengelig for autentiserte brukere (med å gi den offentlige ssh nøkkelfilen). Det er også en enkel måte å publisere depotet til uautentiserte brukere — selvfølgelig uten skriveadgang.
Kombinasjonen av tilgang via ssh (for autentiserte brukere) og eksport av arkiver til uautentiserte brukere via nissen er i de fleste tilfeller nok for en utviklingsside.
![[Note]](../images/note.png) 
            
              Nissen vil være tilgjengelig på port 9418 som standard. Sørg for at
              brannmuroppsettet tillater tilgang til denne porten.
            
For å starte serveren ved oppstart, installer git-daemon oppstartskriptet inkludert i blfs-bootscripts-20230824 pakken:
make install-git-daemon
            For å tillate git å eksportere
            et depot, en fil som heter git-daemon-export-ok kreves i hver depotmappe
            på serveren. Filen trenger ikke noe innhold, bare dens eksistens
            muliggjør, dens fravær deaktiverer eksporten av det depotet.
          
touch /srv/git/project1.git/git-daemon-export-ok
            Skriptet for å starte git nissen bruker noen standardverdier
            internt. Det viktigste er veien til depotmappen som er satt til
            /srv/git. I tilfelle du av en eller
            annen grunn har opprettet depotet i en annen plassering, må du
            fortelle oppstartsskriptet hvor depot er å finne. Dette kan
            oppnås ved å lage en konfigurasjonsfilen navngitt /etc/sysconfig/git-daemon. Denne
            konfigurasjonsfilen vil bli importert hvis den eksisterer, noe
            som betyr at den er det valgfri. Filen kan se ut som:
          
# Begin /etc/sysconfig/git-daemon # Specify the location of the git repository GIT_BASE_DIR="/srv/git/" # Directories added to whitelist DFT_REPO_DIR="$GIT_BASE_DIR" # Add extra options which will appended to the 'git daemon' # command executed in the boot script GIT_DAEMON_OPTS="" # End /etc/sysconfig/git-daemon
Det er bare tre alternativer å angi i konfigurasjonsfilen:
GIT_BASE_DIR=<dirname>
Spesifiser plasseringen av git depoene. Relative stier som brukes når du får tilgang til nissen vil oversettes i forhold til denne mappen.
DFT_REPO_DIR=<dirname>
                  Denne mappen er lagt til den hvite listen over tillatte
                  mapper. Denne variabelen kan inneholde flere mappenavn, men
                  er vanligvis satt lik GIT_BASE_DIR.
                
GIT_DAEMON_OPTS=<options>
                  I tilfelle spesielle alternativer til git daemon kommandoen er
                  nødvendig, må de spesifiseres i denne innstillingen. Et
                  eksempel kan være å justere portnummeret som nissen lytter
                  på. I dette tilfellet, legg til --port=<port number> til denne
                  variabelen. For mer informasjon om hvilke alternativer som
                  kan angis, ta en titt på utdataene til git daemon --help.
                
Etter å ha startet nissen, kan uautentiserte brukere klone eksporterte depoer ved å bruke
git clone git://gitserver/project1.git
            Som basismappen er /srv/git
            standard (eller satt til en egendefinert verdi i
            konfigurasjonen), git tolker den
            innkommende banen (/project1.git) i forhold til den basismappen
            slik at depotet i /srv/git/project1.git er servert.