Git server su WSL

In questo esercizio si sfrutta il server SSH dell’ambiente WSL configurato nel precedente post.

L’obiettivo è quello di clonare un repository git dal cloud su un repository locale configurato nel sistema WSL. Può essere utile per aggiornare con git del sofware che si trova in ambienti isolati a cui si accede solamente con il sistema che contiene WSL.

Primo passaggio, si conigura l’utenza git nell’ambiente WSL:

$ sudo adduser git

Secondo, si crea il file con le chiavi pubbliche degli utenti che useranno i repository:

$ su git
$ mkdir .ssh && chmod 0700 .ssh
$ touch .ssh/authorized_keys && chmod 0700 .ssh/authorized_keys
$ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIiV..." >>  .ssh/authorized_keys

Terzo, si crea la cartella che conterrà i file del repository:

$ mkdir /srv/git/gitsrvtest.git
$ cd /srv/git/gitsrvtest.git/
$ git init --bare

A questo punto cloniamo localmente il repository che ci interessa copiare con l’opzione “–bare”:

$ git clone --bare git@github.com:autore/gitsrvtest.git

Poi lo pushamo nel repository appena creato:

$ cd gitsrvtest.git
$ git push --mirror git@127.0.0.1:/srv/git/gitsrvtest.git

A questo punto quando saranno fatte modifiche sul repository in cloud le dovremo pushare anche sul repository locale per portarele sul sistema isolato.

Quindi, supponendo di aver pullato in locale l’ultima versione nella nostra cartella locale ‘gitsrvtest’, dobbiamo fare in modo di pushare le nuove modifiche nel repository utilizzando i remote di git.

Aggiungiamo un nuovo remote verso il repository WSL appena clonato e aggiorniamo le informazioni:

$ cd gitsrvtest
$ git remote add locale git@127.0.0.1:/srv/git/gitsrvtest.git
$ git fetch locale

Per fare un test creiamo un nuovo file che andremo a pushare in entrambi i repository:

$ echo "ciao" > newfile.txt
$ git add newfile.txt
$ git commit -m 'test'
$ git push origin
$ git push locale

A questo punto, collegandoci al sistema isolato, verifichiamo quali remote sono configurati (dovrebbe comparire solo qquello in cloud):

$ cd gitsrvtest
$ git remote -v
origin  git@github.com:autore/gitsrvtest.git (fetch)
origin  git@github.com:autore/gitsrvtest.git (push)

Adesso andremo ad aggiungere un remote che punti al repository WSL che utilizza l’ip del sistema ospitante:

$ git remote add locale git@192.168.68.115:/srv/git/gitsrvtest.git
$ git fetch locale

Facendo un pull specificando il remote localre e il branch master si avrà aggiornato il software all’ultima versione. Per verificarlo basterà vedere se è presente il nuovo file creato

$ git pull locale master
$ cat newfile.txt
ciao