Git, au travers d'HTTP/HTTPS sur Debian
Date de publication : 08 juillet 2011. 
		Par
		Olivier Thiébaut
 
		
		Cet article explique la mise en oeuvre de Git en mode serveur central, au dessus de HTTP grâce au protocole WebDAV.
		
	 
		I. Objectif
			
			
		
		II. Introduction
			
				
			
			
			
			
			
		
		III. Installation de GIT sur le serveur
			
			III-A. git-core paramétrage et dépôt principal
				
				
					
				
				
				
			
			III-B. Apache et DAV
				
				
								
				
				
				
									
				
				
				
				
			
				
				
				
				
				
					
			
			
			III-C. gitweb
				
				
				
				
					
				
				
				
				
				
				
			
		
			IV. prise en main de GIT
				
				IV-A. Les commandes de base
					
				
				
				
				
				
				
				IV-B. Les autres solutions clientes
					
				
				
				
				
				
				
				
				IV-C. Les fichiers de configuration
					
				
				
				
				IV-D. Cloner son premier dépôt en tant que développeur
					
				
				
				
				IV-E. Ignorer des fichiers ou répertoires
					
						 
					 
				
				
				
				
				IV-F. Ajouter, supprimer, renommer et annuler
					
				
				
				
				
				
					
				
					
				IV-G. Scénario de projet
					
				 IV-D-1. Workflow
						
					
					
					
					
					
					
				
				IV-D-3. Mise en pratique
					
					
					
					
					
					
					  
					
					
				
				
			
			V. Redmine, intégration de Git
				
				
			
			VI. Passage au HTTPS
				
				
			
			
			
			
 
			
			
			VII. Conclusion
				
				
			
			VIII. Ressources et remerciements
				
				
					
				
			
	
		I. Objectif
			
			
				  Dans le cadre du développement d'applications, il existe des bonnes pratiques, en équipe ou seul,  
				l'utilisation d'outils dit "collaboratifs" est un incontournable. Les logiciels de gestion de versions 
				(Software Configuration Management, SCM) comme CVS ou Subversion font parties de ces indispensables dans notre travail. 
				Cependant après Subversion (commande svn), qui a introduit des améliorations notables par rapport à CVS, 
				de nouvelles générations de SCM décentralisés sont apparues.
				
				  Leur point fort, ne plus être obligé d'avoir un serveur de dépôt centralisé.
				Git et Mercurial proposent ainsi cette possiblité.
				Même s'ils offrent de travailler déconnecté d'un système central, voir sans,
				se pose quand même le problème de disposer d'un serveur permettant de tout fusionner
				dans un dépôt central. C'est ce qu'on vous propose de découvrir dans ce tutoriel.
				 
				  On vous invite vivement à lire, 
why git is better than x
				, car il tente d'expliquer les points forts de Git. L'objectif n'est pas de prouver qu'il est le meilleur. 
				Mais son approche est constructive et permet de mieux appréhender la partie 
organisationnelle que peut proposer Git
				dans une projet.
			
II. Introduction
			
			 
				  Dans la premier partie, installation et découverte d'un dépôt Git centralisé sur un serveur.
				Nous allons utiliser le protocole DAV couplé au serveur web Apache pour les accès 
				distants. En effet, dans le cadre d'infrastructures sécurisées, le passage par le
				port 80 (HTTP) ou 443 (HTTPS) ne pose aucun problème ;) .
				Il existe la possibilité de créer un dépôt via ssh://... (port 22) ou git://... (port 9418).
.
				Ce dernier est optimisé en terme de performance.
			
	
			
				  Dans la seconde partie, éclairage sur Gitweb qui est une solution logiciel 
				pour visualiser, exposer les sources au travers d'un navigateur, mot clef, simplicité.
			
			
				  Dans la troisième partie, on vous propose un introduction sur l'utilisation de cette
				configuration à travers un scénario initiateur.
				Enfin, nous verrons comment utiliser cette installation pour la déclarer 
				dans Redmine, qui est une solution complète de suivi de projet.
				Nous ne verrons pas son installation, un prochain article, pourquoi pas ... 
			
			
				Détail des logiciels et versions
			
			
				- Système d'exploitation, Debian Lenny
- GIT, Debian Lenny
- Apache 2.0, Debian Lenny
- Gitweb, Debian Lenny
- Redmine, version 1.0.2 stable
				  Nous allons nous concentrer sur les points essentiels, pour des adaptations 
				à la marge, nous vous renvoyons vers la documentation man ou les sites officielles.
			
		
		III. Installation de GIT sur le serveur
			
			III-A. git-core paramétrage et dépôt principal
				
				
					L'installation de Git et son application web sous Debian se fait par la commande
				
					|  apt-get install git-core git-web
					
 | 
					La distribution Debian gère très bien les dépendances logiciels.
					Pour les autres distributions, on utilise yum ou rpm. Sinon 
					retour aux sources et compilation (sic :=( ).
		
					Dans toute la suite de notre "expérience" Git, nous allons centraliser 
					tous les dépôts (projets) sous la racine /opt/git.
				
				|  mkdir /opt/git
 cd /opt/git
 mkdir MonProjet.git
 cd MonProjet.git
 git init --bare
 chown -R www-data:www-data .
 chmod a+x hooks/post-update
					
 | 
					  Sous Debian, l'utilisateur qui est propriétaire des processus web est www-data.
					C'est à travers cet dernier, que les fichiers vont être lus ou écrit en HTTP.
					D'ou la commande chown.
					Pour les autres distributions, voir qui est est le propriétaire de www, qui est
					la racine web de votre serveur web.
					 
					  Pour Git, l'option --bare correspond à la création d'un dépôt vide.
					La dernière ligne correspond au fait que lors d'un push sur le serveur central, la commande
					interne update-server-info doit être lancée. Pour qu'elle se produise de façon automatique,
					 il faut changer les droits du script post-update (confère doc officielle de git en ligne).
					Un message d'erreur récurrent PUT error: curl result=22, HTTP code=403, lors de mes tests, 
					s'est affiché pendant des push vers le dépôt central. Il ne faut pas hésiter à utiliser la commande 
					chown -R www-data:www-data /opt/git/MonProjet.git.
				
			
			III-B. Apache et DAV
				
					
					  WebDAV (Web-based Distributes Authoring and Versioning) est une extension du
					protocole HTTP RFC 4918. Il permet de récupérer, déposer ou synchroniser des 
					fichiers distants facilement à travers le protocol HTTP et ou HTTPS. 
					
le site officiel WebDAV  peut vous apporter 
					d'autres informations sur le sujet.	On doit vérifier qu'Apache, le serveur web supporte ce protocole.
					
				
|  a2enmod dav_fs
 a2enmod dav
					
 | 
					Si erreur il y a, il suffit d'installer le package adéquat.
				
|  
 apt-get install libapache-mod-dav
 					
 | 
					  Pour permettre un accès WebDAV à la racine de notre projet MonProjet.git,
					nous créons un nouveau fichier en tant qu'utilisateur root :
				
									|  touch /etc/apache2/sites-available/git-dav
					
 | 
Contenu a créé fichier git-dav
| /etc/apache2/sites-available/git-dav | 
|  
 Alias /MonProjet.git /opt/git/MonProjet.git
 
 <Location /MonProjet.git>DAV on
	
	AuthType Basic
	
	AuthName"Git, yop, pass ?"AuthUserFile /etc/apache2/passwd.git
	Require valid-user</Location>
 | 
					On doit activer le nouveau "site", avec l'instruction a2ensite soit :
				
				
				
					  Il nous reste la déclaration de nos utilisateurs, 
					avec création de mot de passe. pour l'ajout ou la modification
					du fichier passwd.git, faites un man htpasswd.
				
			|  
 htpasswd -c /etc/apache2/passwd.git <utilisateur>
 | 
					  Il faut systématiquement valider les étapes intermédiaires.
					L'utilisation des outils cadaver ou litmus sont en mode console,
					sinon en mode graphique, avec konqueror et l'URL webdav://...
					Bien entendu, il existe moultes solutions.
				
|  
 client>cadaver http://machine/MonProjet.git
 Authentification requiredforGit tutoriel on server ...
 client>Username: user
 client>Password: motdepasse
 dav:/tutotiel.git/>ls
 Listing collection`/tutoriel.git/': succeeded. Coll: branches .... 				
 | 
					  Sous windows XP, il faut exploiter le lien 
					Favoris réseau -> clique droit -> Connecter un lecteur réseau
					dans la fenêtre, en bas il faut sélectionner Ouvrir une session de stockage
					ou se connecter à un serveur distant.
					En se laissant guider, il suffira de déclarer l'adresse en http://.../Monprojet.git/. 
				
				|  | Cela permet de tester le bon fonctionnement, cependant depuis le début, nous avons passé sous silence la notion
					de sécurité. Le protocole HTTP permet une mise au point simple (scan de trame réseau), mais pas "securisée" 
					avec notamment le mot de passe en clair. Pour une solution d'entreprise, il faudra veiller à tout passer en HTTPS. | 
				
					  Pour la partie cliente. lors de l'authentification distante avec Git. Le serveur
					web Apache demandera le login et le mot de passe, sous Linux, il faut crée un fichier
					$HOME/.netrc qui permettra le stockage de ces données.
 			
				
|  olivier>cat>~/.netrc
 machine monserveur.com
 login olivier
 password monmotdepasse
 ^C
 olivier>chmod600.netrc
 | 
					  Il faudra simplement faire attention d'utiliser un mot de passe qui n'est pas le compte de
					votre machine, car c'est stocké en clair. C'est moyen comme solution. Cette manipulation
					vous évitera de saisir le nom d'utilisateur et le mot de passe dans l'URL.
				
|  
 olivier>git clone http://user:motdepasse@machine/depot.git/
 
 olivier>git clone http://machine/depot.git/
 | 
III-C. gitweb
				
				
					  L'application 
gitweb est un script cgi. Son installation par la commande 
apt-get
					doit être complétée par un paramétrage. Il est écrit en Perl, le site officiel
					de 
Gitweb.
					Pour avoir un brève description des fichiers, on peut lancer la commande :
				
					  Les fichiers *.png, *.css et autres sont installés dans l'arborescence /usr/share.
					le binaire cgi sous /usr/lib/cgi-bin/gitweb.cgi.
					Il suffit de modifier le fichier /etc/gitweb.conf, pour faire pointer l'application gitweb
					sur le repertoire qui va héberger tous les dépôts git soit /opt/git.
				
					| /etc/apache2/site-available/git-dav | 
| 
 
 $projectroot="/opt/git";
 | 
				  Le chemin de tous les projets Git sur le serveur pointeront sur /opt/git.
				Il faut paramétrer le serveur web Apache pour prendre en compte ce script en rajoutant dans le fichier
				git-dav.
				
				| /etc/apache2/site-available/git-dav | 
| 
 Alias /gitweb.css /usr/share/gitweb/gitweb.css
 Alias /git-logo.png /usr/share/gitweb/git-logo.png
 Alias /git-favicon.png /usr/share/gitweb/git-favicon.png
 
 ScriptAlias /gitweb /usr/lib/cgi-bin/gitweb.cgi
					
 | 
				Pour visualiser l'ensemble de nos projets, on fait pointer notre navigateur à l'adresse
				http://nomduserveur/gitweb.
				
				
				
				  Si vous cliquez sur votre projet, gitweb, donnera le détail 
				de votre projet. Dans la barre inférieur, le texte Unnamed repositery; edit this file to name it for gitweb
				est disgracieux. Editer le fichier description sous /opt/git/Monprojet.git/description pour changer ce texte.
				Dans notre cas, on rajoute Gitweb Tutoriel pour developpez.com.
				
				
			
		
			IV. prise en main de GIT
				
				IV-A. Les commandes de base
					
				
					Le tableau ci-dessous, vous donne une perspective des commandes de base, avec un lien sur les options.
					Ils en existent bien d'autres.
				
				
				
					
						| Commande | type de commande | Description | options | 
					
						| git status | local | Etat du dépôt local, en fonction de la branche | , lien | 
					
						| git init | local | initialise un nouveau dépôt | --bare dépôt vide
								, lien | 
					
						| git add | local | ajoute un fichier ou un répertoire | , lien | 
					
						| git rm | local | efface un fichier ou un répertoire | -r de façon récursive, | 
					
						| git commit | local | valide les changements dans le dépôt | -m ajout du commentaire
							, lien | 
					
						| git reset | local | réinitialisation à l'état du dernier commit | --hard HEAD (exemple)
							, lien | 
					
						| git show | local | montre les informations sur un objet | , lien | 
					
						| git log | local | montre l'hitorique des commits | git log > changelog, création d'un fichier de log , lien
 | 
					
						| git repack | local | réorganise les objects du dépôt | , lien | 
					
						| git prune | local | nettoyage de la base | utilisation couplée de git repack && git prune , lien
 | 
					
						| git clone | distant | clone un dépôt distant dans un nouveau répertoire local
 | protocoles git://..., ssh://..., http://..., https://...
							, lien | 
					
						| git remote | distant | gestion des dépôts distants | add ajout, rm efface ...
							, lien | 
					
						| git pull | distant | récupération du dépôt distant | on peut préciser la branche
							, lien | 
					
						| git push | distant | poussera le dépôt courant vers le dépôt distant ( défaut "origin") | git push projet v1, pousse la branche v1 vers distant git push [nom-distant] [nom-de-branche]			
								  , lien
 | 
					
						| git fetch | distant | récupération des objets et refs distantes | lien | 
				
Les commandes GIT
					Ce tableau n'est pas exhaustif. 
				
				
				
				IV-B. Les autres solutions clientes
					
				
					Elles peuvent se décliner en fonction du système d'exploitation.
					Les unix
					Sous Linux, Unix ou BSD, il existe souvent un package git, sinon il existe la possiblité de compiler
					les sources. Les solutions graphiques :
				
				
									
					Sous windows :
				
				
					- Git for Windows, émulateur Unix, complet 
- Tortoisegit, client graphique non complet, ne supporte pas encore la notion de submodule
- Cygwin, émulateur Unix contenant un package Git
IV-C. Les fichiers de configuration
					
				
					Comme tout SCM, il faut configurer en local son espace de travail pour que Git puisse retrouver votre
					nom, prénom, email et autres petits détails de conforts personnels.
				
|  git config --global user.name="olivier thiébaut"git config --global user.email="momail@domain.fr
 | 
					
					L'option --global va engendrer la création d'un fichier dans $HOME/.gitconfig.
					Sans l'option, il faut se placer dans un dépôt, les options seront donc mémoriser dans
					le fichier MonDepot/.git/config.
					Cette commande peut aussi servir de configuration à la création de raccourcis, quelques exemples :
				
|  git config --global alias.st=status
 git config --global alias.ci=commit
 git config --global alias.co=checkout
 git config --global alias.br=branch
 
 git config --global core.editor"vim"
 | 
IV-D. Cloner son premier dépôt en tant que développeur
					
				
						  L'objectif est de "cloner" un espace de développement et de s'initer à 
						quelques commandes de base. On considère que le dépôt central est créé.
						Nous allons nous placer comme développeur, nous avons une URL distante de la forme,
						http://nomduserveur/depot.git, un nom d'utilisateur et un mot de passe fourni par 
						l'administrateur du dépôt central.
						Examinons un cas pratique.
				
|  olivier>mkdir test
 olivier>cd test
 olivier>git init
 olivier>git clone http://olivier:monmotdepasse@serveurdedepot/tutoriel.git tutoriel
 olivier>cd tutoriel
 olivier>git branch
 * master
 olivier>git remote 
 origin
 olivier>git remote -v 
 origin http://olivier:monmotdepasse@serveurdedepot/tutoriel.git
 olivier>git branch -a
 * master
   origin/HEAD<- pointeur sur la branche active
   origin/master<- branche principale distante
   origin/develop<- branche de développement
   origin/bugs<- branche pour fixer les corrections
 olivier>ls -a
 . .. .git install.txt readme.txt
 olivier>ls -a .git
 .  branches description hooks info objects
 .. config   HEAD        index logs refs
 | 
					  Il faut souligner, que lorsqu'on clone un projet
					son nom distant est par défaut origin et son nom local est master. 
					Mais il est possible d'avoir un	autre nom ou alias qui pourrait pointer sur le même serveur ou sur un autre
					serveur distant, voir le dépôt d'un autre collègue.
 Ainsi, on ajoute un 
					autre dépôt distant avec la commande suivante :
				
|  olivier>git remote add tuto http://gary:motdepasse@serveurdegary/tutoriel.git
 olivier>git branch -a
 | 
IV-E. Ignorer des fichiers ou répertoires
					
				
					  Quel que soit le langage, il existe souvent un répertoire log et ou cache
					que nous ne voulons pas enregistrer dans le dépôt. Si nous voulons ne pas prendre en 
					compte leur contenus respectifs, il faut créer à la racine du projet un fichier
					.gitignores.
				
		 
|  cat >.gitignore
 
 
 readme.txt
 
 *.zip!projet.zip
 
 *.[oa]
 
 cache/
 log/
 
 nbproject/
 | 
					Mais on on peut aussi exclure fichiers et repertoires à l'intérieur de l'arborescence.
				
|  olivier>pwd
 /home/olivier/projetgit/
 olivier>ls -a
 . .. .git install.txt readme.txt
 olivier>mkdir src; cd src 
 olivier>touch a.txt b.txt c.txt<- On crée trois fichier que l on rempli 
 olivier>forlinein`ls -A`;doecho"Fichier $line">$line;doneolivier>echo"a.txt">.gitignore<- On ignore le fichier a.txt
 olivier>cd ..<- retour à la racine du projet
 olivier>git add src<- On ajoute le repertoires et ses fichiers!olivier>git status
 | 
					  On constate que le fichier a.txt, n'a pas été pris en compte.
					Il est cependant préférable de tout concentrer dans le fichier .gitignore 
					à la racine du projet en précisant l'arborescence du fichier à exclure.
				
				|  | Remarque importante, on prend en considération dans le git add
					le fichier .gitignore dans le dépôt. 
 | 
				
				IV-F. Ajouter, supprimer, renommer et annuler
					
				
					Pour ajouter fichiers et répertoires :
				
|  git add fichier.txt repertoire 
 | 
					
					Pour renommer, un fichier ou un repertoire :
				
|  git mv fichier_origine.xt fichier_new.txt
 git mv src_origin/ src_new/
 | 
					
					pour supprimer un fichier ou un répertoires de façon récursive :
				
|  git rm fichier.txt
 git rm --r src/
 | 
Pour revenir à votre version initiale :
				
												
				
					
				
					
				IV-G. Scénario de projet
					
				 IV-D-1. Workflow
						
					
						  Dans la section III-C, dans l'image de gitweb, on s'aperçoit qu'il y 
						a sur le serveur trois branches. Mais pour l'instant si vous avez suivi le tutoriel
						, il n'existe sur le dépôt qu'une branche dite master en local et origin sur le
						serveur distant.
 
						Nous devons aboutir à :
					
					
						- master : la branche principale
- develop : la branche de développement
- bugs : la branche de correction des bugs
						  On se place dans un cycle de vie applicatif. Sur des architectures
						standards, il n'est pas rare d'avoir plusieurs branches qui cohéxistent.
						Il est fréquent de travailler sur une version de développement, fournir une version de
						recette pour valider les spécifications fonctionnelles de la maîtrise 
						d'ouvrage et déployer une version en production.
						Cela implique de maintenir plusieurs branches, le modèle que nous allons 
						présenter est tirer de l'exemple du site 
nvie.com.						
					
						On se situe sur le serveur, à la racine du dépôt principal. Nous allons créer les deux branches
						qui nous manquent. C'est à dire la branche develop qui sera servira la branche développement 
						et bugs qui sera la branche d'intégration des correctifs.
					
|  
 www-data@serveur>cd /opt/git/MonProjet.git
 www-data@serveur>git branch develop
 www-data@serveur>git branch bugs
 www-data@serveur>git branch -l
  bugs
  develop
 *master
 | 
IV-D-3. Mise en pratique
					
					
							  Le scénario est le suivant, nous avons à disposition une équipe.
							Nous prenons volontairement un exemple concret pour vous permettre 
							d'assimiler les rôles et les concepts.
							Sur le serveur de l'entreprise, existe notre projet MonProjet.git, avec 
							trois branches.
							Les acteurs : 
					
					
						
							| Nom | Rôle | Symbole | 
						
							| bob | chef de projet | CP | 
						
							| gary | développeur | DEV | 
						
							| patrick | développeur | DEV | 
						
							| carlos | admministrateur réseau | ADR | 
					
						
  bob décide de rappatrier le projet, avec toutes les branches, il fait une modification
						sans s'en rendre compte sur la branche master. A chaque fois que l'on veut changer 
						de branche, il faut faire un checkout. Ce qui est intéressant, c'est la ligne 
					
|  git branch --track develop origin/develop
 | 
					   On fait une copie locale de la branche distante "origin/develop", avec le nom local "develop".
					 Ce qui va permettre de travailler dessus avec un checkout, puis de mettre à jour le 
					 version distante avec un git push. Effectivement, la branche locale "develop" est reliée
					 à celle distante "origin/develop".						
					
| 
 olivier>~/test$git clone http://www.xxxxxxxx.com/tutoriel.git
 Initialized empty Git repositoryin/home/olivier/test/tutoriel/.git/
 Getting alternates listforhttp://www.xxxxxxxx.com/tutoriel.git
 Getting pack listforhttp://www.xxxxxxxxx.com/tutoriel.git
 Getting indexforpack 40e0b475f53287da14ba2a0b2de79083ba3be80b
 Getting pack 40e0b475f53287da14ba2a0b2de79083ba3be80b
  which contains 95cef2dcf9e5c5f129b49b210e02bbe138aa63ed
 walk 95cef2dcf9e5c5f129b49b210e02bbe138aa63ed
 walk 34e3771587e60ba5d01819f2c8deec70fd977061
 walk 658f9e8e7b4d1220e14e12513a78c0564d729af6
 walk f79c548b68b13bbdeca4185bf8113f8146aaa1ac
 walk 9eb5adb410b4b18624aed47cef18110957c9429f
 walk 6b394c1ff73dba1998d5a31f9c00250a9fec3809
 olivier>cd tutoriel/
 olivier>~/test/tutoriel$git branch -l
 * master
 olivier>~/test/tutoriel$git branch -r
   origin/HEAD
   origin/bugs
   origin/develop
   origin/master
 olivier>~/test/tutoriel$git branch --track develop origin/develop
 Branch develop set up to track remote branch refs/remotes/origin/develop.
 olivier>~/test/tutoriel$vi install.txt 
 olivier>~/test/tutoriel$git commit -a
 Created commit aae35a4: modifications1files changed,1insertions(+),1deletions(-)
 olivier>~/test/tutoriel$git push
 Fetching remote heads...
   refs/
   refs/heads/
   refs/tags/'refs/heads/develop': up-to-date
 updating'refs/heads/master'from 95cef2dcf9e5c5f129b49b210e02bbe138aa63ed
   to   aae35a4a9e9258bad354e548747032e4364e8ad0
     sending3objectsdoneUpdating remote server info
 olivier>~/test/tutoriel$git push develop
 fatal:'develop': unable to chdir or not a git archive
 fatal: The remote end hung up unexpectedly
 olivier>~/test/tutoriel$git branch -a
   develop
 * master
   origin/HEAD
   origin/bugs
   origin/develop
   origin/master
 olivier>~/test/tutoriel$git checkout develop
 Switched to branch"develop"olivier>~/test/tutoriel$vi install.txt 
 olivier>~/test/tutoriel$git merge master
 Updating 95cef2d..aae35a4
 Fast forward
  install.txt|2+-1files changed,1insertions(+),1deletions(-)
 olivier>~/test/tutoriel$vi install.txt 
 olivier>~/test/tutoriel$git push
 Fetching remote heads...
   refs/
   refs/heads/
   refs/tags/
 updating'refs/heads/develop'from 95cef2dcf9e5c5f129b49b210e02bbe138aa63ed
   to   aae35a4a9e9258bad354e548747032e4364e8ad0done'refs/heads/master': up-to-date
 Updating remote server info
 | 
					
					 Ce début de travail se repète pour tous les acteurs du projet.
					 Chaqu'un récupère un copie afin de pouvoir travailler dessus.
					 Il faut en règle général "éditer" un document sur les bonnes
					 pratiques du dépôt central. Une sorte de manager,
					 doit orchestrer le fonctionnement du dépôt central.
					
					  
					
						
							| Utilisateur | Action | machine | Description | 
						
							| ADR | mkdir /opt/git /opt/git/projet.git cd /opt/git/projet
									  git init --bare
									  voir III
 | serveur | initialisation d'un projet vide | 
						
							| CP | git clone http://cp:cppassword@serveur/projet.git | serveur | initialisation d'un projet vide | 
					
V. Redmine, intégration de Git
				
				
					Redmine est outil de gestion de projet l'objectif n'est pas de voir son installation, mais de montrer
					le couplage possible entre différents outils libres. La flexibilité de Git, et sa possiblité
					d'exister de façon couper du serveur central va bien nous servir.
					Dans un cadre idéal, budget et sécurité, Git et Redmine sont installés sur deux machines différentes, le problème
					étant que Redmine ne peut déclarer qu'un dépôt sur le même serveur.
					Il suffit de cloner le serveur principal, et de mettre à jour régulièrement le dépôt avec une tâche cron.
					 
				
			
			VI. Passage au HTTPS
				
				
				  Nous allons passer à la version sécurisée de notre dispositif Git en accès HTTPS.
				Si vous êtes dans une configuration ou votre certificat est "auto-signé", vous devrez rajouter 
				la variable d'environnement suivante :
			
| 
env GIT_SSL_NO_VERIFY=true
 | 
 Ce qui donne pour une un clone de projet en HTTPS
			
| 
env GIT_SSL_NO_VERIFY=true git clone https://monserveur/mondepot.git/
 | 
							
				L'installation du mode SSL se fait sans difficulté sous Debian.
		     Il crée normalament un fichier certificat auto-signé. Il vous demandera 
			 différents paramètres à enregistrer DNS, nom, pays etc ... .
			 Cependant nous allons voir la manipulation pour le faire or refaire nous même.
			 Du sur mesure.
			
| 
 root>a2enmod ssl
 See /usr/share/doc/apache2.2-common/REAMDE.Debian.gz on how to configure SSL and create self-signed certificates.
 ...
 root>mkdir /etc/apache2/ssl
 root>openssl req$@-new -x509 -days365-nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.key
 root>chmod600/etc/apache2/ssl/*
 root>touch /etc/apache2/sites-available/securessl
 | 
				Le fichier securessl, va contenir les informations du site SSL du dépôt central.
			
| /etc/apache2/sites-available/securessl | 
|  
 <VirtualHost *:443>ServerAdmin webmaster@localhost
 	Document root /opt/git
 	
 	SSL Engine on
 	SSLCertificateFile /etc/apache2/ssl/apache.pem
 	SSLCertificateKeyFile /etc/apache2/ssl/apache.key
 	
	AliasMatch ^/git/(.*) /opt/git/$1<Location /git>DAV on
		
		AuthType Basic
		
		AuthName"Git, yop, pass ?"AuthUserFile /etc/apache2/passwd.git
		Require valid-user</Location></VirtualHost
 | 
				Il faut prendre en compte le nouveau site, redémarrer Apache et tester
			
| 
 root>a2ensite securessl
 root>apachectl restart
 | 
				
			
			
			VII. Conclusion
				
				
					  Ce tutoriel représente une synthèse de mon travail, l'objectif était de regrouper
				dans un article toutes les problématiques ou questions qui me sont passés par la tête.
				J'ai essayé d'avoir une démarche pédagogique. Sachant que c'est un vaste sujet 
				et que je n'ai abordé qu'un partie.
				  Cela se résume à démystifier la complexité au profit d'un évident sens pratique
				du concepteur (Linus Torvalds, Linux).
				 Git n'est pas "compliqué", comme on peut l'entendre dire, mais riche en fonctionnalités, 
				le côté décentralisé, perturbe, mais cela est d'un confort évident. 
				Là ou cela devient puissant, c'est la facilité avec laquelle il est aisé de gérer branches et tags de versions 
				d'un projet.
 
				  Là ou les autres posent parfois problèmes (notions avancées), ce dernier semble beaucoup plus facile d'utilisation.
				
			
			VIII. Ressources et remerciements
				
					Les ressources :
					
				
			
	


 
		
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2011 Olivier Thiébaut. Aucune reproduction, même partielle, ne peut être
faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à
trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.