Créer un repository GIT sur un NAS Synology

Bonjour,

Capture d’écran 2014-10-12 à 23.30.00J’ai récemment fait l’acquisition d’un NAS Synology (DS214se) afin de stocker mes fichiers  en local et non « sur le cloud… » en ajoutant un peu plus de sécurité, flexibilité et de partage qu’un disque dur externe grâce au système d’ACL et de redondance (2 Disque de 2To répliqués).

Jusqu’ici, je suis très content de ce NAS même si je n’ai pas d’élément de comparaison, je peux vous assurer que l’initialisation et la première configuration se font très simplement, en quelques minutes. Ensuite vient la gestion des ACLs qui elles aussi se fait en quelques clic grâce à une interface très bien pensée. 

Bref, après ce petit retour d’expérience, je souhaiterai vous donner les quelques commandes à connaître permettant d’initialiser un dépôt git sur votre NAS Synology.

Cette méthode a été testé sur la version 5.0 du DSM.

Installation de GIT sur le NAS

Je vous invite dans un premier temps à vous connecter à votre interface DSM puis à vous rendre dans le « Centre de Paquets », rechercher le paquet « Git Server » puis à l’installer.

Capture d’écran 2014-09-04 à 08.15.09

Activation du SSH sur le NAS

Afin d’être en mesure d’initialiser un dépôt, vous allez devoir activer le SSH sur le NAS. Pour cela, rendez vous dans « Panneau de configuration » puis dans « Terminal et SSH » et cliquez sur « Activer le SSH ».

activate-ssh

Création du dépôt git sur le NAS

Il est maintenant temps de passer sur un terminal pour se connecter au synology. Pour se connecter, utiliser le compte root ou admin avec le mot de passe admin ( et oui les 2 fonctionnent) et l’adresse IP ou le hostname du NAS, dans mon cas « synology »:

ssh root@synology

Positionnez vous ensuite dans le dossier qui va bien dans lequel vous voulez initialiser le dépôt, dans mon cas, le suivant :

Synology> cd /volume1/Etienne/git/

Initialisation du dépôt :

git init --bare development.git

Clonage du dépôt

Déconnectez vous du NAS puis placez vous dans le dossier ou vous souhaitez cloner le dépôt récemment créé puis:

git clone ssh://[User]@[IP ou Hostname]/volume1/Etienne/git/development.git 
warning: You appear to have cloned an empty repository.

De manière tout à fait classique, vous pouvez tester que cela fonctionne en faisant un premier commit vers le dépôt :

echo "First commit" > myFirstFile
git commit -m "First Commit"
git push origin master

Pour ma part, j’utilise mon login « classique » sur le NAS, afin de ne pas commit en tant que root ou admin.

Bonus :

Il se peut que vous ayez ce message lorsque vous « comitez » ou faites des manipulations sur le NAS :

Could not chdir to home directory /var/services/homes/ega: No such file or directory

Pour empêcher cela, rendez vous dans « Panneau de Configuration » puis « Utilisateur » et dans l’onglet avancé, cochez la case « Activer le service d’accueil de l’utilisateur »

activate-user

Et voilà, simple non ? C’est tout pour ce tuto.

A bientôt !

Tags: , , , , , , , , , ,

11 comments

  1. Salut,

    En premier lieu félicitation pour ce tuto qui m’a permis d’installer Git sur mon synology. Par contre, j’ai un problème lors de mon push vers origin master. J’obtiens cela :

    moi@moi:~/Bureau/clone/vagrant$ git push origin master
    admin@192.168.5.66‘s password:
    Counting objects: 3, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 2.23 KiB | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    remote: error: refusing to update checked out branch: refs/heads/master
    remote: error: By default, updating the current branch in a non-bare repository
    remote: error: is denied, because it will make the index and work tree inconsistent
    remote: error: with what you pushed, and will require ‘git reset –hard’ to match
    remote: error: the work tree to HEAD.
    remote: error:
    remote: error: You can set ‘receive.denyCurrentBranch’ configuration variable to
    remote: error: ‘ignore’ or ‘warn’ in the remote repository to allow pushing into
    remote: error: its current branch; however, this is not recommended unless you
    remote: error: arranged to update its work tree to match what you pushed in some
    remote: error: other way.
    remote: error:
    remote: error: To squelch this message and still keep the default behaviour, set
    remote: error: ‘receive.denyCurrentBranch’ configuration variable to ‘refuse’.
    To ssh://admin@192.168.5.66/volume1/homes/admin/git/test
    ! [remote rejected] master -> master (branch is currently checked out)
    error: impossible de pousser des références vers ‘ssh://admin@192.168.1.16/volume1/homes/admin/git/test’

    merci pour l’aide

  2. Salut,

    A priori il ne veut pas mettre à jour ton master par peur de rendre l’index de git et l’espace de travail incompatible.

    As tu bien initialisé ton dépôt en mode –bare ?
    As tu fais un « git pull origin master » histoire d’être sûr d’être à jour avant de faire le git push ?
    Qu’est ce que la commande git remote et git branch -a te renvoient ?

    Tu peux essayer sinon de travailler sur une autre branche puis de la « merger » avec le master :

    git checkout nouvelleBranche
    créer un fichier genre README
    faire un commit
    puis git checkout master
    git pull origin master
    git merge nouvelleBranche
    git push origin master

    Sinon il y a pas mal d’explications et d’exemples ici : http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing-the-repository/

    J’attends tes réponses ou la confirmation que tu as réussi à t’en sortir. Le cas échéant, n’hésites pas à partager ta méthode, je pourrais la rajouter dans l’article.

    • salut,

      en fait la chose à la l’air plus compliqué. Bon je me trouve, en ssh, dans /volume1/homes/admin/git.

      à je lance un git init –bare projet.git
      En réponse on me dit que j’ai créé un dépot vide. ==> je suis content.

      La dessus, je vais dans le dépot donc je me trouve /volume1/homes/admin/git/projet
      je lance, toujours en ssh, un touch readme, ce qui me crée le fichier==> je suis toujours content. Ensuite un vi readme et j’ajoute un petit « hello la terre ». je ferme. Jusque là tout va bien….

      Je retourne dans mon dossier sur le home de mon ordi et je tape
      git clone ssh://root@192.168.5.66/volume1/homes/admin/git/projet.git et j’obtiens : warning: Vous semblez avoir cloné un dépôt vide.

      pourquoi vide puisque j’ai créé le fichier readme ?

      Donc je retourne en ssh sur mon dépot et je crée un second fichier alire.
      puis sur ma machine je fais un git pull origin master et toujours la même réponse :
      fatal: Couldn’t find remote ref master
      fatal: The remote end hung up unexpectedly

      y’ a pas une histoire de clef ?

      merci de ton aide

      • j’avais oublié cette question : Qu’est ce que la commande git remote et git branch -a te renvoient ?

        >git remote =====> origin
        >git branch =====> ne donne rien

  3. A ok, je pense comprendre mieux ton problème, tu n’utilises pas git comme il doit être utilisé en fait.

    Il ne faut PAS que tu créés manuellement des fichiers sur ton dépôts distant ( directement sur le NAS) , tu vas le faire depuis ton PC après avoir cloné un dépôt vide que tu initialises sur ton NAS.

    Pour résumé la méthode (décrite dans l’article):

    1) Initialiser le dépôt sur le NAS : git init –bare monProjet.git
    2) quitter le NAS et se mettre sur ton PC
    3) clone du projet à partir du PC : git clone … etc
    4) créer un fichier SUR TON PC dans le dossier du projet
    5) faire un git add monFichier , puis git commit , puis git push origin master

    Il ne faut pas que tu créés à la main des fichiers directement dans le .git sur ton NAS car ils ne sont pas pris en compte par ton dépôt, c’est pourquoi quand tu fais un clone puis que tu tente de pusher, il trouve des différences entre ce que tu as sur ton PC et ce que tu as sur le dépôt git. Il faut mieux que tu partes du principe que tu créés un dépôt sur ton NAS puis après tu n’y touche plus jamais directement mais uniquement via des commit à partir de ton PC.

    J’espère que j’ai été clair. Tiens moi au courant.

    • Un peu de lecture pour que tu comprennes l’intérêt des branches distante, tu n’es pas censé les modifier directement sur le serveur Git et y ajouter des fichiers mais tu communiques ( pull / push etc..) via Git pour ajouter/modifier des fichiers etc…

      http://git-scm.com/book/fr/Les-branches-avec-Git-Les-branches-distantes

      Le contenu « physique » d’un dépôt git (dossier & fichier) n’est pas du tout le contenu de ton projet sur ton PC/mac que tu gères avec git.

      Contenu de mon projet sur mon mac:

      xxxxxxxxx:development etiennegautier$ ls -la
      total 8
      drwxr-xr-x 4 etiennegautier staff 136 11 oct 11:04 .
      drwxr-xr-x 3 etiennegautier staff 102 11 oct 11:03 ..
      drwxr-xr-x 14 etiennegautier staff 476 11 oct 11:04 .git
      -rw-r–r– 1 etiennegautier staff 60 11 oct 11:04 README

      Contenu du dossier git sur le NAS correspondant à ce projet :

      Synology> ls -la /volume1/Etienne/git/development.git/
      drwxrwsrwx 7 admin users 4096 Sep 4 08:52 .
      drwx—— 4 admin users 4096 Oct 11 14:05 ..
      -rw-rw-r– 1 admin users 23 Sep 4 08:52 HEAD
      drwxrwsrwx 2 admin users 4096 Sep 4 08:52 branches
      -rw-rw-r– 1 admin users 126 Sep 4 08:52 config
      -rwxrwxrwx 1 admin users 73 Sep 4 08:52 description
      drwxrwsrwx 2 admin users 4096 Sep 4 08:52 hooks
      drwxrwsrwx 2 admin users 4096 Sep 4 08:52 info
      drwxrwsr-x 13 admin users 4096 Oct 11 12:04 objects
      drwxrwsrwx 4 admin users 4096 Sep 4 08:52 refs

      Comprends tu la différence ?

    • Salut,

      A y’ est cela fonctionne,et j’ai compris pourquoi cela ne fonctionnait pas.
      J’ai procédé exactement comme tu le mentionnes jusqu’au push. Jusque là tout ce passe bien.
      Ce qui m’a induit en erreur, hier, c’est qu’en retournant sur le NAS (je sais, il ne faut pas 🙂 …), je n’ai pas vu et ne vois toujours pas les éléments ajoutés.

      J’ai donc créé un second clone sur le PC, et les fichiers du push du clone n°1 apparaissent bien.

      Du coup, je suis retourner sur mon premier clone et j’ai fait un commit/push d’un répertoire de 8M° contenant près de 2500 fichiers.
      Le push OK,
      Le pull sur le clone n°2 Ok, j’ai bien tous les fichiers en provenance du NAS

      Par contre sur le NAS toujours pas de fichiers ni du nouveau répertoire.
      D’ou mon ultime question : Ou sont ces sacrés fichiers pushés ?

      PS : Je me suis fait un doc écrite si par hasard cela te dis….

  4. Bonjour,

    Peux-tu accéder à ton répo git depuis l’extérieur ?

    A+

  5. Bonjour Étienne,

    Merci pour ce tuto complet!

    Pour ma part, j’essaye d’avoir une copie de mes modifications avec fichiers source en clair sur mon NAS , comme un backup de mon working Directory local.
    Saurais tu comment faire cela?
    Mon objectif n’est pas de partager mes différentes versions de fichiers mais de les sauvegarder avec synchro auto si possible. Je suppose que je dois cloner mon repository local en non-bare ?

    Merci pour ton aide!
    François

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.