Oggi vediamo come creare ed utilizzare un repository Git su un nas Synology/Qnap o altro sistema Unix-like per gestire il versioning dei vostri progetti. Lavoreremo principalmente col terminale quindi è necessario un minimo di conoscenza di comandi Unix o comunque Git in shell.
Configurazione repository remota
Per prima cosa vi consiglierei di creare una share dedicata ai progetti Git, raggiungibile via rete o via shell su /volume/git. Inoltre create anche un utente dedicato (no admin) e riservate l’accesso in lettura/scrittura alla share appena creata.
A questo punto, supponendo che l’IP locale del vostro nas sia 192.168.1.200, accedete via SSH con l’utente admin (gli account di tipo users non possono di default accedere a SSH)
ssh [email protected]
Spostiamoci nella share creata, supponendo che volume1 sia il nome del vostro volume.
cd /volume1/git
Inizializziamo ora un repository vuoto col suffisso –bare ed entriamo nella cartella appena creata. Per convenzione creiamo la cartella progetto con estensione .git e lanciamo il comando update-server-info per aggiornare le informazioni ausiliarie della repo.
git --bare init --shared progetto1.git cd progetto1 git update-server-info
Informiamo ora il server che il proprietario della cartella “progetto1.git” è l’utente “git” (-R applica la modalità ricorsiva)
chown -R git:users progetto1.git
A questo punto dobbiamo chiederci se vogliamo accedere alla repo via SSH o via HTTPS (vedi Github o simili): entrambi i metodi sono sicuri ma mi sento di consigliarvi il secondo (HTTPS e non HTTP) in quanto se sono fuori dalla rete locale basta utilizzare il protocollo WebDav su HTTPS e esporre all’esterno solo le porte 443 e 5006 (default HTTPS e WebDav HTTPS), mentre esporre la porta default 22 (SSH) vorrebbe dire ricevere continui tentativi di connessione da parte di bot e port-scanner, con i rischi che ne corrono. Usate invece SSH solo se avete accesso esclusivo VPN al nas.
Solo se avete scelto il metodo via HTTPS dovete aggiungere queste righe per fornire accesso pubblico:
cd /volume1/git/progetto1.git/hooks cp -p post-update.sample post-update ./post-update
A questo punto il repository vuoto è pronto. Vi ricordo che l’opzione –bare non crea una copia di lavoro locale ma servirà solo come centro di smistamento delle copie di lavoro remote (fattibili anche sullo stesso nas ma in una cartella differente).
Clonazione repository in locale tramite protocollo HTTPS
Ora chiudiamo la shell SSH e spostiamoci sul terminale del nostro client, che sia Mac, Windows o Linux basta che sia stato precedentemente installato il pacchetto Git , creando una cartella vuota (sul desktop o altro) che contenga tutti i nostri progetti: accediamo ad essa tramite terminale, prompt o shell che sia.
Importante! Per procedere è necessario che sul nas siano già state eseguite queste procedure:
- sul nas, la creazione di un certificato SSL per accesso a HTTPS
- la registrazione di un url DDNS del tipo mionas.myds.me (o altro riconosciuto da “Accessi esterni” del menù Synology)
- l’installazione del pacchetto WebDav Server e l’attivazione di WebDav HTTPS (no HTTP)
- sul router, l’inoltro delle porte 443 (HTTPS) e 5006 (Webdav) – l’operazione dipende dal tuo tipo di router
Una volta fatto accesso alla cartella (tramite comando cd – change directory) cloniamo il repository col comando git clone
cd Desktop/progetti git clone https://[email protected]:5006/git/progetto1.git
Ricordatevi di inserire il nome utente “git” e la “@” prima dell’url DDNS altrimenti riceverete un errore di tipo 22. Nel comando va anche specificata la porta WebDav, che nel mio caso ho lasciato quella di default 5006.
Clonazione repository in locale tramite protocollo SSH
Se invece preferite il metodo SSH allora dovrete prima abilitare l’accesso dell’utente “git” (non admin) a SSH e successivamente clonare la repo locale tramite il comando:
git clone ssh://[email protected]/volume1/git/progetto1.git
Ogni volta che dovrete eseguire un push o pull verranno richieste le credenziali SSH, cosa un po scomoda. Per ovviare al problema è necessario creare una coppia di chiavi pubblica/privata.
Gestione identità
Tramite Git e altri sistemi analoghi di vesioning è possibile gestire la propria identità al momento di commit/pull modificando il nome completo e la mail, in modo da differenziarsi da altri collaboratori al progetto.
Per modificare la propria identità locale occorre digitare questi 2 comandi, inserendo ovviamente il vostro nome e la vostra mail:
git config --global user.name "Davide Permunian" git config --global user.email "[email protected]"
Controllo della configurazione finale
Una volta terminati i vari passaggi eseguite un controllo dei parametri di configurazione della vostra repo, digitando:
git config -l
L’output generato sarà qualcosa di simile a questo:
credential.helper=osxkeychain
user.name=Davide Permunian
[email protected]
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
remote.origin.url=https://[email protected]:5006/git/progetto1.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
Modifica URL e passaggio da HTTPS a SSH o viceversa
Se invece avete usato HTTPS ma vi sembra più comodo o sicuro SSL potete modificare solo il parametro “remote.origin.url” tramite il comando:
git remote set-url origin ssh://[email protected]/volume1/git/progetto1.git git remote -v
Il comando “remote -v” visualizzerà il nuovo url remoto: per testarlo eseguite un “git status” confermando che la connessione da locale a remoto sia andata a buon fine!
—
Ora siete pronti per aggiungere file, committarli ed eseguire il vostro primo pull!
Vi rimando alla prossima guida che sto sviluppando riguardo i principali comandi Git, disponibile tra qualche giorno.
Grazie a tutti.