Projet

Général

Profil

Utilisation de Git » Historique » Version 3

Julien Enselme, 29/07/2013 21:04
Les clés ssh : clarifications sous linux + présentation de l'outil

1 1 Florent Torregrosa
h1. Utilisation de Git
2
3 2 Florent Torregrosa
{{>toc}}
4
5 1 Florent Torregrosa
Adresse du dépôt git : LOGIN@scm.centrale-marseille.fr:/srv/git/PROJET/default.git
6
7 3 Julien Enselme
Pour ajouter des utilisateurs au projet, il faut se rapprocher du CRI. Pour deux raisons :
8
9 1 Florent Torregrosa
* Les utilisateurs doivent être connus de Redmine
10
* Les utilisateurs doivent avoir les droits de commit. Ceci implique d’être dans le bon groupe Unix.
11
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
Pour avoir une présentation de git et quelques commandes de base : http://www.llaumgui.com/public/slides/git-github-social-codding/#/
15
16
h2. Les clés ssh
17
18 3 Julien Enselme
h3. Généralités
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
24
* une clé privée qu'il gardera précieusement
25
*une clé publique à placer sur le serveur.
26
27
Pour placer ladite clé sur le serveur, il faut (en général) s'y connecter par mot de passe.
28
29
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
31
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
33
h3. Sous GNU/Linux et autres Unix (*BSD, MacOS, etc.)
34
35
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
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
* id_rsa.pub (votre clé publique à transmettre).
41
42 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) :
43 1 Florent Torregrosa
44
* si la clé est dans votre compte:
45
46
 * <code>cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_key</code>
47
48
* si elle est sur votre machine perso, *au choix* :
49
50 3 Julien Enselme
 * <code>ssh-copy-id login@sas1.ec-m.fr</code> (recommandé)
51 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>
52 3 Julien Enselme
53
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.
54
55
Dans votre dossier _.ssh_, vous pouvez aussi créer un fichier _config_ pour, entre aute chose, créer un alias d'hôte ce qui vous évitera de taper par exemple _ssh NOM@sas1.centrale-marseille.fr_ mais juste _ssh NOM_ (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'hote distant.
56 1 Florent Torregrosa
57
h3. Sous windows
58
59
Installez un client ssh. Par exemple "ppty":http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html. 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.
60
61
Ceci vous permet d’avoir une console. Le programme puttygen (disponible "ici":http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) vous permet de générer une paire de clé.
62
# Exécutez-le
63
# Cliquez sur _Generate_.
64
# Bouger la souris dans tous les sens.
65
# 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. 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.)}}
66
{{important(Les clés générées par puttygen ne sont compatibles qu’avec putty)}}
67
68
Maintenant, vous devez placer ces clés sur le serveur. Pour cela :
69
# Connecter vous au serveur avec putty
70
# Créer un dossier .ssh (s’il n’existe pas) <code>mkdir ~/.ssh</code>
71
# Ouvrez le fichier authorized_keys (ou créez le) : <code>nano -w ~/.ssh/authorized_keys</code>
72
# Copiez/Collez votre clé publique dedans *sur une seule ligne*
73
# Sauvegardez
74
75
Ensuite, pour vous connecter au serveur à l’aide de ces clés avec le client putty :
76
# Ouvrez putty
77
# Dans Connexion > SSH > Auth, renseignez votre clé privée.
78
# Connectez vous au serveur comme d’habitude.
79
80
h2. Installer git
81
82
h3. Sous Linux
83
84
Git devrait être présent dans les dépôts de votre distribution. Installez-le comme un autre logiciel.
85
86
h3. Sous Windows
87
88
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.
89
90
Afin de vous faciliter la vie, installez également TortoiseGit. C’est une interface à git grâce à laquelle vous pourrez utiliser vos clés ssh plus facilement. Téléchargez le logiciel "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 le chemin vers msysgit comme demander puis sauvegardez.
91
92
Pour cloner un dépôt :
93
# Allez là où vous désirez le cloner
94
# Clique droit, puis clone
95
# Entrez le chemin du dépôt
96
# Cochez _Load Putty key_ et entrez le chemin de votre clé privé dans ce champ.
97
# Vous êtes opérationnel.
98
99
Liens complémentaires :
100
* http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git/installer-et-configurer-git
101
* http://melusine.eu.org/syracuse/G/git-windows/
102
103
h2. Pour cloner le dépôt
104
105
# Placez-vous là où vous voullez cloner le dépôt
106
# Tapez : <code>git clone ssh://LOGIN@scm.centrale-marseille.fr/srv/git/PROJET/default.git .</code>
107
108
h2. Commandes basiques de git
109
110
* Pour récupérer les "nouveautés" : <code>git pull</code>
111
* Pour envoyer ses modifications : <code>git push</code>
112
{{important(*TOUJOURS* faire un pull et régler les éventuels conflits en local avant de faire un push)}}
113
* Pour ajouter un fichier au projet : <code>git add <le_fichier></code>
114
* Pour enregistrer les modifications : <code>git commit <le_fichier></code>
115
* Pour plus de détails : http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git
116
117
h2. Fonctionnalités à connaître et exemples d’utilisation
118
119
h3. Les branches
120
121
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.
122
123
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.
124
125
Vous pouvez à tous moment réintégrer les modifications d’une branche dans _master_. Vous pouvez également abandonner une branche.
126
127
En somme, il devient intéressant de créer une nouvelle branche lorsque :
128
# La modification est longue
129
# La modification est compliquée
130
# L’implémentation de la modification reste un peu floue
131
132
Voici les commandes principales associées aux branches :
133
* Pour voir toutes vos branches locales, utilisez : <code>git branch</code>. La branche marquée d’une étoile est la branche courante.
134
* Pour créer une nouvelle branche : <code>git branch LE_NOM_DE_MA_BRANCHE</code>.
135
* Pour changer de branche : <code>git checkout LE_NOM_DE_MA_BRANCHE</code>
136
{{important(Vous devez avoir commité toutes vos modifications avant de changer de branche)}}
137
* Pour ajouter les changements dans _master_ : <code>git checkout master ; git merge LE_NOM_DE_MA_BRANCHE</code>
138
* Pour supprimer une branche : <code>git branch -d LE_NOM_DE_MA_BRANCHE</code>
139
{{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_)}}
140
141
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>.
142
{{note(Lorsque vous faîtes un pull, seule la branche dans laquelle vous vous trouvez est synchronisée depuis le serveur)}}
143
144
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 :
145
# Créez la branche sur le serveur
146
# Ouvrez .git/config
147
# Copiez la partie [branch "master"]
148
# Remplacez toutes les occurences de "master" par le nom de votre branche
149
# <code>git pull</code>
150
# <code>git push</code>
151
# Normalement, tout est à jour.
152
153
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.
154
Plus d’infos "ici":http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git/travailler-avec-des-branches
155
156
h3. Les tags
157
158
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.
159
160
{{note(Par défaut les tags ne sont pas envoyés lors d’un push. Utilisez _git push --tag_)}}
161
162
h3. La recherche
163
164
Grâce à la commande <code>git grep "PATTERN"</code>, vous pouvez recherche dans vos fichiers sources.
165
166
h3. Ignorer des fichiers
167
168
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).