Projet

Général

Profil

Utilisation de Git » Historique » Version 12

Julien Enselme, 13/09/2013 23:56
git sous Windows : modifications pour que ça marche presque

1 1 Florent Torregrosa
h1. Utilisation de Git
2 1 Florent Torregrosa
3 2 Florent Torregrosa
{{>toc}}
4 2 Florent Torregrosa
5 1 Florent Torregrosa
Adresse du dépôt git : LOGIN@scm.centrale-marseille.fr:/srv/git/PROJET/default.git
6 1 Florent Torregrosa
7 3 Julien Enselme
Pour ajouter des utilisateurs au projet, il faut se rapprocher du CRI. Pour deux raisons :
8 3 Julien Enselme
9 1 Florent Torregrosa
* Les utilisateurs doivent être connus de Redmine
10 1 Florent Torregrosa
* Les utilisateurs doivent avoir les droits de commit. Ceci implique d’être dans le bon groupe Unix.
11 1 Florent Torregrosa
12 3 Julien Enselme
{{important(*L’encodage par défaut du dépôt est UTF-8*. Faîtes-y attention surtout si l’encodage de votre système est différent (Vous êtes sous Windows ou linux > 10 ans).)}}
13 1 Florent Torregrosa
14 1 Florent Torregrosa
Pour avoir une présentation de git et quelques commandes de base : http://www.llaumgui.com/public/slides/git-github-social-codding/#/
15 1 Florent Torregrosa
16 1 Florent Torregrosa
h2. Les clés ssh
17 1 Florent Torregrosa
18 5 Julien Enselme
h3. Généralités sur ssh
19 1 Florent Torregrosa
20 3 Julien Enselme
Les clés ssh sont une application de la cryptographie asymétrique dans le but de se connecter à une machine distante. Explications :
21 1 Florent Torregrosa
22 3 Julien Enselme
L'utilisateur A désire se connecter au serveur ECM de façon sécurisée sans avoir à entrer en permance un mot de passe (qui peut s'oublier, être découvert). Pour cela, il va générer une paire de clés ssh :
23 3 Julien Enselme
24 3 Julien Enselme
* une clé privée qu'il gardera précieusement
25 5 Julien Enselme
* une clé publique à placer sur le serveur.
26 3 Julien Enselme
27 3 Julien Enselme
Pour placer ladite clé sur le serveur, il faut (en général) s'y connecter par mot de passe.
28 3 Julien Enselme
29 3 Julien Enselme
Lorsque A va vouloir se connecter à ECM, son client ssh va tout d'abord regarder si des clés sont disponibles. Ici, A va tenter de se connecter avec sa clé privée. Comme sa clé publique est sur le serveur et qu'un couple de clés est unique, ECM sait que celui qui veut se connecter est A. Il autorise donc la connection.
30 3 Julien Enselme
31 3 Julien Enselme
Notons enfin que lors de la première tentative de connection au serveur, le client demande si on désire accepter la clé publique du serveur. Celle-ci va en effet être utilisée pour le reconnaitre par la suite. Il est évidemment recommandé de ne pas accepter de clés de serveur inconnus.
32 3 Julien Enselme
33 5 Julien Enselme
h3. ssh sous GNU/Linux et autres Unix (*BSD, MacOS, etc.)
34 3 Julien Enselme
35 3 Julien Enselme
L'accès au dépôt se fait par clés ssh. Vous devez donc autoriser la connection à l'aide de votre paire de clé (vous pouvez également procéder de même pour vous connecter en ssh à vos comptes personnels ou d’association, il faut juste adapter les dossiers et les machines).
36 3 Julien Enselme
37 1 Florent Torregrosa
Pour créer une paire de clé ssh, lancez la commande : <code>ssh-keygen</code>. Ceci crée deux fichiers dans votre ~/.ssh :
38 3 Julien Enselme
39 1 Florent Torregrosa
* id_rsa (votre clé privée à conserver précieusement)
40 1 Florent Torregrosa
* id_rsa.pub (votre clé publique à transmettre).
41 1 Florent Torregrosa
42 7 Florent Torregrosa
Commande pour créer une paire de clés ssh dans un fichier dont on choisit le nom et le commentaire directement : <code>ssh-keygen -f nom_du_fichier -C commentaire</code>
43 7 Florent Torregrosa
44 3 Julien Enselme
Pour pouvoir utiliser votre clé publique ssh (~/.ssh/id_rsa.pub) dans le fichier authorized_keys dans votre compte de l'école (eg sur le sas) :
45 1 Florent Torregrosa
46 1 Florent Torregrosa
* si la clé est dans votre compte:
47 1 Florent Torregrosa
48 1 Florent Torregrosa
 * <code>cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_key</code>
49 1 Florent Torregrosa
50 1 Florent Torregrosa
* si elle est sur votre machine perso, *au choix* :
51 1 Florent Torregrosa
52 3 Julien Enselme
 * <code>ssh-copy-id login@sas1.ec-m.fr</code> (recommandé)
53 11 Julien Enselme
 * <code>ssh-copy-id -i nom_du_fichier_sans_extension_pub login@sas1.ec-m.fr</code> *si vous avez votre clé dans un autre fichier que id_rsa* (recommandé)
54 1 Florent Torregrosa
 * <code>cat ~/.ssh/id_rsa.pub | ssh LOGIN@sas1.ec-m.fr 'mkdir -m 700 -p ~/.ssh ; cat >> .ssh/authorized_keys'</code>
55 3 Julien Enselme
56 3 Julien Enselme
Vous pouvez avoir plusieurs couple de clés ssh sur votre machine (une par serveur par exemple). Auquel cas, leur donner un nom plus explicite peut s'avérer utile.
57 3 Julien Enselme
58 9 Florent Torregrosa
Dans votre dossier _.ssh_, vous pouvez aussi créer un fichier _config_ pour, entre autre chose, créer un alias d'hôte ce qui vous évitera de taper par exemple _ssh assos@sas1.centrale-marseille.fr_ mais juste _ssh drupal_ (vous pourriez aussi utiliser un alias bash ou affilié pour atteindre ce but). Cette configuration est aussi valable avec scp et peut vous procurer une complétion des chemins sur l'hôte distant.
59 9 Florent Torregrosa
60 9 Florent Torregrosa
Si vous avez plusieurs clés sur votre machine, le fichier config s'avèrera obligatoire sinon, la bonne clé ne sera pas utilisée. exemple de fichier ~/.ssh/config :
61 9 Florent Torregrosa
62 9 Florent Torregrosa
<pre>
63 9 Florent Torregrosa
<code>
64 9 Florent Torregrosa
host          drupal
65 10 Julien Enselme
  hostname      sas1.centrale-marseille.fr
66 10 Julien Enselme
  IdentityFile  ~/.ssh/nom_du_fichier_sans_extension_pub
67 10 Julien Enselme
  user          assos
68 10 Julien Enselme
  port          22
69 9 Florent Torregrosa
</code>
70 9 Florent Torregrosa
</pre>
71 9 Florent Torregrosa
72 10 Julien Enselme
Si vous avez créé une clé avec une passphrase, celle-ci vous sera demandé à chaque connexion. Il existe des logiciels comme "ssh-agent":http://en.wikipedia.org/wiki/Ssh-agent pour la stocker en mémoire temporairement.
73 1 Florent Torregrosa
74 5 Julien Enselme
h3. ssh sous windows
75 1 Florent Torregrosa
76 4 Julien Enselme
Windows ne fournit pas de client ssh par défaut. Vous devez tout d'abord en installer un. Nous vous recommandons "putty":http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html qui s'exécute directement dans le dossier où il est. Allez sur "ce tuto":http://assos.centrale-marseille.fr/ginfo/content/utiliser-un-terminal-unix-comme-si-vous-%C3%A9tiez-au-cri pour plus de détails.
77 1 Florent Torregrosa
78 4 Julien Enselme
Néanmoins, ceci ne vous permet que d’avoir une console et pas de générer des clés.
79 4 Julien Enselme
80 4 Julien Enselme
C'est le programme puttygen (disponible "ici":http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) qui va s'en charger.
81 4 Julien Enselme
82 1 Florent Torregrosa
# Exécutez-le
83 1 Florent Torregrosa
# Cliquez sur _Generate_.
84 4 Julien Enselme
# Bouger la souris dans tous les sens (pour ajouter de l'entropie très difficile à obtenir avec une machine par nature déterministe).
85 4 Julien Enselme
# Sauvegardez votre clé publique et votre clé privée là où vous saurez les retrouver. Pensez à remplir le champ _comment_ avec quelque chose qui vous identifie (vote identifiant CAS par exemple). Cela permettra de distinguer les clés ssh sur le serveur. {{note(Donnez leur un nom qui vous permette de les distinguer. Par exemple, key pour votre clé privé et key.pub pour votre clé publique.)}}
86 1 Florent Torregrosa
{{important(Les clés générées par puttygen ne sont compatibles qu’avec putty)}}
87 1 Florent Torregrosa
88 1 Florent Torregrosa
Maintenant, vous devez placer ces clés sur le serveur. Pour cela :
89 4 Julien Enselme
90 4 Julien Enselme
# Connecter vous au serveur avec putty en entrant vote mot de passe
91 1 Florent Torregrosa
# Créer un dossier .ssh (s’il n’existe pas) <code>mkdir ~/.ssh</code>
92 1 Florent Torregrosa
# Ouvrez le fichier authorized_keys (ou créez le) : <code>nano -w ~/.ssh/authorized_keys</code>
93 4 Julien Enselme
# Copiez/Collez votre clé publique dedans *sur une seule ligne* avec le commentaire *à la fin* séparé *par une espace* du reste de la ligne.
94 1 Florent Torregrosa
# Sauvegardez
95 1 Florent Torregrosa
96 1 Florent Torregrosa
Ensuite, pour vous connecter au serveur à l’aide de ces clés avec le client putty :
97 4 Julien Enselme
98 1 Florent Torregrosa
# Ouvrez putty
99 1 Florent Torregrosa
# Dans Connexion > SSH > Auth, renseignez votre clé privée.
100 1 Florent Torregrosa
# Connectez vous au serveur comme d’habitude.
101 1 Florent Torregrosa
102 1 Florent Torregrosa
h2. Installer git
103 1 Florent Torregrosa
104 5 Julien Enselme
h3. git sous Linux
105 1 Florent Torregrosa
106 12 Julien Enselme
Git devrait être présent dans les dépôts de votre distribution. Installez-le comme un autre logiciel. Il existe de nombreuses interfaces graphiques tel que la très complète "cola-git":http://git-cola.github.io ou la moins développée "qgit":http://sourceforge.net/projects/qgit/.
107 1 Florent Torregrosa
108 5 Julien Enselme
h3. git sous Windows
109 1 Florent Torregrosa
110 6 Julien Enselme
{{Important(à reprendre en testant)}}
111 6 Julien Enselme
112 12 Julien Enselme
Il faut tout d’abord installer git. Téléchargez msysgit par "ici":http://code.google.com/p/msysgit/. Installez le avec les paramètres par défaut, _Use Git Bash only_, _Use OpenSSH_ et _Checkout Windows-style, commit Unix-style line endings_.
113 1 Florent Torregrosa
114 12 Julien Enselme
Vous avez alors un environnement qui vous permet d’utiliser git *en local* en ligne de commande via _Git bash_ ou en mode graphique via _Git GUI_.
115 1 Florent Torregrosa
116 12 Julien Enselme
Nous allons maintenant créer des clés ssh. Ces clés vont vous permettre d’utiliser git sur les serveurs de l’école. Vous pouvez passer cette étape et toutes celles concernant ssh pour une installation en local. Pour ce faire :
117 12 Julien Enselme
118 12 Julien Enselme
# Lancez _Git Bash_
119 12 Julien Enselme
# Tapez les commandes suivantes dans l’interpréteur (vous pouvez ajouter des .exe à la fin) :
120 12 Julien Enselme
121 12 Julien Enselme
 # Pour générer la clé : @ssh-keygen -C LOGIN@. Laissez les options par défaut.
122 12 Julien Enselme
 # Pour copier la clé sur le serveur : @cat ~/.ssh/id_rsa.pub | ssh LOGIN@sas1.ec-m.fr 'mkdir -m 700 -p ~/.ssh ; cat >> .ssh/authorized_keys'@
123 12 Julien Enselme
 # Tester que tout va bien avec : @ssh LOGIN@sas1.centrale-marseille.fr@. On ne vous demande pas votre mot de passe. Il est possible que vous ayez à entrer votre passphrase. Pour plus d’infos voir [[Utilisation_de_Git#ssh-sous-GNULinux-et-autres-Unix-BSD-MacOS-etc|utilisation de SSH sous Unix]]
124 12 Julien Enselme
125 12 Julien Enselme
{{important(Pensez à sauvegarder sur un support sécurisé le dossier .ssh. Il contient votre clé privée *à ne pas diffuser* et votre clé publique)}}
126 12 Julien Enselme
127 12 Julien Enselme
Afin de vous faciliter la vie, installez également TortoiseGit. C’est une interface à git grâce à laquelle vous pourrez utiliser git et vos clés ssh plus facilement. Téléchargez le logiciel (disponible en version 32 et 64 bits) "ici":http://code.google.com/p/tortoisegit/ et installez-le avec les options par défaut. Pour le configurer, faîtes un clic droit dans un dossier ou sur votre bureau, puis allez dans _TortoiseGit > Settings_. Entrez :
128 12 Julien Enselme
# Le chemin vers msysgit
129 12 Julien Enselme
# Dans l’onglet _Network_, entrez /bin/ssh.exe dans le champ _SSH client_
130 12 Julien Enselme
# Dans l’onglet _git_, entrez votre nom et votre adresse mail.
131 12 Julien Enselme
# Pour les *utilisateurs avancé* : sous l’onglet git, vous pouvez éditer votre .gitconfig directement.
132 12 Julien Enselme
# Enregistrez
133 12 Julien Enselme
134 1 Florent Torregrosa
Pour cloner un dépôt :
135 1 Florent Torregrosa
# Allez là où vous désirez le cloner
136 12 Julien Enselme
# Clique droit, puis _Git clone_
137 1 Florent Torregrosa
# Entrez le chemin du dépôt
138 12 Julien Enselme
# Cochez _Load Putty key_ et entrez le chemin de votre clé privé dans ce champ. **À vérifier**
139 1 Florent Torregrosa
# Vous êtes opérationnel.
140 1 Florent Torregrosa
141 12 Julien Enselme
h4. Liens complémentaires
142 12 Julien Enselme
143 1 Florent Torregrosa
* http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git/installer-et-configurer-git
144 1 Florent Torregrosa
* http://melusine.eu.org/syracuse/G/git-windows/
145 1 Florent Torregrosa
146 1 Florent Torregrosa
h2. Pour cloner le dépôt
147 1 Florent Torregrosa
148 1 Florent Torregrosa
# Placez-vous là où vous voullez cloner le dépôt
149 1 Florent Torregrosa
# Tapez : <code>git clone ssh://LOGIN@scm.centrale-marseille.fr/srv/git/PROJET/default.git .</code>
150 1 Florent Torregrosa
151 1 Florent Torregrosa
h2. Commandes basiques de git
152 1 Florent Torregrosa
153 1 Florent Torregrosa
* Pour récupérer les "nouveautés" : <code>git pull</code>
154 1 Florent Torregrosa
* Pour envoyer ses modifications : <code>git push</code>
155 1 Florent Torregrosa
{{important(*TOUJOURS* faire un pull et régler les éventuels conflits en local avant de faire un push)}}
156 1 Florent Torregrosa
* Pour ajouter un fichier au projet : <code>git add <le_fichier></code>
157 1 Florent Torregrosa
* Pour enregistrer les modifications : <code>git commit <le_fichier></code>
158 1 Florent Torregrosa
* Pour plus de détails : http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git
159 1 Florent Torregrosa
160 1 Florent Torregrosa
h2. Fonctionnalités à connaître et exemples d’utilisation
161 1 Florent Torregrosa
162 1 Florent Torregrosa
h3. Les branches
163 1 Florent Torregrosa
164 1 Florent Torregrosa
Les branches représentent l’une des fonctionnalités les plus puissantes de git. Par défaut toutes les modifications sont faites dans la branche _master_. C’est la branche principale de votre projet.
165 1 Florent Torregrosa
166 1 Florent Torregrosa
L’intérêt des branches est de pouvoir faire de grosses modifications en parallèle sans modifier le code principal. Par exemple, vous voulez implémenter une _super idée_. Mais _super idée_ va vous demander du temps de développement et de nombreuses modifications dans votre code. Il serait dommage de paralyser la correction de bug et les petites modifications le temps que _super idée_ soit terminée. C’est là que les branches interviennent : vous créez une nouvelle branche et tous les fichiers seront temporairement remplacés par ceux de cette branche.
167 1 Florent Torregrosa
168 1 Florent Torregrosa
Vous pouvez à tous moment réintégrer les modifications d’une branche dans _master_. Vous pouvez également abandonner une branche.
169 1 Florent Torregrosa
170 1 Florent Torregrosa
En somme, il devient intéressant de créer une nouvelle branche lorsque :
171 1 Florent Torregrosa
# La modification est longue
172 1 Florent Torregrosa
# La modification est compliquée
173 1 Florent Torregrosa
# L’implémentation de la modification reste un peu floue
174 1 Florent Torregrosa
175 1 Florent Torregrosa
Voici les commandes principales associées aux branches :
176 1 Florent Torregrosa
* Pour voir toutes vos branches locales, utilisez : <code>git branch</code>. La branche marquée d’une étoile est la branche courante.
177 1 Florent Torregrosa
* Pour créer une nouvelle branche : <code>git branch LE_NOM_DE_MA_BRANCHE</code>.
178 1 Florent Torregrosa
* Pour changer de branche : <code>git checkout LE_NOM_DE_MA_BRANCHE</code>
179 1 Florent Torregrosa
{{important(Vous devez avoir commité toutes vos modifications avant de changer de branche)}}
180 1 Florent Torregrosa
* Pour ajouter les changements dans _master_ : <code>git checkout master ; git merge LE_NOM_DE_MA_BRANCHE</code>
181 1 Florent Torregrosa
* Pour supprimer une branche : <code>git branch -d LE_NOM_DE_MA_BRANCHE</code>
182 1 Florent Torregrosa
{{note(Cette commande vérifie avant la suppression que les changements ont bien été ajoutés dans _master_. Pour supprimer une branche sans cette vérification, utilisez _git branch -D LE_NOM_DE_MA_BRANCHE_)}}
183 1 Florent Torregrosa
184 1 Florent Torregrosa
Il est évidemment possible de travailler à plusieurs sur une branche autre que master. Pour avoir la liste des branches connues par le serveur, utilisez <code>git branch -r</code>. Pour récupérer cette branche en local : <code>git branch --track NOM_BRANCHE_LOCAL origin/NOM_BRANCHE_SERVEUR</code>.
185 1 Florent Torregrosa
{{note(Lorsque vous faîtes un pull, seule la branche dans laquelle vous vous trouvez est synchronisée depuis le serveur)}}
186 1 Florent Torregrosa
187 1 Florent Torregrosa
Pour ajouter une nouvelle branche sur le serveur, utilisez : <code>git push origin origin:refs/heads/NOM_NOUVELLE_BRANCHE</code>. Vous pouvez ensuite suivre cette branche avec la commande précédente. Si vous avez tout d’abord créé votre branche en local et que vous désirez l’envoyer sur le serveur :
188 1 Florent Torregrosa
# Créez la branche sur le serveur
189 1 Florent Torregrosa
# Ouvrez .git/config
190 1 Florent Torregrosa
# Copiez la partie [branch "master"]
191 1 Florent Torregrosa
# Remplacez toutes les occurences de "master" par le nom de votre branche
192 1 Florent Torregrosa
# <code>git pull</code>
193 1 Florent Torregrosa
# <code>git push</code>
194 1 Florent Torregrosa
# Normalement, tout est à jour.
195 1 Florent Torregrosa
196 1 Florent Torregrosa
Pour supprimer une branche sur le serveur : <code>git push origin :heads/NOM_BRANCHE_A_SUPPRIMER</code>, puis <code>git branch -r -d origin/NOM_BRANCHE_A_SUPPRIMER</code> pour que la branche ne soit plus listée.
197 1 Florent Torregrosa
Plus d’infos "ici":http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git/travailler-avec-des-branches
198 1 Florent Torregrosa
199 1 Florent Torregrosa
h3. Les tags
200 1 Florent Torregrosa
201 1 Florent Torregrosa
Pour recherche une version plus facilement, vous pouvez tagger un commit avec <code>git tag NOMTAG IDCOMMIT</code>. Vous pourrez ensuite vous référer à ce commit à l’aide de NOMTAG.
202 1 Florent Torregrosa
203 1 Florent Torregrosa
{{note(Par défaut les tags ne sont pas envoyés lors d’un push. Utilisez _git push --tag_)}}
204 1 Florent Torregrosa
205 1 Florent Torregrosa
h3. La recherche
206 1 Florent Torregrosa
207 1 Florent Torregrosa
Grâce à la commande <code>git grep "PATTERN"</code>, vous pouvez recherche dans vos fichiers sources.
208 1 Florent Torregrosa
209 1 Florent Torregrosa
h3. Ignorer des fichiers
210 1 Florent Torregrosa
211 1 Florent Torregrosa
Si vous désirez que certains fichiers ne soient pas pris en compte par git (fichier de sauvegarde de votre éditeur de texte par exemple), créez un fichier .gitignore dans le dossier de votre dépôt. Ajoutez dans ce fichier le nom des fichiers à ignorer (1 par ligne).