Dec 122012
 

Solo di recente ho iniziato a lavorare con Git, non prendetevela con me io sono principalmente un amministratore di sistema non uno sviluppatore, e una delle cose che mi hanno chiesto di configurare è un modo di avere un progetto Git clonato e poi condiviso in SSH ad un particolare gruppo di persone che condividono lo stesso gruppo linux.

Il problema in questa impostazione sono le autorizzazioni che devono essere impostate correttamente in modo che voi e gli altri non finiate pestandovi i piedi gli uni con gli altri in fase di push dei cambiamenti ai programmi, quindi cerchiamo di vedere come ottenere in fretta questa configurazione.



Creazione di un nuovo repository condiviso tramite ssh

Se avete solo bisogno di creare un nuovo repository git e condividerlo via ssh con i vostri colleghi di lavoro è possibile eseguire il comando:

git init --bare -shared myproject.git

Spiegazione dei parametri:

–bare = Quando si crea un repository git con l’opzione –bare, succedono queste 2 cose:

  • Non è creata alcuna directory di lavoro.
  • Non è creata la directory .git Al contrario, i file normalmente nella directory .git vengono inseriti nella directory di livello superiore in cui la directory di lavoro risiederebbe normalmente, questa è la configurazione consigliata per impostare un progetto condiviso

Controllare il seguente articolo per sapere perché i repository condivisi dovrebbero essere archivi bare.

–shared = Questa opzione consente di impostare i permessi su tutti gli oggetti nel repository affinchè siano scrivibili al gruppo, i possibili valori di questo parametro sono:

  • umask (or false) – Il valore di default. Git usa i permessi impostati dall’umask
  • group (or true) – rende il repository scrivible al gruppo
  • all (o world o everybody) – lo stesso di group, ma rende il repository leggibile a tutti gli utenti
  • 0xxx: 0xxx è un numero ottale e ogni file avrà permessi di 0xxx. 0xxx avrà la precedenza sul valore dell’umask degli utenti. 0640 creerà un repository che è leggibile dal gruppo ma non scrivibile. 0660 è equivalente a group.

È possibile verificare lo stato di un repository Git esistente, guardando nel suo file di configurazione, si dovrebbe vedere una riga contenente:

[core]
    sharedRepository = true

Si prega di notare che il valore “true” è lo stesso “group”, e che questo parametro può essere impostato anche con il comando

git config core.sharedRepository true

Se avete dimenticato di impostarlo durante la fase di init.

Clonare un progetto Git esistente e condividerlo tramite ssh

In questo scenario è necessario prima clonare un repository Git esistente e poi condividerlo con i colleghi tramite ssh.

In questo caso è importante che, come prima cosa si imposti la umask dell’utente che sta per fare l’operazione di clone, in quanto questo parametro imposta le autorizzazioni iniziali sul repository git clonato, per avere un repository condiviso è necessario impostare i file e le directory in modo che siano scrivibili dal gruppo:

umask 002
git clone --bare  remoterepository mydirectory.git
cd mydirectory.git
git config core.sharedRepository true

Spiegazioni dei comandi e dei parametri:

umask 002 : Questo imposta la umask dell’utente corrente in modo che tutti i nuovi file creati abbiano un permesso pari a 664 e le directory a 775.
git clone –bare : Questo è equivalente al parametro –bare nel comando init, quindi

  • Non è creata alcuna directory di lavoro.
  • Non è creata la directory .git Al contrario, i file normalmente nella directory .git vengono inseriti nella directory di livello superiore in cui la directory di lavoro risiederebbe normalmente, questa è la configurazione consigliata per impostare un progetto condiviso

remoterepository : questo è il repository remoto che si desidera clonare ad esempio: https://github.com/octocat/Spoon-Knife.git
mydirectory.git : Il nome della directory in cui si desidera clonare il repository remoto Git.

Dopo il clone i 2 comandi successivi fanno semplicemente un cd (change directory) nel repository clonato e lo rendono un repository condiviso, in modo che i nuovi file abbiano le autorizzazioni corrette.

Conclusioni

Spero che questo piccolo articolo possa aiutarvi a risparmiare un po’ di tempo nella creazione di un repository Git da condividere, come si può vedere è abbastanza facile .. una volta che si conoscono le opzioni Git ed i comandiLinux corretti 🙂

Riferimenti:

Using Git with a central repository
Sharing a git repository over ssh
How do I share a Git repository with multiple users on a machine?

Popular Posts:

Flattr this!

  2 Responses to “Come clonare e condividere un repository GIT con SSH”

  1. One thing to mention if you decide later to share the repository. Just setting the core.sharedRepository to true is not enough. At least on Linux/UNIX (don’t know Windows), you must mark the directories as group writeable and setgid (to propogate the directory’s gid to new files), and set all files as group writable as well. What I do:

    find . -type d -exec chmod g+ws {} \; #set directories as group writeable and setgid
    find . -type f -exec chmod g+w {} \; #set files as group writeable

Leave a Reply to John McKown Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*