Creare un repository remoto con git, per piu’ utenti

A volte capita di dover sviluppare software con altre persone e il modo migliore per farlo e’ usare Git (e questa non e’ la sola ragione!).
Git e’ un VCS distribuito ideato da Linux Torlvads e altra gente molto cool :)
Lo scopo di questo howto e’ creare un repository remoto per permettere a sviluppatori di lavorare ad un progetto, il tutto tramite SSH con autenticazione tramite chiavi.
Funzionera’ cosi’: nel server/repository remoto ci sara’ un utente, “git”, con la sua home dove tenere i repository.
Avra’ una shell particolare, git-shell, che permette solo comandi di Git via SSH.
L’accesso verra’ effettuato tramite chiavi, ogni sviluppatore dovra’ avere la chiave privata, o dovrai creare una coppia di chiavi per ogni sviluppatore.
Sfortunatamente non ho trovato un modo per dire a Git quale chiave usare, quindi si prende quella di default, ~/.ssh/id_rsa.
Vediamo cosa fare.

Installa Git sul server e crea un utente/gruppo git o qualunque altro nome ti piaccia e setta come shell: git-shell.
Siccome l’user git non ha una shell la creazione di un repository andra’ fatta da root:
cd /home/git
mkdir project
cd project
git --bare init .
chown -R git:git /home/git/*

Ora che abbiamo creato il repository passiamo alle chiavi SSH: ssh public key authentication.
Crea la directory .ssh in /home/git e il file authorized_keys:

mkdir /home/git/.ssh
mv /where/it/is/id_rsa.pub /home/git/.ssh/authorized_keys
chown -R git:git /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys

Adesso dovresti avere l’accesso al repository tramite chiavi SSH.
Nel computer locale apri o crea un directory vuota per ospitare il progetto e prova a clonare il repository (ancora vuoto):

mkdir /tmp/test
cd /tmp/test
bash-4.1$ git clone ssh://git@ip_o_nomedelserver.net/home/git/project .
Initialized empty Git repository in /tmp/test/.git/
warning: You appear to have cloned an empty repository.
bash-4.1$

Sei uno sviluppatore, congratulazioni!!
Imposta il tuo nome/email:

git config --global user.name simplex
git config --global user.email simplex@twopenguins.it

Crea un file da aggiungere al repository:

touch empty_file

Aggiungilo al repo:

git add empty_file

Committalo, con un commento:

bash-4.1$ git commit -m "aggiunto empty_file per un rapido test"
[master (root-commit) 20cfbcf] aggiunto empty_file per un veloce test
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 empty_file
bash-4.1$

Ora fai un “push” nel repository remoto. Se e’ il primo in assoluto, usa git push origin master:

bash-4.1$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 229 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://git@git.twopenguins.it/home/git/project
* [new branch] master -> master
bash-4.1$

Ora un altro sviluppatore potrebbe clonare il repository:

bash-4.1$ git clone ssh://git@ip_o_nomedelserver.net/home/git/project .
Initialized empty Git repository in /tmp/coolproject/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
bash-4.1$ ls
empty_file
bash-4.1$

E settare il proprio nome/email:

git config --global user.name supermario
git config --global user.email supermario@twopenguins.it

E creare o modificare file, e committarli:

touch empty_file2
touch empty_file3
echo "blabla" > empty_file

bash-4.1$ git add * && git commit -m "aggiunto e modificato"
[master 5eab8e2] aggiunto e modificato
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 empty_file2
create mode 100644 empty_file3

bash-4.1$ git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 284 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://git@git.twopenguins.it/home/git/project
20cfbcf..5eab8e2 master -> master

Prima di modificare qualcosa e’ bene fare un sync del repository remoto con quello locale con git pull.
Assumiano che tu ora sia il “primo” developer:

bash-4.1$ cd /tmp/test/
bash-4.1$ ls
empty_file
bash-4.1$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ssh://git.twopenguins.it/home/git/project
20cfbcf..5eab8e2 master -> origin/master
Updating 20cfbcf..5eab8e2
Fast-forward
empty_file | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 empty_file2
create mode 100644 empty_file3
bash-4.1$ ls
empty_file empty_file2 empty_file3

Con un git log puoi vedere chi ha fatto cosa e quando:

commit 5eab8e200418fa3e75d33ad6c80c785f0cf1b601
Author: supermario
Date: Sat Mar 12 11:43:37 2011 +0100

aggiunto e modificato

commit 20cfbcfbc17e113131a7b2f9fbca27fba758a038
Author: simplex
Date: Sat Mar 12 11:35:34 2011 +0100

aggiunto empty_file per un rapido test

E’ tutto,per una guida completa a Git vai su http://git-scm.com/documentation.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *