« GIT Utilisation simple » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
(création)
 
(Première version complète)
 
Ligne 45 : Ligne 45 :


== Accès sur un client ==
== Accès sur un client ==
=== Clonage d'un repo du serveur ===
Chez le client je peux créer un dépôt local dans lequel je vais travailler par:<syntaxhighlight lang="bash">
Chez le client je peux créer un dépôt local dans lequel je vais travailler par:<syntaxhighlight lang="bash">
cd sources # par exemple je mets mes sources là!
cd sources # par exemple je mets mes sources là!
Ligne 76 : Ligne 79 :
drwxrwxr-x 7 moi users 4096 Jan  4 22:04 .git
drwxrwxr-x 7 moi users 4096 Jan  4 22:04 .git
</syntaxhighlight>Comme dit dans le laïus ci-dessus le repo étant vide le répertoire est vide. Sauf le répertoire .git est là. Il est utilisé pour stocker tout ce que l'on va faire sur notre code source.
</syntaxhighlight>Comme dit dans le laïus ci-dessus le repo étant vide le répertoire est vide. Sauf le répertoire .git est là. Il est utilisé pour stocker tout ce que l'on va faire sur notre code source.
=== Ajout d'un fichier. ===
Pour ajouter un fichier on crée simplement un fichier dans le répertoire racine du dépôt.<syntaxhighlight lang="bash">
cd $HOME/sources/sample
cat > README.MD
# Examples
Ce repo va contenir des exemples d'utilisation de GIT
## Cmlient simple
Comment acceder depuis un client simple
## Comment lier a un autre serveur
</syntaxhighlight>On termine par un <code><ctrl></code> + <code>D</code>.
Si on fait un <code>ls</code> on a bien le fichier <code>README.MD</code>.
Il faut ensuite l'ajouter dans le dépôt. Sinon il restera un fichier ''local''.<syntaxhighlight lang="bash">
git add README.MD
</syntaxhighlight>Il est maintenant référencé dans le dépot. Cependant son contenu n'est pas pris en compte. Pour cela il faut valider (commit) son contenu. Il est obligatoire de donner un message qui décrit ce que l'on a fait sur le dépôit.<syntaxhighlight lang="bash">
git commit -m "version initiale"
</syntaxhighlight>Qui, la toute première fois, nous dit que le dépôt n'en sait pas assez sur nous!<syntaxhighlight lang="text">
Author identity unknown
*** Please tell me who you are.
Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'moi@mamachine.(none)')
</syntaxhighlight>On va sagement faire ce que git nous demande:<syntaxhighlight lang="bash">
git config --global user.email "moi@mondomaine.com"
git config --global user.name "John DOE"
</syntaxhighlight>On refait le <code>git commit -m "version initiale"</code>
Et on a alors le message :<syntaxhighlight lang="text">
[master (root-commit) ca00b3c] version initiale
1 file changed, 5 insertions(+)
create mode 100644 README.MD
</syntaxhighlight>Avec :<syntaxhighlight lang="bash">
git log
</syntaxhighlight>On a les logs de tout ce qui viens de se passer:<syntaxhighlight lang="text">
commit ca00b3c97078b62071769686978621ae9aab30ee (HEAD -> master)
Author: John DOE <moi@mondomaine.com>
Date:  Sun Jan 4 22:35:20 2026 +0100
    version initiale
</syntaxhighlight>On va le pusher sur le serveur:<syntaxhighlight lang="bash">
git push
</syntaxhighlight>La version courante chez nous est alors sur le serveur.
Si je modifie le fichier en local avec un <code>vi README.MD</code> pour corriger une ligne.
On le change<syntaxhighlight lang="text">
# Examples
Ce repo va contenir des exemples d'utilisation de GIT
## Client simple
Comment accéder depuis un client simple
## Comment lier a un autre serveur
</syntaxhighlight>et on ''commite'' de nouveau<syntaxhighlight lang="bash">
git add .
git commit -m "Nouvelle version"
</syntaxhighlight>QU nous réponds:<syntaxhighlight lang="text">
[master cb11e38] Nouvelle version
1 file changed, 1 insertion(+), 1 deletion(-)
</syntaxhighlight>Si je fais un <code>git log</code>:<syntaxhighlight lang="text">
commit cb11e388e49b5f9efd0f4f249bdd01edee5900e9 (HEAD -> master)
Author: John DOE <moi@mondomaine>
Date:  Sun Jan 4 22:47:34 2026 +0100
    Nouvelle version
commit ca00b3c97078b62071769686978621ae9aab30ee (origin/master)
Author: John DOE <moi@mondomaine>
Date:  Sun Jan 4 22:35:20 2026 +0100
    version initiale
</syntaxhighlight>C'est très intéressent.
On a deux versions. La version <code>ca00b3c....</code> (celle commitée la première fois) est sur le serveur (origin/master) et la <code>cb11e38...</code> qui est en local (HEAD -> master).
* '''<code>origin/master</code>''' veut dire la branche <code>master</code> sur le dépôt <code>origin</code>. Origin est le dépôt par défaut crée par le <code>git clone</code>. C'est là que l'on applique les push/pull si on n'en précise pas un autre.
* '''<code>HEAD -> master</code>''' signifie la tête (le haut) de la branche <code>master</code> en local.
On remarque aussi que le commentaire transmis avec le <code>-m</code> apparait dans les logs.
Si on refait un <code>git push</code>, le <code>git log</code> représentera alors :<syntaxhighlight lang="text">
commit cb11e388e49b5f9efd0f4f249bdd01edee5900e9 (HEAD -> master, origin/master)
Author: John DOE <moi@mondomaine>
Date:  Sun Jan 4 22:47:34 2026 +0100
    Nouvelle version
commit ca00b3c97078b62071769686978621ae9aab30ee
Author: JJohn DOE <moi@mondomaine>
Date:  Sun Jan 4 22:35:20 2026 +0100
    version initiale
</syntaxhighlight>C'est bien la version <code>cb11e38...</code> qui est référencée à la fois en local <code>HEAD -> master</code> qu'en distant <code>origin/master</code>.

Version actuelle datée du 4 janvier 2026 à 22:02

Cette page indique comment utiliser GIT simplement.

Attention ici je vais parler de client et de serveurs mais GIT n'est pas vraiment organisé comme cela. Git est pas nature distribué. On peut faire des dépôts git ou on veut et on peut faire un "push" ou un "pull" vers ou depuis n'importe que autre dépôt.

Le concept de serveur est juste une machine qui contiendra un dépôt commun sur lequel d'autres machines pourront référencer leur dépôts. Mais un dépôt git peu faire des "push" ou "pull" vers ou depuis de multiples autres dépôts. Un développeur peut faire un push dans le dépôt d'un autre développeur. Une équipe peut avoir un dépôt à elle avec de multiples développeurs dessus et le push global sera fait depuis le dépôt de cette équipe. La notion de branche est plus adaptée à ce principe mais tout est possible.

Création d'un dépôt sur le serveur

On va parti du principe que l'on a un serveur qui contiendra les dépôts de références. Les autres seront des clients.

Donc sur le serveur on va créer un dépôt "brut". Il ne contiendra que les diverses versions de son contenu. Il ne sera jamais utilisé pour visualiser/éditer le contenu.

Utilisateur git.

Sur le serveur on va créer un user git dans lequel on stockera les repository. (on pourrait en créer d'autres si on veut gérer des droits plus fins).

sudo adduser git
su - git
Password: <le mote de passe>
mkdir repo
cd repo

on a crée le repository racine de notre instance de git!

Création d'un repository

git init --bare sample.git

--bare signifie que l'on veut un dépôt "brut". le nom des repository "bare" sont par convention terminé par un .git mais ce n'est pas une aubligation. Ma version m'averti que la branche par défaut est "master" mais que je peux la changer.

hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint:   git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:   git branch -m <name>
Initialized empty Git repository in /home/jpinon/repo/sample.git/

De mon côté "master" me va très bien. Je ne changes rien!

Suppression d'un repository

Le répertoire .git est autoporteur. Pour supprimer le repository on utilise donc la commande:

cd $HOME/repo
rm -rf sample.git

Attention ce n'est pas réversible!

Accès sur un client

Clonage d'un repo du serveur

Chez le client je peux créer un dépôt local dans lequel je vais travailler par:

cd sources # par exemple je mets mes sources là!
git clone git@git:repo/sample.git

Le premier git (avant le @) est le user et le second est le serveur. Ca nous demande le mot de passe (si on n'a pas configuré de clé ssh) et ça nous indique que tout s'est bien passé.

Cloning into 'sample'...
git@git's password:
warning: You appear to have cloned an empty repository.
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint:   git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:   git branch -m <name>

Ca nous refait le laïus sur la branche par défaut. Comme je l'ai pas changé sur le serveur on peut l'ignorer ici.

Ca nous crée un répertoire sample.

un simple :

ls -al sample

Nous donne:

total 12
drwxrwxr-x 3 moi users 4096 Jan  4 22:04 .
drwxrwxr-x 5 moi users 4096 Jan  4 22:04 ..
drwxrwxr-x 7 moi users 4096 Jan  4 22:04 .git

Comme dit dans le laïus ci-dessus le repo étant vide le répertoire est vide. Sauf le répertoire .git est là. Il est utilisé pour stocker tout ce que l'on va faire sur notre code source.

Ajout d'un fichier.

Pour ajouter un fichier on crée simplement un fichier dans le répertoire racine du dépôt.

cd $HOME/sources/sample
cat > README.MD
# Examples
Ce repo va contenir des exemples d'utilisation de GIT
## Cmlient simple
Comment acceder depuis un client simple
## Comment lier a un autre serveur

On termine par un <ctrl> + D.

Si on fait un ls on a bien le fichier README.MD.

Il faut ensuite l'ajouter dans le dépôt. Sinon il restera un fichier local.

git add README.MD

Il est maintenant référencé dans le dépot. Cependant son contenu n'est pas pris en compte. Pour cela il faut valider (commit) son contenu. Il est obligatoire de donner un message qui décrit ce que l'on a fait sur le dépôit.

git commit -m "version initiale"

Qui, la toute première fois, nous dit que le dépôt n'en sait pas assez sur nous!

Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'moi@mamachine.(none)')

On va sagement faire ce que git nous demande:

git config --global user.email "moi@mondomaine.com"
git config --global user.name "John DOE"

On refait le git commit -m "version initiale" Et on a alors le message :

[master (root-commit) ca00b3c] version initiale
 1 file changed, 5 insertions(+)
 create mode 100644 README.MD

Avec :

git log

On a les logs de tout ce qui viens de se passer:

commit ca00b3c97078b62071769686978621ae9aab30ee (HEAD -> master)
Author: John DOE <moi@mondomaine.com>
Date:   Sun Jan 4 22:35:20 2026 +0100

    version initiale

On va le pusher sur le serveur:

git push

La version courante chez nous est alors sur le serveur.

Si je modifie le fichier en local avec un vi README.MD pour corriger une ligne.

On le change

# Examples
Ce repo va contenir des exemples d'utilisation de GIT
## Client simple
Comment accéder depuis un client simple
## Comment lier a un autre serveur

et on commite de nouveau

git add .
git commit -m "Nouvelle version"

QU nous réponds:

[master cb11e38] Nouvelle version
 1 file changed, 1 insertion(+), 1 deletion(-)

Si je fais un git log:

commit cb11e388e49b5f9efd0f4f249bdd01edee5900e9 (HEAD -> master)
Author: John DOE <moi@mondomaine>
Date:   Sun Jan 4 22:47:34 2026 +0100

    Nouvelle version

commit ca00b3c97078b62071769686978621ae9aab30ee (origin/master)
Author: John DOE <moi@mondomaine>
Date:   Sun Jan 4 22:35:20 2026 +0100

    version initiale

C'est très intéressent.

On a deux versions. La version ca00b3c.... (celle commitée la première fois) est sur le serveur (origin/master) et la cb11e38... qui est en local (HEAD -> master).

  • origin/master veut dire la branche master sur le dépôt origin. Origin est le dépôt par défaut crée par le git clone. C'est là que l'on applique les push/pull si on n'en précise pas un autre.
  • HEAD -> master signifie la tête (le haut) de la branche master en local.

On remarque aussi que le commentaire transmis avec le -m apparait dans les logs.

Si on refait un git push, le git log représentera alors :

commit cb11e388e49b5f9efd0f4f249bdd01edee5900e9 (HEAD -> master, origin/master)
Author: John DOE <moi@mondomaine>
Date:   Sun Jan 4 22:47:34 2026 +0100

    Nouvelle version

commit ca00b3c97078b62071769686978621ae9aab30ee
Author: JJohn DOE <moi@mondomaine>
Date:   Sun Jan 4 22:35:20 2026 +0100

    version initiale

C'est bien la version cb11e38... qui est référencée à la fois en local HEAD -> master qu'en distant origin/master.