Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
git:gitminimal [2014/03/19 18:52] – Ajout de gitignore Emmanuel Bruno | git:gitminimal [2023/09/20 18:52] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 13: | Ligne 13: | ||
< | < | ||
digraph centralized_git { | digraph centralized_git { | ||
- | node [shape = box]; | + | node [shape=box, style=" |
- | " | + | edge [fontsize=11; |
- | "Entrepôt d' | + | " |
+ | "Clone 2" -> "Entrepôt d' | ||
" | " | ||
" | " | ||
Ligne 31: | Ligne 32: | ||
==== Paramétrage de ssh ==== | ==== Paramétrage de ssh ==== | ||
Le contrôle d' | Le contrôle d' | ||
- | <cli> | + | |
+ | <konsole> | ||
+ | <nowiki> | ||
test@pc-bruno ~$ ssh-keygen | test@pc-bruno ~$ ssh-keygen | ||
Generating public/ | Generating public/ | ||
Ligne 53: | Ligne 56: | ||
| ..E + | | | ..E + | | ||
+-----------------+ | +-----------------+ | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
- | Si vous disposez d'un système de gestion des entrepôts (github, redmine, ...) votre clé **publique** peut maintenant être utilisée pour vous authentifier. Par exemple en l' | + | Si vous disposez d'un système de gestion des entrepôts (github, redmine, ...) votre clé **publique** peut maintenant être utilisée pour vous authentifier. Par exemple en l' |
- | ** Attention, des clés devront être disponibles sur toutes les machines que vous allez utiliser.** Il faut donc soit les copier (les deux), soit en générer pour chaque machine | + | ** Attention, des clés devront être disponibles sur toutes les machines que vous allez utiliser.** Il faut donc soit les copier (les deux), soit en générer pour chaque machine. |
==== Paramétrage de Git ==== | ==== Paramétrage de Git ==== | ||
Git a besoin au minimum de connaitre le nom et l' | Git a besoin au minimum de connaitre le nom et l' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno $ git config --global user.name | test@pc-bruno $ git config --global user.name | ||
test@pc-bruno $ git config --global user.email | test@pc-bruno $ git config --global user.email | ||
test@pc-bruno $ git config --global push.default simple | test@pc-bruno $ git config --global push.default simple | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
===== Utilisation de base ===== | ===== Utilisation de base ===== | ||
Ligne 73: | Ligne 79: | ||
Pour créer un entrepôt, on utilise la commande '' | Pour créer un entrepôt, on utilise la commande '' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno ~$ mkdir monProjet | test@pc-bruno ~$ mkdir monProjet | ||
test@pc-bruno ~$ cd monProjet/ | test@pc-bruno ~$ cd monProjet/ | ||
test@pc-bruno monProjet$ git init | test@pc-bruno monProjet$ git init | ||
Dépôt Git vide initialisé dans / | Dépôt Git vide initialisé dans / | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
Ici nous avons créé un répertoire vide mais il peut s'agit d'un répertoire déjà existant même si il a déjà du contenu. | Ici nous avons créé un répertoire vide mais il peut s'agit d'un répertoire déjà existant même si il a déjà du contenu. | ||
Ligne 84: | Ligne 92: | ||
Pour cloner un repository existant (dont on connait l' | Pour cloner un repository existant (dont on connait l' | ||
- | Par exemple, | + | Par exemple, |
+ | * en ssh pour un projet privé si votre clé à été ajoutée [[git@github.com:dptinfoutln/m120192020_helloworld.git]]. | ||
+ | * en http sinon [[https:// | ||
+ | |||
+ | <note important> | ||
Pour le cloner : | Pour le cloner : | ||
- | <cli> | + | <konsole> |
- | test@pc-bruno ~$ git clone ssh:// | + | < |
- | Clonage dans 'sandboxgit'... | + | /tmp ❯❯❯ |
- | remote: Counting objects: | + | Clonage dans 'sandboxm1'... |
- | remote: Compressing objects: 100% (14/14), done. | + | remote: Counting objects: |
- | remote: Total 22 (delta | + | remote: Compressing objects: 100% (7/7), done. |
- | Réception d' | + | remote: Total 17 (delta |
- | Résolution des deltas: 100% (2/2), done. | + | Réception d' |
Vérification de la connectivité... fait. | Vérification de la connectivité... fait. | ||
- | test@pc-bruno ~$ cd sandboxgit/ | + | /tmp ❯❯❯ |
- | </cli> | + | </nowiki> |
+ | </konsole> | ||
- | le répertoire '' | + | le répertoire '' |
- | Lors de la première connexion sur un serveur il est normal que ssh vous demande d' | + | Lors de la première connexion sur un serveur il est normal que ssh vous demande d' |
The authenticity of host ' | The authenticity of host ' | ||
RSA key fingerprint is 5f: | RSA key fingerprint is 5f: | ||
Ligne 114: | Ligne 127: | ||
Si la commande vous demande un mot de passe (et non la passphrase de votre clé) c'est que vous avez mal paramétré l' | Si la commande vous demande un mot de passe (et non la passphrase de votre clé) c'est que vous avez mal paramétré l' | ||
- | |||
- | Si vous n'avez pas les droits sur ce projet le serveur vous le dira : | ||
- | <cli> | ||
- | test@pc-bruno ~$ git clone ssh:// | ||
- | Clonage dans ' | ||
- | FATAL: R any sandboxscrumgit redmine_test DENIED by fallthru | ||
- | (or you mis-spelled the reponame) | ||
- | fatal: Could not read from remote repository. | ||
- | |||
- | Please make sure you have the correct access rights | ||
- | and the repository exists. | ||
- | </ | ||
Quand un entrepôt est créé avec la commande '' | Quand un entrepôt est créé avec la commande '' | ||
- | <cli> | + | <konsole> |
- | test@pc-bruno sandboxgit$ | + | < |
- | origin ssh:// | + | / |
- | origin ssh:// | + | origin git@github.com: |
- | </cli> | + | origin git@github.com: |
+ | </nowiki> | ||
+ | </ | ||
==== Commandes courantes ==== | ==== Commandes courantes ==== | ||
Ligne 143: | Ligne 146: | ||
L' | L' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno sandboxgit$ git status | test@pc-bruno sandboxgit$ git status | ||
Sur la branche master | Sur la branche master | ||
Ligne 179: | Ligne 183: | ||
rien à valider, la copie de travail est propre | rien à valider, la copie de travail est propre | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
A ce moment, les modifications sont validées mais locales. Il est possible de consulter le journal des modifications avec '' | A ce moment, les modifications sont validées mais locales. Il est possible de consulter le journal des modifications avec '' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno sandboxgit$ git log | test@pc-bruno sandboxgit$ git log | ||
commit af73a0bcec8c38076a86e6758cdb088ce520f485 | commit af73a0bcec8c38076a86e6758cdb088ce520f485 | ||
Ligne 197: | Ligne 203: | ||
dummy fixes #99 closes #99 | dummy fixes #99 closes #99 | ||
... | ... | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
On peut vérifier ce qui a changé à distance ('' | On peut vérifier ce qui a changé à distance ('' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno sandboxgit$ git remote update | test@pc-bruno sandboxgit$ git remote update | ||
Récupération de origin | Récupération de origin | ||
Ligne 209: | Ligne 217: | ||
rien à valider, la copie de travail est propre | rien à valider, la copie de travail est propre | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
Dans ce cas rien n'a changé, et l'on voit bien qu'il y a un commit à pousser. | Dans ce cas rien n'a changé, et l'on voit bien qu'il y a un commit à pousser. | ||
Ligne 215: | Ligne 224: | ||
Nous allons maintenant modifier le fichier '' | Nous allons maintenant modifier le fichier '' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno sandboxgit$ echo " | test@pc-bruno sandboxgit$ echo " | ||
test@pc-bruno sandboxgit$ git add test.txt | test@pc-bruno sandboxgit$ git add test.txt | ||
Ligne 239: | Ligne 249: | ||
To ssh:// | To ssh:// | ||
| | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
Ligne 252: | Ligne 263: | ||
==== Quels fichiers versionner ? ==== | ==== Quels fichiers versionner ? ==== | ||
Tous les fichiers ne doivent pas être déposé sur le système de gestion de version. | Tous les fichiers ne doivent pas être déposé sur le système de gestion de version. | ||
- | Les détails sont donnés ici : http:// | + | Les détails sont donnés ici : http:// |
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
Ligne 260: | Ligne 271: | ||
==== Naviguer dans l' | ==== Naviguer dans l' | ||
Comme nous l' | Comme nous l' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno sandboxgit$ git log | test@pc-bruno sandboxgit$ git log | ||
commit 53fa162ffda184e6fdf9fdaa93fc60ae8b24d58a | commit 53fa162ffda184e6fdf9fdaa93fc60ae8b24d58a | ||
Ligne 279: | Ligne 291: | ||
dummy fixes #99 closes #99 | dummy fixes #99 closes #99 | ||
... | ... | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
Nous voyons qu'à chaque commit est associé un haché (SHA-1), par exemple 53fa162ffda184e6fdf9fdaa93fc60ae8b24d58a pour le dernier commit. | Nous voyons qu'à chaque commit est associé un haché (SHA-1), par exemple 53fa162ffda184e6fdf9fdaa93fc60ae8b24d58a pour le dernier commit. | ||
Il est possible de voir ce qui s'est passé pour un commit donné : | Il est possible de voir ce qui s'est passé pour un commit donné : | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno sandboxgit$ git show 53fa162ffda184e6fdf9fdaa93fc60ae8b24d58a | test@pc-bruno sandboxgit$ git show 53fa162ffda184e6fdf9fdaa93fc60ae8b24d58a | ||
commit 53fa162ffda184e6fdf9fdaa93fc60ae8b24d58a | commit 53fa162ffda184e6fdf9fdaa93fc60ae8b24d58a | ||
Ligne 299: | Ligne 313: | ||
hello | hello | ||
+encore du texte | +encore du texte | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
A noter, qu'il est possible de n' | A noter, qu'il est possible de n' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno sandboxgit$ git log --abbrev-commit --pretty=oneline | test@pc-bruno sandboxgit$ git log --abbrev-commit --pretty=oneline | ||
53fa162 Ajout de précisions | 53fa162 Ajout de précisions | ||
af73a0b Création d'un fichier texte à mon nom | af73a0b Création d'un fichier texte à mon nom | ||
... | ... | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
Il est aussi possible de voir ce qui a changé entre deux commit avec la commande '' | Il est aussi possible de voir ce qui a changé entre deux commit avec la commande '' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno sandboxgit$ git diff af73a0b | test@pc-bruno sandboxgit$ git diff af73a0b | ||
diff --git a/test.txt b/test.txt | diff --git a/test.txt b/test.txt | ||
Ligne 320: | Ligne 338: | ||
hello | hello | ||
+encore du texte | +encore du texte | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
==== Traitement de base des conflits ==== | ==== Traitement de base des conflits ==== | ||
Ligne 329: | Ligne 348: | ||
Les commandes suivantes permettent de créer un entrepôt '' | Les commandes suivantes permettent de créer un entrepôt '' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno ~$ mkdir monProjetCentral && cd monProjetCentral && git --bare init | test@pc-bruno ~$ mkdir monProjetCentral && cd monProjetCentral && git --bare init | ||
Dépôt Git vide initialisé dans / | Dépôt Git vide initialisé dans / | ||
Ligne 345: | Ligne 365: | ||
origin / | origin / | ||
origin / | origin / | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
On notera qu'ici on a cloné un entrepôt local, il aurait pu être distant cela ne change rien. On notera aussi qu'il est possible de changer le nom du répertoire contenant le clone. Nous avons donc trois entrepôts : '' | On notera qu'ici on a cloné un entrepôt local, il aurait pu être distant cela ne change rien. On notera aussi qu'il est possible de changer le nom du répertoire contenant le clone. Nous avons donc trois entrepôts : '' | ||
Nous allons maintenant ajouter un fichier README dans '' | Nous allons maintenant ajouter un fichier README dans '' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno ~$ cd monProjet1/ | test@pc-bruno ~$ cd monProjet1/ | ||
test@pc-bruno monProjet1$ echo " | test@pc-bruno monProjet1$ echo " | ||
Ligne 363: | Ligne 385: | ||
To / | To / | ||
* [new branch] | * [new branch] | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
et mettre à jour '' | et mettre à jour '' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno monProjet1$ cd ../ | test@pc-bruno monProjet1$ cd ../ | ||
test@pc-bruno monProjet2$ git pull | test@pc-bruno monProjet2$ git pull | ||
Ligne 374: | Ligne 398: | ||
Depuis / | Depuis / | ||
* [nouvelle branche] master | * [nouvelle branche] master | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
Habituellement, | Habituellement, | ||
Par exemple, on modifie le fichier README dans monProjet1 et on pousse la modification : | Par exemple, on modifie le fichier README dans monProjet1 et on pousse la modification : | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno monProjet1$ echo "Modif depuis 1">> | test@pc-bruno monProjet1$ echo "Modif depuis 1">> | ||
[master 5cebb57] chgt depuis 1 | [master 5cebb57] chgt depuis 1 | ||
Ligne 388: | Ligne 414: | ||
To / | To / | ||
| | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
puis on modifie aussi README dans monProjet2 **sans avoir mis à jour** (donc sans faire de pull). | puis on modifie aussi README dans monProjet2 **sans avoir mis à jour** (donc sans faire de pull). | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno monProjet2$ echo "Modif depuis 2">> | test@pc-bruno monProjet2$ echo "Modif depuis 2">> | ||
test@pc-bruno monProjet2$ git commit -m "chgt depuis 2" && git push | test@pc-bruno monProjet2$ git commit -m "chgt depuis 2" && git push | ||
Ligne 404: | Ligne 432: | ||
astuce: (par exemple 'git pull ...') avant de pousser à nouveau. | astuce: (par exemple 'git pull ...') avant de pousser à nouveau. | ||
astuce: Voir la 'Note à propos des avances rapides' | astuce: Voir la 'Note à propos des avances rapides' | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
Nous avons modifié README à partir d'une version antérieure à celle sur le serveur et donc le push automatique n'est pas possible, il faut d' | Nous avons modifié README à partir d'une version antérieure à celle sur le serveur et donc le push automatique n'est pas possible, il faut d' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno monProjet2$ git pull | test@pc-bruno monProjet2$ git pull | ||
remote: Counting objects: 5, done. | remote: Counting objects: 5, done. | ||
Ligne 418: | Ligne 448: | ||
CONFLIT (contenu) : Conflit de fusion dans README | CONFLIT (contenu) : Conflit de fusion dans README | ||
La fusion automatique a échoué ; réglez les conflits et validez le résultat. | La fusion automatique a échoué ; réglez les conflits et validez le résultat. | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
Dans le cas le contenu du fichier en conflit est modifié par git pour indiquer les différences des versions : | Dans le cas le contenu du fichier en conflit est modifié par git pour indiquer les différences des versions : | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno monProjet2$ cat README | test@pc-bruno monProjet2$ cat README | ||
Hello | Hello | ||
Ligne 429: | Ligne 461: | ||
Modif depuis 1 | Modif depuis 1 | ||
>>>>>>> | >>>>>>> | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
Il faut éditer le fichier (ou utiliser un outils graphique de résolution de conflit) pour remettre le fichier dans un état cohérent c' | Il faut éditer le fichier (ou utiliser un outils graphique de résolution de conflit) pour remettre le fichier dans un état cohérent c' | ||
Ligne 435: | Ligne 468: | ||
Dans notre exemple, nous avons fusionné en utilisant un éditeurs de texte les modifications dans monProjet2. Puis il faut les valider, les pousser dans l' | Dans notre exemple, nous avons fusionné en utilisant un éditeurs de texte les modifications dans monProjet2. Puis il faut les valider, les pousser dans l' | ||
- | <cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno monProjet2$ git add README | test@pc-bruno monProjet2$ git add README | ||
test@pc-bruno monProjet2$ git commit -m " | test@pc-bruno monProjet2$ git commit -m " | ||
Ligne 449: | Ligne 483: | ||
To / | To / | ||
| | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
On peut alors éventuellement mettre à jour monProjet1. | On peut alors éventuellement mettre à jour monProjet1. | ||
- | </cli> | + | <konsole> |
+ | <nowiki> | ||
test@pc-bruno monProjet1$ git pull | test@pc-bruno monProjet1$ git pull | ||
remote: Counting objects: 10, done. | remote: Counting objects: 10, done. | ||
Ligne 464: | Ligne 500: | ||
| | ||
1 file changed, 2 insertions(+) | 1 file changed, 2 insertions(+) | ||
- | </cli> | + | </nowiki> |
+ | </ | ||
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
Ligne 471: | Ligne 508: | ||
{{tag> | {{tag> | ||
+ | |||
+ | ====== ScreenCast Git avec Redmine ====== | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Ce screencast présente la simplicité de la création et de l' | ||
+ | |||
+ | https:// | ||
+ | |||
+ | https:// | ||
+ | |||
+ | {{youtube> | ||
---- dataentry page ---- | ---- dataentry page ---- |