Différences entre les versions de « Aide mémoire d'Arthur pour l'utilisation de Git »

De Wikip
m (1 version importée)
m (1 version importée)
 
(3 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 7 : Ligne 7 :
{{fig|Diagramme de flux de git|gitFlowDiagram.svg||10cm}}
{{fig|Diagramme de flux de git|gitFlowDiagram.svg||10cm}}
}}
}}
 
== Le problème des gros fichiers  ==
== Las variables ==
=== Git Push Fails - fatal: The remote end hung up unexpectedly ===
{{parW|1=
l'un des solution est de faire des {{mmm|push}} par commits successifs :
{{code|lang=bash|code=
git log # or 'gslg' or 'glg'
# git push origin sha:remote-branch
# example :
git push origin 84143f1:master
}}
}}
=== Git Large File Storage (LFS) - Le stockage des gros fichiers  ===
{{parW|1=
{{parW|1=
;{{m|<rem…>}} remote
{{m|{{dq|Large File Storage}}}} pour Git est une extension permettant d'indexer des fichiers volumineux à un référentiel Git, en stockant ces fichiers sur des espaces spécifiques.
:distant, une base git distante, sur une autre machine
{{code|lang=bash|code=
;{{m|<loc…>}} local
apt install git-lfs
:local, une base git locale, sur la machine utilisée
git lfs install
;{{m|<dep…>}} depository
:depository (repository ne sera pas utilisé pour ne pas confondre avec repertoire)
;{{m|<wrk…>}} work
:work, de travail, ce qui correspond en général au répertoire de travail
;{{m|<…Url>}} url
:uniform resource locator, adresse web d'une base git
;{{m|<…Dir>}} {{m|<…Rep>}}  directory
:répertoire physique sur le disque dur.
;{{m|<…ParentDir>}} {{m|<…ParentRep>}} parent directory
:répertoire parent sur le disque dur.
;{{m|<…GitName…>}}
:nom de la base git
}}
}}
{{Ex|
Exemples de <remGitNameUrl> :


  atoross@claumep1:/home/var/git/loco
Traiter/suivre certains fichier
file:///home/atoross/dvlp/gitTests/remGitBase
{{code|lang=bash|code=
https://anomnymous@git.salome-platform.org/gitpub/modules/med.git
git lfs track "*.iso"
git add .gitattributes # les informations précédentes sont stockées dans .gitattributes
}}
}}


== Les différentes espaces de Git ==
* [https://medium.com/slickteam/pourquoi-et-comment-utiliser-git-lfs-771bcda478d0  Pourquoi et comment utiliser Git LFS ?]
* [https://manpages.debian.org/unstable/git-lfs/git-lfs.1.en.html debian man]
}}
=== Ajout au suivi du contenu d'un répertoire  ===
{{parW|1=
{{parW|1=
{{code|lang=text|code=
{{code|lang=bash|code=
stash        wrkDir        stgArea        locDep        remDep
$ git lfs track "assets/*"
}}
}}
}}
=== stash ===
{{parW|1=L'espace {{m|stash}} ({{mm|stash}}) (cachette) est une espace de stockage temporaire des données qui ne sont pas encore enregistrées (not commited); c'est une sauvegarde de l'espace {{m|staging area}}.
* [http://git-scm.com/book/en/Git-Tools-Stashing it Tools - Stashing]
}}
}}
=== staging area - index ===
=== Ajout au suivi toute l'arborescence du contenu d'un répertoire  ===
{{parW|1=L'espace {{m|staging area}} ({{mm|stgArea}}) est une espace de stockage des données qui ne sont pas encore enregistrées (not commited).
{{parW|1=
{{code|lang=bash|code=
$ git lfs track "assets/**/*"
}}
}}
=== working directory ===
{{parW|1=L'espace {{m|working directory}} ({{mm|wrkDir}}) est un répertoire sur un système de fichier qui contient les fichiers de travails. Tous les fichiers et sous répertoires ne sont pas forcément versionnés.
}}
}}
=== local depository ===
=== Ajout au suivi un fichier particulier  ===
{{parW|1=L'espace {{m|local depository}} ({{mm|locDep}}) est une espace de stockage des données versionnées, une base de données git, qui se trouve dans le répertoire nommé {{mm|.git}} qui lui même est dans le répertoire racine de {{m|working directory}}. Ces données sont enregistrées (commited).
{{parW|1=
{{code|lang=bash|code=
$ git lfs track "path/to/file.example"
}}
}}
=== remote depository ===
{{parW|1=L'espace {{m|remote depository}} ({{mm|remDep}}) est une espace de stockage des données versionnées, une base de données git, qui n'est pas le répertoire nommé {{mm|.git}} de {{m|working directory}}. Il est soit sur le même système de fichier ou sur une autre machines. Ces données sont enregistrées (commited and pushed). Un espace ({{mm|locDep}} peut avoir plusieurs ({{mm|remDep}}.
}}
}}
 
=== Ajout au suivi un type de fichiers  ===
== Configuration ==
{{parW|1=
{{code|lang=bash|code=
$ git lfs track "*.tar.gz"
}}
}}
=== Liens ===
{{parW|1=
{{parW|1=
*{{mm|git config}}
* [https://medium.com/@sangeethkumar.tvm.kpm/cleaning-up-a-git-repo-for-reducing-the-repository-size-d11fa496ba48 Cleaning up a git repo for reducing the repository size]
:*{{mm|--system}}
* [https://medium.com/slickteam/pourquoi-et-comment-utiliser-git-lfs-771bcda478d0 Pourquoi et comment utiliser Git LFS ?]
:: ⟼ {{mm|/etc/gitconfig}}
* [https://git-lfs.com/ Git Large File Storage (LFS)]
::Pour tous les utilisateurs
:*{{mm|--global}}
:: ⟼ {{mm|~/.gitconfig}}
::Pour l'utilsateur courant
:*{{mm|{{cadreG|}}}}
:: ⟼ {{mm|<locGitNameRep>/.git/config}}
::Seuelement pour la base locale (quand on est dans <locGitNameRep>)
}}
}}
=== system ===
 
==== Certificat auto-certifié ====
== Las variables ==
{{parW|1=
{{parW|1=
Solution 1 :
;{{m|<rem…>}} remote
<source lang="bash">
:distant, une base git distante, sur une autre machine
su -
;{{m|<loc…>}} local
git config --system http.sslVerify false
:local, une base git locale, sur la machine utilisée
</source>
;{{m|<dep…>}} depository
Solution 2 :
:depository (repository ne sera pas utilisé pour ne pas confondre avec repertoire)
<source lang="bash">
;{{m|<wrk…>}} work
export GIT_SSL_NO_VERIFY=true
:work, de travail, ce qui correspond en général au répertoire de travail
</source>
;{{m|<…Url>}} url
:uniform resource locator, adresse web d'une base git
;{{m|<…Dir>}} {{m|<…Rep>}}  directory
:répertoire physique sur le disque dur.
;{{m|<…ParentDir>}} {{m|<…ParentRep>}} parent directory
:répertoire parent sur le disque dur.
;{{m|<…GitName…>}}
:nom de la base git
}}
}}
=== global ===
{{Ex|
==== Identification de l'utilisateur ====
Exemples de <remGitNameUrl> :
{{parW|1=
 
<source lang="bash">
atoross@claumep1:/home/var/git/loco
git config --global user.name "Arthur TOROSSIAN"
file:///home/atoross/dvlp/gitTests/remGitBase
git config --global user.email "arthur.torossian@edf.fr"
https://anomnymous@git.salome-platform.org/gitpub/modules/med.git
</source>
}}
}}
==== Exemple de fichier config ====
 
== Les différentes espaces de Git ==
{{parW|1=
{{parW|1=
<source lang="bash">
{{code|lang=text|code=
more ~/.gitconfig
stash        wrkDir        stgArea        locDep        remDep
</source>
}}
}}
=== stash ===
{{parW|1=L'espace {{m|stash}} ({{mm|stash}}) (cachette) est une espace de stockage temporaire des données qui ne sont pas encore enregistrées (not commited); c'est une sauvegarde de l'espace {{m|staging area}}.
* [http://git-scm.com/book/en/Git-Tools-Stashing it Tools - Stashing]
}}
=== staging area - index ===
{{parW|1=L'espace {{m|staging area}} ({{mm|stgArea}}) est une espace de stockage des données qui ne sont pas encore enregistrées (not commited).
}}
}}
{{parW|1=
 
<source lang="ini">
=== working directory ===
[http]
{{parW|1=L'espace {{m|working directory}} ({{mm|wrkDir}}) est un répertoire sur un système de fichier qui contient les fichiers de travails. Tous les fichiers et sous répertoires ne sont pas forcément versionnés.
        sslVerify = false
}}
[user]
=== local depository ===
        name = Arthur Torossian
{{parW|1=L'espace {{m|local depository}} ({{mm|locDep}}) est une espace de stockage des données versionnées, une base de données git, qui se trouve dans le répertoire nommé {{mm|.git}} qui lui même est dans le répertoire racine de {{m|working directory}}. Ces données sont enregistrées (commited).
        email = arthur.torossian@edf.fr
}}
[credential "https://at.bht.fr"]
=== remote depository ===
        provider = generic
{{parW|1=L'espace {{m|remote depository}} ({{mm|remDep}}) est une espace de stockage des données versionnées, une base de données git, qui n'est pas le répertoire nommé {{mm|.git}} de {{m|working directory}}. Il est soit sur le même système de fichier ou sur une autre machines. Ces données sont enregistrées (commited and pushed). Un espace ({{mm|locDep}} peut avoir plusieurs ({{mm|remDep}}.
[credential "http://pac-ad-edf.proxy.edf.fr:3131"]
        provider = generic
[credential "https://git.forge.pleiade.edf.fr"]
        provider = generic
[core]
        excludesfile = C:/Users/C07138/.gitignore_global
        ignorecase = true
        attributesfile = C:/Users/C07138/.gitattributes_global
        whitespace = cr-at-eol
        autocrlf = false
        blank-at-eof = false
</source>
}}
}}


==== Las attributs .gitattributes ====
== Configuration ==
=== fichier  ===
==== Longueur du chemain fichier trop long ====
{{parW|1=
{{parW|1=
{{code|lang=bash|code=
{{code|lang=bash|code=
git config --global core.attributesfile ~/.gitattributes_global
git config --global core.longpaths true
}}
}}
Contenu possible :
}}
{{code|lang=text|code=
=== Hosts ===
#* text=auto # see autocrlf = false
{{parW|1=
{{m|{{mm|/etc/hosts}}}} n'est pas utilisé mais c'est {{m|{{mm|/c/Windows/System32/drivers/etc/hosts}} }} qui est utilisé.
{{code|lang=hosts|code=
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97    rhino.acme.com          # source server
#      38.25.63.10    x.acme.com              # x client host
 
# localhost name resolution is handled within DNS itself.
#      127.0.0.1      localhost
#       ::1            localhost
192.168.20.108  hdedibox3
192.168.20.100 compaqmini
}}
}}
}}
}}
==== Ignorer les fichiers .gitignore ====
=== L'essentiel ===
{{parW|1=
{{parW|1=
Ajouter le ~/.gitignore_global aux fichiers exclus en tapant, {{m|y compris sous WINDOWS}}:
*{{mm|git config}}
:*{{mm|--system}}
:: ⟼ {{mm|/etc/gitconfig}}
::Pour tous les utilisateurs
:*{{mm|--global}}
:: ⟼ {{mm|~/.gitconfig}}
::Pour l'utilsateur courant
:*{{mm|{{cadreG|}}}}
:: ⟼ {{mm|<locGitNameRep>/.git/config}}
::Seuelement pour la base locale (quand on est dans <locGitNameRep>)
Voir ses paramètres :
{{code|lang=bash|code=
git config --list
}}
ou
{{code|lang=bash|code=
git config core.autocrlf
}}
 
}}
=== system : {{m|1=/etc/git…}} ===
==== Certificat auto-certifié ====
{{parW|1=
Solution 1 :
<source lang="bash">
<source lang="bash">
git config --global core.excludesfile ~/.gitignore_global
su -
git config --system http.sslVerify false
</source>
</source>
Rendre la configuration non sensible à la casse :
Solution 2 :
<source lang="bash">
<source lang="bash">
git config --global core.ignorecase true
export GIT_SSL_NO_VERIFY=true  
</source>
</source>
cette option se retrouve alors dans le fichier {{mm|wrkDir/.git/config}}
}}
Pour un répertoire spécifique, créer ce fichier nommé {{mm|.gitignore}} dans le répertoire à filtrer (en général la racine qui est {{mm|wrkDir}}) en le complétant par :
==== Editer le contenu de la configuration au niveau du system ====
<source lang="text">
{{parW|1=
.gitignore
{{code|lang=bash|code=
.project
git config --system --edit # /etc/gitconfig
.pydevproject
}}
.settings
ce qui peut donner sous windows à ({{mm|/etc/gitconfig}}) :
noPull
{{code|lang=cfg|code=
noPush
[diff "astextplain"]
*chenal3.cfg*
        textconv = astextplain
modAtTool
[filter "lfs"]
        clean = git-lfs clean -- %f
        smudge = git-lfs smudge -- %f
        process = git-lfs filter-process
        required = true
[http]
        sslBackend = openssl
        sslCAInfo = C:/pf/git/mingw64/ssl/certs/ca-bundle.crt
        sslVerify = false
[core]
        fscache = false
        symlinks = false
[pull]
        rebase = true
[credential]
        helper = manager-core
[credential "https://dev.azure.com"]
        useHttpPath = true
[init]
        defaultBranch = master
}}
old:
{{code|lang=cfg|code=
[diff "astextplain"]
        textconv = astextplain
[filter "lfs"]
        clean = git-lfs clean -- %f
        smudge = git-lfs smudge -- %f
        process = git-lfs filter-process
        required = true
[http]
        sslBackend = openssl
        sslCAInfo = C:/pf/git/mingw64/ssl/certs/ca-bundle.crt
        sslVerify = false
[core]
        autocrlf = true
        fscache = true
        symlinks = false
[pull]
        rebase = true
[credential]
        helper = manager-core
[credential "https://dev.azure.com"]
        useHttpPath = true
[init]
        defaultBranch = master
[diff]
        tool = diff -Bb
}}
}}


# My generated #
=== global : {{m|1=~/.git…}} ===
###################
==== Identification de l'utilisateur ====
tmp*
{{parW|1=
gen*
<source lang="bash">
external*
git config --global user.name "Arthur TOROSSIAN"
*generated*
git config --global user.email "arthur.torossian@edf.fr"
*Copie*
</source>
*Copy*
}}
*.puml
==== Exemple de fichier config ====
*PlantUml.png
{{parW|1=
 
{{code|lang=bash|code=
# Editor generted #
git config --edit --global # ~/.gitconfig 
###################
}}
*~
{{code|lang=ini|code=
*bak
[http]
*back.py
        sslVerify = false
[user]
        name = Arthur Torossian
        email = arthur.torossian@edf.fr
[credential "https://at.bht.fr"]
        provider = generic
[credential "http://pac-ad-edf.proxy.edf.fr:3131"]
        provider = generic
[credential "https://git.forge.pleiade.edf.fr"]
        provider = generic
[core]
        attributesfile = C:/Users/C07138/.gitattributes_global
        excludesfile = C:/Users/C07138/.gitignore_global
        ignorecase = true
        attributesfile = C:/Users/C07138/.gitattributes_global
        whitespace = trailing-space,-space-before-tab,indent-with-non-tab,cr-at-eol
        blank-at-eof = false
}}
}}


# Compiled source #
{{parW|1=
###################
Old:
*.com
{{code|lang=ini|code=
*.class
[http]
*.dll
        sslVerify = false
*.exe
[user]
*.o
        name = Arthur Torossian
*.so
        email = arthur.torossian@edf.fr
*.pyc
[credential "https://at.bht.fr"]
        provider = generic
[credential "http://pac-ad-edf.proxy.edf.fr:3131"]
        provider = generic
[credential "https://git.forge.pleiade.edf.fr"]
        provider = generic
[core]
        excludesfile = C:/Users/C07138/.gitignore_global
        ignorecase = true
        attributesfile = C:/Users/C07138/.gitattributes_global
        whitespace = trailing-space,-space-before-tab,indent-with-non-tab,cr-at-eol
        blank-at-eof = false
}}
}}


# Packages #
==== Las attributs .gitattributes - fin de ligne CR LF CRLF LFCR line endings ====
############
{{parW|1=
# it's better to unpack these files and commit the raw source
Pour régler les problèmes d'espace, de tabulation ou de code de fin de ligne des fichiers textes il faut ajouter la configuration des attributs des formats des fichiers (voir ci-après) et configurer les deux variables suivantes localement comme ici ou globalement :
# git has its own built in compression methods
{{code|lang=bash|code=
*.7z
git config core.eol lf
*.dmg
git config core.autocrlf input
*.gz
}}
*.iso
{{CadreR|1=Si des fichiers sont marqués modifiés pour les problèmes d'espaces et de fin de lignes alors il
*.jar
faut les ajouter et commiter, après quoi le bonne configuration se mettront en place :
*.rar
{{code|lang=bash|code=
*.tar
git add -u
*.zip
git commit -m "nomralisation eof whitespace"
}}
}}
 
voir :
* [https://stackoverflow.com/questions/9976986/force-lf-eol-in-git-repo-and-working-copy Force LF eol in git repo and working copy]
* [https://git-scm.com/book/en/v2 Pro Git book 2nd Edition (2014)]
* [https://docs.github.com/fr/get-started/getting-started-with-git/configuring-git-to-handle-line-endings#refreshing-a-repository-after-changing-line-endings Configuration de Git pour traiter les fins de ligne]
* [https://git-scm.com/docs/gitattributes gitattributes]
* [https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes 8.2 Customizing Git - Git Attributes]


# Logs and databases #
On peut le configurer en global ou en local {{mm|.gitattributes}} crée à la racine en le versionnant dans la base même si l'on veut le retrouver sur d'autres machines.
######################
*.log


# OS generated files #
{{code|lang=bash|code=
######################
git config --global core.attributesfile ~/.gitattributes_global
.DS_Store
}}
.DS_Store?
 
._*
Contenus possible :
.Spotlight-V100
{{code|lang=text|code=
.Trashes
* text=auto
ehthumbs.db
*.bat    text eol=crlf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
Thumbs.db
*.csv    text
</source>
*.doc    -text diff
*.docx  -text diff
*.html  text
*.idx    -text diff
*.ini    text
*.jpg    -text diff
*.mov    -text diff
*.mp4    -text diff
*.pack  -text diff
*.pdf    -text diff
*.png    -text diff
*.ppt    -text diff
*.pptx  -text diff
*.py    text  eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=python
*.pyc    -text diff
*.sample -text diff
*.sh    text  whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=bash
*.svg    text
*.tx    text
*.txt    text
*.uml    -text diff
*.xls    -text diff
*.xlsm  -text diff
*.xlsx  -text diff
*.xml    text
}}
voir(old) [https://stackoverflow.com/questions/1510798/trying-to-fix-line-endings-with-git-filter-branch-but-having-no-luck/1511273#1511273 Trying to fix line-endings]
}}
}}
{{Rq|Ne pas laisser d'espace devant les pattern de filtrage.}}


=== La complétion des commandes de git ===
==== Ignorer les fichiers .gitignore ====
===== .gitignore_global =====
{{parW|1=
{{parW|1=
Copier le fichier de complétion:
Ajouter le ~/.gitignore_global aux fichiers exclus en tapant, {{m|y compris sous WINDOWS}}:
<source lang="bash">
<source lang="bash">
cp /etc/bash_completion.d/git ~/.git-completion.sh
git config --global core.excludesfile ~/.gitignore_global
</source>
et ajouter dans ~/.bashrc la ligne suivante :
<source lang="bash">
source ~/.git-completion.sh
</source>
</source>
}}
}}
=== Un prompt affichant les branches ===
===== la casse de la configuration =====
{{parW|1=
A mettre dans {{mc|.bashrc}} ⟼ [[Exemples de .bashrc]]
}}
 
=== Les outils : éditeur et fusion et différence  ===
{{parW|1=
{{parW|1=
Rendre la configuration non sensible à la casse :
<source lang="bash">
<source lang="bash">
git config --global core.editor gedit
git config --global core.ignorecase true
git config --global merge.tool tkdiff
</source>
</source>
Cette option se retrouve alors dans le fichier {{mm|wrkDir/.git/config}}
}}
}}
===== .gitignore =====
{{parW|1=
{{parW|1=
{{code|lang=bash|code=
Pour un répertoire spécifique, créer ce fichier nommé {{mm|.gitignore}} dans le répertoire à filtrer (en général la racine qui est {{mm|wrkDir}}) en le complétant par l'exemple se trouvant dans :
git config --global diff.tool meld
*  ☞ git/gitignore.txt de https://atoross@at.bht.fr/git/textDoc.git
git config --global difftool.meld.path "/usr/bin/meld"
Vous avez ici une copie :
git config --global difftool.prompt false
{{code|lang=config|code=
git config --global merge.tool meld
.gitignore
git config --global mergetool.meld.path "/usr/bin/meld"
.project
git config --global mergetool.prompt false
.pydevproject
.settings
noPull
noPush
*chenal3.cfg*
modAtTool
 
# local config
###################
python*bat
python*sh
 
# My generated #
###################
tmp*
gen*
old*
external*
*generated*
*Copie*
*Copy*
*.puml
*PlantUml.png
 
# Editor generted #
###################
.project
.pydevproject
.settings
*~
*bak
*back.py
 
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
*.pyc
__pycache__
 
# External executable #
#######################
plantuml.jar
 
# External git base #
#####################
exe/textTool
 
 
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
 
# Logs and databases #
######################
*.log
 
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.dbatoross@hpOmen:~/git/textDoc/git:master$cd ..
atoross@hpOmen:~/git/textDoc:master$cd git/
atoross@hpOmen:~/git/textDoc/git:master$cat gitignore.txt
.gitignore
.project
.pydevproject
.settings
noPull
noPush
*chenal3.cfg*
modAtTool
 
# local config
###################
python*bat
python*sh
 
# My generated #
###################
tmp*
gen*
old*
external*
*generated*
*Copie*
*Copy*
*.puml
*PlantUml.png
 
# Editor generted #
###################
.project
.pydevproject
.settings
*~
*bak
*back.py
 
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
*.pyc
__pycache__
 
# External executable #
#######################
plantuml.jar
 
# External git base #
#####################
exe/textTool
 
 
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
 
# Logs and databases #
######################
*.log
 
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
}}
}}
 
{{Rq|Ne pas laisser d'espace devant les pattern de filtrage.}}
 
=== Local :  {{m|1=.git/config}} ===
{{parW|1=
{{code|code=bash|code=
git config --edit # .git/config
}}
{{code|code=in|code=
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
[remote "old-origin"]
        url = https://git.forge.pleiade.edf.fr/git/verona.colmat.git
        fetch = +refs/heads/*:refs/remotes/old-origin/*
[gui]
        wmstate = zoomed
        geometry = 893x435+208+208 418 464
[submodule "modAtTool"]
        active = true
        url = https://git.forge.pleiade.edf.fr/git/verona.git
[remote "at64g"]
        url = F:/base/gitDvlp/ciclope.git/
        fetch = +refs/heads/*:refs/remotes/at64g/*
[remote "origin"]
        url = https://gitlab.pleiade.edf.fr/ciclope/ciclope-code.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[http]
        sslVerify = false
}}
}}
 
=== La complétion des commandes de git ===
{{parW|1=
Copier le fichier de complétion:
<source lang="bash">
cp /etc/bash_completion.d/git ~/.git-completion.sh
</source>
et ajouter dans ~/.bashrc la ligne suivante :
<source lang="bash">
source ~/.git-completion.sh
</source>
}}
=== Un prompt affichant les branches ===
{{parW|1=
A mettre dans {{mc|.bashrc}} ⟼ [[Exemples de .bashrc]]
}}
 
=== Les outils : éditeur et fusion et différence (diff tool merge tool meld tkdiff)  ===
{{parW|1=
{{cadre|1=
Pour travailler sous windows et linux sans les problèmes de fin de ligne \lf \cr il suffit de positionner {{mm|core.autocrlf}} sur {{mm|input}} [https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration source]:
{{code|lang=bash|code=
git config --global core.autocrlf input
}}
}}
<source lang="bash">
git config --global core.editor gedit
git config --global merge.tool tkdiff
</source>
}}
{{parW|1=
{{code|lang=bash|code=
git config --global diff.tool meld
git config --global difftool.meld.path "/usr/bin/meld"
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.path "/usr/bin/meld"
git config --global mergetool.prompt false
}}
Utilisation
{{code|lang=bash|code=
git difftool  HEAD^1 comMultiZone/common.py
}}
}}
 
=== Dimensionner la taille des paquets d'envoi quand le protocole http est utilisé ===
{{parW|1=
SI le massage suivant est ertourné :
<source lang="text">
Expected ok/error, helper said 2004[...]
</source>
<source lang="bash">
git config --global http.postBuffer 209715200
</source>
}}
 
=== Le fichier bashrc pour git bash sous windows ===
{{parW|1=
Se trouve dans {{mm|<nowiki>C:\Users\<your user name></nowiki>}}.
 
Si on exécute la commande {{mm| echo ~}} on obtient par exemple {{dq|/c/Users/Arthur}}
}}
 
=== Les alias ===
{{parW|1=
Lire d'abord [[Exemples de .bashrc#ref|Exemple de référence]]
{{code|lang=bash|code=
alias gad='git add '
..
}}
{{code|lang=bash|code=
git config --global alias.sw  'checkout'
git config --global alias.ad  'add'
git config --global alias.br  'branch'
git config --global alias.cm  'commit' -m
git config --global alias.co  'checkout'
git config --global alias.cur  'symbolic-ref --short HEAD'
git config --global alias.lg  'log  --pretty=format:"[%h][%cN]%Cgreen[%s]%Cred[%d]" --date=iso  --graph  --abbrev-commit'
git config --global alias.ltag 'describe --exact-match --abbrev=0'
git config --global alias.pl  'pull'
git config --global alias.pu  'push'
git config --global alias.slg  'log  --pretty=format:"[%h]%Cgreen[%s]%Cred[%d]" --graph  --abbrev-commit'
git config --global alias.st  'status'
git config --global alias.sw  'checkout'
git config --global alias.rv  ' remote -v '
git config --global alias.ra  'remote add '
git config --global alias.me  'merge --no-ff --no-commit'
}}
}}
Utilisation
Dautres alias plus spécifiques
{{code|lang=bash|code=
{{code|lang=bash|code=
git difftool  HEAD^1 comMultiZone/common.py
alias branch-merge-point = !bash -c 'diff --old-line-format=--new-line-format= <(git rev-list --first-parent \"${1:-master}\") <(git rev-list --first-parent \"${2:-HEAD}\") | head -1' -
alias branch-diff = !sh -c \"git diff `git branch-merge-point`..\"
alias branch-log = !sh -c \"git log `git branch-merge-point`..\
}}
}}
}}
{{codeTr|lang=bash|code=
 
git config -l {{!}}grep alias
=== Dimensionner la taille des paquets d'envoi quand le protocole http est utilisé ===
alias.le=log --oneline --decorate
{{parW|1=
alias.filelog=log -u
SI le massage suivant est ertourné :
alias.fl=log -u
<source lang="text">
alias.dl=!git ll -1
Expected ok/error, helper said 2004[...]
alias.dlc=diff --cached HEAD^
</source>
alias.dr=!f() { git diff $1^..$1; }; f
<source lang="bash">
alias.lc=!f() { git ll $1^..$1; }; f
git config --global http.postBuffer 209715200
alias.diffr=!f() { git diff $1^..$1; }; f
</source>
alias.f=!git ls-files {{!}} grep -i
}}
alias.grep=grep -Ii
 
alias.gr=grep -Ii
=== Le fichier bashrc pour git bash sous windows ===
alias.cp=cherry-pick
alias.st=status -s
alias.cl=clone
alias.ci=commit
alias.co=checkout
alias.br=branch
alias.diff=diff --word-diff
alias.dc=diff --cached
alias.r=reset
alias.r1=reset HEAD^
alias.r2=reset HEAD^^
alias.rh=reset --hard
alias.rh1=reset HEAD^ --hard
alias.rh2=reset HEAD^^ --hard
}}
}}
 
=== Vérifier la configuration ===
{{parW|1=
{{parW|1=
Se trouve dans {{mm|<nowiki>C:\Users\<your user name></nowiki>}}.
<source lang="bash">
 
git config --list --show-origin 
Si on exécute la commande {{mm| echo ~}} on obtient par exemple {{dq|/c/Users/Arthur}}
git config user.name
</source>
}}
}}


=== Les alias ===
== Aide ==
{{parW|1=
{{parW|1=
Lire d'abord [[Exemples de .bashrc#ref|Exemple de référence]]
<source lang="bash">
{{code|lang=bash|code=
git <commande> -h
alias gad='git add '
man git-<commande>
..
git help <commande>
git --help <commande>
</source>
exemple :
<source lang="bash">
git config -h
man git-config
git help config
git --help config
</source>
}}
== Les commandes les plus utilisées ==
{{not|cp : copier(copy)}}
{{not|mv : déplacer(mv)}}
{{not|rec : enregistrer(record), inscrire juste le nom}}
{{not|unrec : dés-enregistrer(unrecord), effacer le nom}}
=== Désigner une révision - HEAD ===
{{parW|1=
* {{m|HEAD}} désigne la dernière révision, notée N, de la branche pointée par le locRep.
* {{m|HEAD~}} ou {{m|HEAD^}} ou {{m|HEAD~1}} {{m|HEAD^1}} désigne la révision N-1.
* {{m|HEAD~2}} désigne la révision N-2.
* {{m|HEAD^2}} désigne la révision N-2 du deuxième parent dans le cas où on peut avoir plusieurs parents.
* {{m|ORIG_HEAD}} est l'état antérieur de {{m|HEAD}} pour certaines opérations critiques. Il est moins utile maintenant que git a reflog: {{mm|git reflog show}} donne par exemple :
*: {{code|lang=text|colNb=80|code=
febdfb9 (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: checkout: moving from at to master
010837a (origin/at, at) HEAD@{1}: checkout: moving from master to at
febdfb9 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2}: commit: save
010837a (origin/at, at) HEAD@{3}: pull: Fast-forward
}}
}}
{{code|lang=bash|code=
git config --global alias.sw  'checkout'
git config --global alias.ad  'add'
git config --global alias.br  'branch'
git config --global alias.cm  'commit' -m
git config --global alias.co  'checkout'
git config --global alias.cur  'symbolic-ref --short HEAD'
git config --global alias.lg  'log  --pretty=format:"[%h][%cN]%Cgreen[%s]%Cred[%d]" --date=iso  --graph  --abbrev-commit'
git config --global alias.ltag 'describe --exact-match --abbrev=0'
git config --global alias.pl  'pull'
git config --global alias.pu  'push'
git config --global alias.slg  'log  --pretty=format:"[%h]%Cgreen[%s]%Cred[%d]" --graph  --abbrev-commit'
git config --global alias.st  'status'
git config --global alias.sw  'checkout'
git config --global alias.rv  ' remote -v '
git config --global alias.ra  'remote add '
git config --global alias.me  'merge --no-ff --no-commit'
}}
}}
Dautres alias plus spécifiques
{{Rq|Les révisions sont aussi appelées des {{dq|commit}}. Par exemple {{m|HEAD^1}} désigne le dernier {{dq|commit}} (last commit). Dans la documention de git les {{dq|commit}} sont noté {{dq|<commit>}}.
{{code|lang=bash|code=
alias branch-merge-point = !bash -c 'diff --old-line-format=--new-line-format= <(git rev-list --first-parent \"${1:-master}\") <(git rev-list --first-parent \"${2:-HEAD}\") | head -1' -
alias branch-diff = !sh -c \"git diff `git branch-merge-point`..\"
alias branch-log = !sh -c \"git log `git branch-merge-point`..\
}}
}}
{{codeTr|lang=bash|code=
{{parW|1=
git config -l {{!}}grep alias
exemples :
alias.le=log --oneline --decorate
<source lang="bash">
alias.filelog=log -u
git lg  HEAD~1^2
alias.fl=log -u
git lg  origin/master~1
alias.dl=!git ll -1
</source>
alias.dlc=diff --cached HEAD^
<source lang="bash">
alias.dr=!f() { git diff $1^..$1; }; f
git log  --pretty=format:"%h"  --graph
alias.lc=!f() { git ll $1^..$1; }; f
</source>
alias.diffr=!f() { git diff $1^..$1; }; f
<source lang="text">
alias.f=!git ls-files {{!}} grep -i
*  1bd1d09
alias.grep=grep -Ii
|\ 
alias.gr=grep -Ii
| *  37d48e9
alias.cp=cherry-pick
| |\ 
alias.st=status -s
| | * edae2b9
alias.cl=clone
| | * 42bb57e
alias.ci=commit
| |/ 
alias.co=checkout
|/| 
alias.br=branch
| * 74dc61f
alias.diff=diff --word-diff
| * c43c75d
alias.dc=diff --cached
|/ 
alias.r=reset
* eedbf2e
alias.r1=reset HEAD^
* 0361888
alias.r2=reset HEAD^^
* 87c79ea
alias.rh=reset --hard
</source>
alias.rh1=reset HEAD^ --hard
alias.rh2=reset HEAD^^ --hard
}}
}}
 
=== Vérifier la configuration ===
{{parW|1=
<source lang="bash">
<source lang="bash">
git config --list
git lg -1 HEAD~1
git config user.name
</source>
<source lang="text">
* eedbf2e
</source>
</source>
}}
== Aide ==
{{parW|1=
<source lang="bash">
<source lang="bash">
git <commande> -h
git lg -1 HEAD^1
man git-<commande>
</source>
git help <commande>
<source lang="text">
git --help <commande>
* eedbf2e
</source>
</source>
exemple :
<source lang="bash">
<source lang="bash">
git config -h
git lg -1 HEAD~2
man git-config
</source>
git help config
<source lang="text">
git --help config
* 0361888
</source>
<source lang="bash">
git lg -1 HEAD^2
</source>
<source lang="text">
37d48e9
</source>
</source>
}}
}}
== Les commandes les plus utilisées ==
 
{{not|cp : copier(copy)}}
=== S'authentifier aévec mot de passe stocké temporairement ===
{{not|mv : déplacer(mv)}}
{{not|rec : enregistrer(record), inscrire juste le nom}}
{{not|unrec : dés-enregistrer(unrecord), effacer le nom}}
=== Désigner une révision - HEAD ===
{{parW|1=
{{parW|1=
* {{m|HEAD}} désigne la dernière révision, notée N, de la branche pointée par le locRep.
Pour garder le mot de passe pour 3 heures
* {{m|HEAD~}} ou {{m|HEAD^}} ou {{m|HEAD~1}} {{m|HEAD^1}} désigne la révision N-1.
{{code|lang=bash|code=
* {{m|HEAD~2}} désigne la révision N-2.
git config --global credential.helper 'cache --timeout=10800'
* {{m|HEAD^2}} désigne la révision N-2 du deuxième parent dans le cas où on peut avoir plusieurs parents.
* {{m|ORIG_HEAD}} est l'état antérieur de {{m|HEAD}} pour certaines opérations critiques. Il est moins utile maintenant que git a reflog: {{mm|git reflog show}} donne par exemple :
*: {{code|lang=text|colNb=80|code=
febdfb9 (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: checkout: moving from at to master
010837a (origin/at, at) HEAD@{1}: checkout: moving from master to at
febdfb9 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2}: commit: save
010837a (origin/at, at) HEAD@{3}: pull: Fast-forward
}}
}}
Pour garder le mot de passe pour une heure
{{code|lang=bash|code=
git config --global credential.helper 'cache --timeout=3600'
}}
}}
{{Rq|Les révisions sont aussi appelées des {{dq|commit}}. Par exemple {{m|HEAD^1}} désigne le dernier {{dq|commit}} (last commit). Dans la documention de git les {{dq|commit}} sont noté {{dq|<commit>}}.
Pour garder le mot de passe pour un certain temps
{{code|lang=bash|code=
git config --global credential.helper cache
}}
}}
{{parW|1=
 
exemples :
Sous windows (pas possible de mettre un timeout):
<source lang="bash">
{{code|lang=bash|code=
git lg  HEAD~1^2
git config --global credential.helper wincred
git lg  origin/master~1
}}
</source>
{{cadreR|
Si vous êtes bloqué sous windows, on peut gérer les dientifications en cherchant dans tapant {{dq|Gérer vos informations d'identification}}
}}
}}
{{Rq|1=
Attention dans certain cas par défaut le paramétrage peut être dans {{mm|--system}}.
}}
 
=== Copier une base locale - clone ===
{{parW|1=
<source lang="bash">
<source lang="bash">
git log --pretty=format:"%h"  --graph
git clone <remGitNameUrl> <locGitNameRep>
</source>
</source>
<source lang="text">
Cette commande créera la répertoire <locGitNameRep>.
*  1bd1d09
}}
|\ 
==== Cloner une branche ou un tag particulier ====
| *  37d48e9
{{parW|1=
| |
{{code|lang=bash|code=
| | * edae2b9
# pour une branche
| | * 42bb57e
git clone -b <branchName> <remGitNameUrl> <locGitNameRep>
| |/ 
# ou pour un tag
|/| 
git clone -b <tagName> <remGitNameUrl> <locGitNameRep>
| * 74dc61f
}}
| * c43c75d
Cette commande créera la répertoire <locGitNameRep>.
|/  
}}
* eedbf2e
 
* 0361888
=== Pour une base locale existante modifier l'emplacement du répertoire {{dq|.git}} ===
* 87c79ea
{{parW|1=
</source>
Utilisation de {{dq|{{mm|--separate-git-dir}}}}
<source lang="bash">
{{code|lang=bash|code=
git lg -1 HEAD~1
git clone <remGitNameRep> <locGitNameRep> \
</source>
                --separate-git-dir=<newPathOfLocGitRep>  
<source lang="text">
}}
* eedbf2e
Exemple :
</source>
{{code|lang=bash|code=
<source lang="bash">
git clone /c/chenal3/chenal /c/chenal3/newChenal \
git lg -1 HEAD^1
                --separate-git-dir=/c/chenal3/newChenalGitRep
</source>
}}
<source lang="text">
}}
* eedbf2e
</source>
<source lang="bash">
git lg -1 HEAD~2
</source>
<source lang="text">
* 0361888
</source>
<source lang="bash">
git lg -1 HEAD^2
</source>
<source lang="text">
37d48e9
</source>
}}


=== S'authentifier aévec mot de passe stocké temporairement ===
=== Ajouter/Add un fichier au «stgArea»===
{{parW|1=
{{parW|1=
Pour garder le mot de passe pour 3 heures
 
{{code|lang=bash|code=
{{code|lang=bash|code=
git config --global credential.helper 'cache --timeout=10800'
git add <filepath>
git add <dirpath>
git add ./rep1/dvlp1File.txt
}}
}}
Pour garder le mot de passe pour une heure
 
Seulement les éléments déjà ajoutés:
{{code|lang=bash|code=
{{code|lang=bash|code=
git config --global credential.helper 'cache --timeout=3600'
git add -u [--] [filepattern ...]
}}
git add -u
Pour garder le mot de passe pour un certain temps
git add -u "*.c" "../*.h"
{{code|lang=bash|code=
git config --global credential.helper cache
}}
}}


Sous windows (pas possible de mettre un timeout):
Tous les éléments:
{{code|lang=bash|code=
{{code|lang=bash|code=
git config --global credential.helper wincred
git add -A [--] [filepattern ...]
git add -A
git add -A "*.c" "../*.h"
}}
}}
{{cadreR|
{{cadreR|Attention {{mmm|git add -A}} supprimera dans stgArea les fichiers qui ne sont plus dans {{mmm|wrkDir}}.}}
Si vous êtes bloqué sous windows, on peut gérer les dientifications en cherchant dans tapant {{dq|Gérer vos informations d'identification}}
{{cadreV|Attention {{mmm|git add -n}} permet de tester sans toucher {{mmm|stgArea}}, très pratique si l'on n'est pas sûr, exemple {{mmm|git add -n -A "../ser*" "../inter*"}}.}}
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep  remDep
                └────rec──────▶│
                  "add" ou "add -u"       
 
stash        wrkDir        stgArea    locDep  remDep
                └────rec──────▶│
                              some
                              └unrec─▶∅
                  "add -A"
}}
}}
}}
}}
{{Rq|1=
===  Montrer les différences et comparer ===
Attention dans certain cas par défaut le paramétrage peut être dans {{mm|--system}}.
{{parW|1=
 
Entre deux tags :
{{code|lang=bash|code=
git diff tag1 tag2
git diff tag1 tag2 -- some/file/name
}}
}}


=== Copier une base locale - clone ===
Pour ne voir que la liste des fichiers qui comportent des différences:
{{parW|1=
{{code|lang=bash|code=
<source lang="bash">
git diff tag1 tag2 --stat
git clone <remGitNameUrl>  <locGitNameRep>
</source>
Cette commande créera la répertoire <GitName>.
}}
}}
=== Pour une base locale existante modifier l'emplacement du répertoire {{dq|.git}} ===
 
{{parW|1=
Pour une différence avec le répertoire courant:
Utilisation de {{dq|{{mm|--separate-git-dir}}}}
{{code|lang=bash|code=
{{code|lang=bash|code=
git clone <remGitNameRep> <locGitNameRep> \
git diff tagX
                --separate-git-dir=<newPathOfLocGitRep>
git diff tagX -- some/file/name
git diff tagX  --stat
}}
}}
Exemple :
 
{{code|lang=bash|code=
git clone /c/chenal3/chenal /c/chenal3/newChenal \
                --separate-git-dir=/c/chenal3/newChenalGitRep
}}
}}
}}
=== Enregistrer/Commiter les fichiers déjà ajoutés dans «locDep» ===
 
=== Ajouter/Add un fichier au «stgArea»===
{{parW|1=
{{parW|1=
 
{{codeTr|lang=bash|code=
{{code|lang=bash|code=
git commit -m <message>
git add <filepath>
git commit -m "dvlp01-01"
git add <dirpath>
}}
git add ./rep1/dvlp1File.txt
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep  remDep
                │            └unrec─▶∅
                └───────────cp───────────▶<newSha1>
                                          <sha1>
                                          ...
                    "commit -m <message>"       
}}
}}
}}


Seulement les éléments déjà ajoutés:
{{code|lang=bash|code=
git add -u [--] [filepattern ...]
git add -u
git add -u "*.c" "../*.h"
}}


Tous les éléments:
=== Annuler ===
==== Annuler un ajout d'un fichier au «stgArea» - “unadd” - "reset <path>" ====
{{parW|1=
{{code|lang=bash|code=
{{code|lang=bash|code=
git add -A [--] [filepattern ...]
git reset <filepath>
git add -A
git reset HEAD <filepath>
git add -A "*.c" "../*.h"
}}
}}
{{cadreR|Attention {{mmm|git add -A}} supprimera dans stgArea les fichiers qui ne sont plus dans {{mmm|wrkDir}}.}}
{{dq|wrkDir}} n'est pas impacté.
{{cadreV|Attention {{mmm|git add -n}} permet de tester sans toucher {{mmm|stgArea}}, très pratique si l'on n'est pas sûr, exemple {{mmm|git add -n -A "../ser*" "../inter*"}}.}}
{{code|lang=text|code=
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep  remDep
stash        wrkDir        stgArea    locDep  remDep
                └────rec──────▶│
                    ∅◀─unrec─┘
                  "add" ou "add -u"       
                        "reset <path>"
 
stash        wrkDir        stgArea    locDep  remDep
                └────rec──────▶│
                              some
                              └unrec─▶∅
                  "add -A"
}}
}}
}}
}}
=== Montrer les différences et comparer ===
 
==== Annuler/Uncommiter le dernier enregistrement dans « locDep » ====
{{parW|1=
{{parW|1=
 
{{codeTr|lang=bash|code=
Entre deux tags :
git reset --soft HEAD^
{{code|lang=bash|code=
git diff tag1 tag2
git diff tag1 tag2 -- some/file/name
}}
}}
{{dq|wrkDir}} et {{dq|stgArea}} ne sont pas impactés.
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep  remDep


Pour ne voir que la liste des fichiers qui comportent des différences:
                                ∅◀─mv─<HEAD>
{{code|lang=bash|code=
                                      <HEAD^>
git diff tag1 tag2 --stat
                                        ...
 
                                  "reset --soft HEAD^"
}}
}}
Pour une différence avec le répertoire courant:
{{code|lang=bash|code=
git diff tagX
git diff tagX -- some/file/name
git diff tagX  --stat
}}
}}
{{Rq|La commande {{mm|git reset --soft HEAD}} ne fait rien}}


}}
==== Annuler/Uncommits plusieurs enregistrements dans « locDep » ====
=== Enregistrer/Commiter les fichiers déjà ajoutés dans «locDep» ===
{{parW|1=
{{parW|1=
{{codeTr|lang=bash|code=
{{codeTr|lang=bash|code=
git commit -m <message>
git reset --soft HEAD^^^
git commit -m "dvlp01-01"
git reset --soft dba146f
}}
}}
{{dq|wrkDir}} et {{dq|stgArea}} ne sont pas impactés.
{{code|lang=text|code=
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep  remDep
stash        wrkDir        stgArea    locDep  remDep
                │            └unrec─▶∅
 
                └───────────cp───────────▶<newSha1>
                              ∅◀─mv─ <HEAD>
                                          <sha1>
                              ∅◀─mv─ <HEAD^>
                                          ...
                              ∅◀─mv─ <HEAD^^> 
                    "commit -m <message>"      
                                    <HEAD^^^>=<Commit>
                                        ...  
 
                        "reset --soft <Commit>"
}}
}}
}}
}}


 
==== Annuler/unLocalyModify toutes les modifications dans « wrkDir » ====
=== Annuler ===
==== Annuler un ajout d'un fichier au «stgArea» - “unadd” - "reset <path>" ====
{{parW|1=
{{parW|1=
{{code|lang=bash|code=
{{codeTr|lang=bash|code=
git reset <filepath>
git reset --hard
git reset HEAD <filepath>
git reset --hard HEAD
}}
}}
{{dq|wrkDir}} n'est pas impacté.
{{dq|wrkDir}} et {{dq|stgArea}} sont directement impactés.
{{code|lang=text|code=
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep   remDep
stash        wrkDir        stgArea    locDep   remDep
                    ∅◀─unrec─┘  
              │    ∅◀─unrec─┘
                        "reset <path>"
              │◀───────────cp────────<HEAD> 
                                      ... 
 
                    "reset --hard HEAD"
}}
}}
}}
}}
 
==== Annuler/unLocalyModify les modifications d'un fichier dans « wrkDir » ====
==== Annuler/Uncommiter le dernier enregistrement dans « locDep » ====
{{parW|1=
{{parW|1=
{{codeTr|lang=bash|code=
{{codeTr|lang=bash|code=
git reset --soft HEAD^
git checkout HEAD Makefile
}}
}}
{{dq|wrkDir}} et {{dq|stgArea}} ne sont pas impactés.
 
{{code|lang=text|code=
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep  remDep
stash        wrkDir        stgArea    locDep   remDep
              │    ∅◀─unrec─┘ 
              │◀───────────cp────────<HEAD> 
                                      ...    


                                ∅◀─mv─<HEAD>
                    "git checkout HEAD Makefile"
                                      <HEAD^>
                                        ...
 
                                  "reset --soft HEAD^"
}}
}}
}}
}}
{{Rq|La commande {{mm|git reset --soft HEAD}} ne fait rien}}
=== Dépôt distant ===
 
==== Changer le dépôt distant {{dq|{{mm|origin}}}}====
==== Annuler/Uncommits plusieurs enregistrements dans « locDep » ====
{{parW|1=
{{parW|1=
{{codeTr|lang=bash|code=
{{code|lang=bash|code=
git reset --soft HEAD^^^
git remote rename origin origin-old
git reset --soft dba146f
git remote add origin git@gitlab.pleiade.edf.fr:eelCounter/eelCounter.git
}}
git branch --set-upstream-to=origin/master master
{{dq|wrkDir}} et {{dq|stgArea}} ne sont pas impactés.
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep  remDep
 
                              ∅◀─mv─ <HEAD> 
                              ∅◀─mv─ <HEAD^> 
                              ∅◀─mv─ <HEAD^^> 
                                    <HEAD^^^>=<Commit>
                                        ...  
 
                        "reset --soft <Commit>"
}}
}}
}}
}}


==== Annuler/unLocalyModify toutes les modifications dans « wrkDir » ====
==== Connaître l'url de la base distante - remote ====
{{parW|1=
{{parW|1=
{{codeTr|lang=bash|code=
<source lang="bash">
git reset --hard
git remote -v
git reset --hard HEAD
</source>
<source lang="text">
origin <remGitNameUrl>  (fetch)
origin <remGitNameUrl>  (push)
</source>
}}
}}
{{dq|wrkDir}} et {{dq|stgArea}} sont directement impactés.
{{code|lang=text|code=
stash        wrkDir        stgArea    locDep    remDep
              │    ∅◀─unrec─┘ 
              │◀───────────cp────────<HEAD> 
                                      ... 


                    "reset --hard HEAD"
==== Ajouter un dépôt distant - remote add ====
{{parW|1=
{{cadrePar|1=
{{mm|remoteName}} est nom (une variable) correspondant à la base distante
{{codeTr|lang=bash|code=
git remote add <remoteName> <path>
git remote add <remoteName> <remotePath>
git remote add <remoteName> <localPath>
git remote add <remoteName> <url>
}}
}}
}}
}}
}}
==== Annuler/unLocalyModify les modifications d'un fichier dans « wrkDir »  ====
{{parW|1=
{{parW|1=
{{cadreB|cas distant :}}
{{codeTr|lang=bash|code=
{{codeTr|lang=bash|code=
git checkout HEAD Makefile
git remote add claumep1 http://claumep1.der.edf.fr/git/P112N_pivot.git
git remote add atorossClaui2v9 ssh://atoross@claui2v9.der.edf.fr/local01/atoross/dvlp/vishnu/github_vishnu.git
}}
}}
 
{{codeTr|lang=bash|code=
{{code|lang=text|code=
git pull <remoteName> [<remoteBranchName>]
stash        wrkDir        stgArea    locDep    remDep
              │    ∅◀─unrec─┘ 
              │◀───────────cp────────<HEAD>
                                      ... 
 
                    "git checkout HEAD Makefile"
}}
}}
}}
{{codeTr|lang=bash|code=
=== Dépôt distant ===
git pull atorossClaui2v9 zmq
==== Changer le dépôt distant {{dq|{{mm|origin}}}}====
{{parW|1=
{{code|lang=bash|code=
git remote rename origin origin-old
git remote add origin git@gitlab.pleiade.edf.fr:eelCounter/eelCounter.git
git branch --set-upstream-to=origin/master master
}}
}}
}}
}}
==== Connaître l'url de la base distante - remote ====
{{parW|1=
{{parW|1=
<source lang="bash">
{{cadreB|cas local:}}
git remote -v
</source>
<source lang="text">
origin <remGitNameUrl>  (fetch)
origin <remGitNameUrl>  (push)
</source>
}}
 
==== Ajouter un dépôt distant - remote add ====
{{parW|1=
{{cadrePar|1=
{{mm|remoteName}} est nom (une variable) correspondant à la base distante
{{codeTr|lang=bash|code=
git remote add <remoteName> <path>
git remote add <remoteName> <remotePath>
git remote add <remoteName> <localPath>
git remote add <remoteName> <url>
}}
}}
}}
{{parW|1=
{{cadreB|cas distant :}}
{{codeTr|lang=bash|code=
git remote add claumep1 http://claumep1.der.edf.fr/git/P112N_pivot.git
git remote add atorossClaui2v9 ssh://atoross@claui2v9.der.edf.fr/local01/atoross/dvlp/vishnu/github_vishnu.git
}}
{{codeTr|lang=bash|code=
git pull <remoteName> [<remoteBranchName>]
}}
{{codeTr|lang=bash|code=
git pull atorossClaui2v9 zmq
}}
}}
{{parW|1=
{{cadreB|cas local:}}
{{codeTr|lang=bash|code=
{{codeTr|lang=bash|code=
git remote add theTrunk /home/C07138/opentelemacTrunk
git remote add theTrunk /home/C07138/opentelemacTrunk
Ligne 1 033 : Ligne 1 433 :
==== Voir l'historique - git-log ====
==== Voir l'historique - git-log ====
{{parW|1=
{{parW|1=
La doc en ligne : https://git-scm.com/docs/git-log
* La doc en ligne : [https://git-scm.com/docs/git-log]
D'un fichier donné:
{{code|lang=bash|code=
git log --pretty=format:"%h %cd %Cgreen%s %Cred%d" \
        --graph  --abbrev-commit  --date="format:%Y/%m/%d %Hh%M" \
        --follow ciclopeM3z.py
}}
Globalement:
{{code|lang=bash|code=
{{code|lang=bash|code=
# court
# court
Ligne 1 302 : Ligne 1 709 :
}}
}}
== Problèmes rencontrés ==
== Problèmes rencontrés ==
=== Le problème de dev.azure.com IMPOSSIBLE de désactiver ===
{{parW|1=
Voir globalDoc/gitlab.txt.
Solution :
{{code|lang=text|code=
git config --edit --system
}}
}}
=== Manque de mémoire ===
=== Manque de mémoire ===
{{parW|1=
{{parW|1=
Ligne 1 311 : Ligne 1 727 :
fatal: protocol error: bad pack header
fatal: protocol error: bad pack header
}}
}}
Résolution : ?
 
Résolution :  
 
Git LFS (Large File Storage) est une extension de Git développée par Atlassian, GitHub, et quelques autres contributeurs open source, qui réduit l'impact des fichiers volumineux dans votre dépôt en téléchargeant paresseusement les versions de ces fichiers. [https://www.atlassian.com/fr/git/tutorials/git-lfs]
 
Installation :
{{code|lang=text|code=
git lfs install
}}
}}
}}
== Liens ==
== Liens ==
=== Rsync avec git bash sous windows ===
=== Rsync avec git bash sous windows ===
Ligne 1 322 : Ligne 1 747 :
* Les commandes GIT que vous devez absolument connaître !
* Les commandes GIT que vous devez absolument connaître !
*: https://www.hostinger.fr/tutoriels/commandes-git/
*: https://www.hostinger.fr/tutoriels/commandes-git/
* Gloassary - Git commands
*: https://www.atlassian.com/git/glossary
* git-cheatsheet
* git-cheatsheet
*: http://ndpsoftware.com/git-cheatsheet.html
*: http://ndpsoftware.com/git-cheatsheet.html
Ligne 1 362 : Ligne 1 789 :
*: [http://mercurial.selenic.com/wiki/GitConcepts mercurial.selenic.com]
*: [http://mercurial.selenic.com/wiki/GitConcepts mercurial.selenic.com]
}}
}}
=== Clients ===
=== Clients ===
{{parW|1=
{{parW|1=

Version actuelle datée du 18 décembre 2024 à 14:06

Version : 1.36.1 4876 (2024-12-18) 20241218140632

1 L'essentiel

GitFlowDiagram.svg
Fig. n°1 Diagramme de flux de git

2 Le problème des gros fichiers

2.1 Git Push Fails - fatal: The remote end hung up unexpectedly

l'un des solution est de faire des push par commits successifs :

git log # or 'gslg' or 'glg'
# git push origin sha:remote-branch
# example :
git push origin 84143f1:master

2.2 Git Large File Storage (LFS) - Le stockage des gros fichiers

« Large File Storage » pour Git est une extension permettant d'indexer des fichiers volumineux à un référentiel Git, en stockant ces fichiers sur des espaces spécifiques.

apt install git-lfs
git lfs install


Traiter/suivre certains fichier

git lfs track "*.iso"
git add .gitattributes # les informations précédentes sont stockées dans .gitattributes


2.3 Ajout au suivi du contenu d'un répertoire

$ git lfs track "assets/*"

2.4 Ajout au suivi toute l'arborescence du contenu d'un répertoire

$ git lfs track "assets/**/*"

2.5 Ajout au suivi un fichier particulier

$ git lfs track "path/to/file.example"

2.6 Ajout au suivi un type de fichiers

$ git lfs track "*.tar.gz"

2.7 Liens

3 Las variables

<rem…> remote
distant, une base git distante, sur une autre machine
<loc…> local
local, une base git locale, sur la machine utilisée
<dep…> depository
depository (repository ne sera pas utilisé pour ne pas confondre avec repertoire)
<wrk…> work
work, de travail, ce qui correspond en général au répertoire de travail
<…Url> url
uniform resource locator, adresse web d'une base git
<…Dir> <…Rep> directory
répertoire physique sur le disque dur.
<…ParentDir> <…ParentRep> parent directory
répertoire parent sur le disque dur.
<…GitName…>
nom de la base git
exa-1

4 Les différentes espaces de Git

stash        wrkDir        stgArea        locDep        remDep

4.1 stash

L'espace stash (stash) (cachette) est une espace de stockage temporaire des données qui ne sont pas encore enregistrées (not commited); c'est une sauvegarde de l'espace staging area.

4.2 staging area - index

L'espace staging area (stgArea) est une espace de stockage des données qui ne sont pas encore enregistrées (not commited).

4.3 working directory

L'espace working directory (wrkDir) est un répertoire sur un système de fichier qui contient les fichiers de travails. Tous les fichiers et sous répertoires ne sont pas forcément versionnés.

4.4 local depository

L'espace local depository (locDep) est une espace de stockage des données versionnées, une base de données git, qui se trouve dans le répertoire nommé .git qui lui même est dans le répertoire racine de working directory. Ces données sont enregistrées (commited).

4.5 remote depository

L'espace remote depository (remDep) est une espace de stockage des données versionnées, une base de données git, qui n'est pas le répertoire nommé .git de working directory. Il est soit sur le même système de fichier ou sur une autre machines. Ces données sont enregistrées (commited and pushed). Un espace (locDep peut avoir plusieurs (remDep.

5 Configuration

5.1 fichier

5.1.1 Longueur du chemain fichier trop long

git config --global core.longpaths true

5.2 Hosts

/etc/hosts n'est pas utilisé mais c'est /c/Windows/System32/drivers/etc/hosts qui est utilisé.

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#       127.0.0.1       localhost
#       ::1             localhost
192.168.20.108  hdedibox3
192.168.20.100  compaqmini

5.3 L'essentiel

  • git config
  • --system
/etc/gitconfig
Pour tous les utilisateurs
  • --global
~/.gitconfig
Pour l'utilsateur courant
<locGitNameRep>/.git/config
Seuelement pour la base locale (quand on est dans <locGitNameRep>)

Voir ses paramètres :

git config --list

ou

git config core.autocrlf

5.4 system : /etc/git…

5.4.1 Certificat auto-certifié

Solution 1 :

su -
git config --system http.sslVerify false

Solution 2 :

export GIT_SSL_NO_VERIFY=true

5.4.2 Editer le contenu de la configuration au niveau du system

git config --system --edit # /etc/gitconfig

ce qui peut donner sous windows à (/etc/gitconfig) :

[diff "astextplain"]
        textconv = astextplain
[filter "lfs"]
        clean = git-lfs clean -- %f
        smudge = git-lfs smudge -- %f
        process = git-lfs filter-process
        required = true
[http]
        sslBackend = openssl
        sslCAInfo = C:/pf/git/mingw64/ssl/certs/ca-bundle.crt
        sslVerify = false
[core]
        fscache = false
        symlinks = false
[pull]
        rebase = true
[credential]
        helper = manager-core
[credential "https://dev.azure.com"]
        useHttpPath = true
[init]
        defaultBranch = master

old:

[diff "astextplain"]
        textconv = astextplain
[filter "lfs"]
        clean = git-lfs clean -- %f
        smudge = git-lfs smudge -- %f
        process = git-lfs filter-process
        required = true
[http]
        sslBackend = openssl
        sslCAInfo = C:/pf/git/mingw64/ssl/certs/ca-bundle.crt
        sslVerify = false
[core]
        autocrlf = true
        fscache = true
        symlinks = false
[pull]
        rebase = true
[credential]
        helper = manager-core
[credential "https://dev.azure.com"]
        useHttpPath = true
[init]
        defaultBranch = master
[diff]
        tool = diff -Bb

5.5 global : ~/.git…

5.5.1 Identification de l'utilisateur

git config --global user.name "Arthur TOROSSIAN"
git config --global user.email "arthur.torossian@edf.fr"

5.5.2 Exemple de fichier config

git config --edit --global # ~/.gitconfig
[http]
        sslVerify = false
[user]
        name = Arthur Torossian
        email = arthur.torossian@edf.fr
[credential "https://at.bht.fr"]
        provider = generic
[credential "http://pac-ad-edf.proxy.edf.fr:3131"]
        provider = generic
[credential "https://git.forge.pleiade.edf.fr"]
        provider = generic
[core]
        attributesfile = C:/Users/C07138/.gitattributes_global
        excludesfile = C:/Users/C07138/.gitignore_global
        ignorecase = true
        attributesfile = C:/Users/C07138/.gitattributes_global
        whitespace = trailing-space,-space-before-tab,indent-with-non-tab,cr-at-eol
        blank-at-eof = false

Old:

[http]
        sslVerify = false
[user]
        name = Arthur Torossian
        email = arthur.torossian@edf.fr
[credential "https://at.bht.fr"]
        provider = generic
[credential "http://pac-ad-edf.proxy.edf.fr:3131"]
        provider = generic
[credential "https://git.forge.pleiade.edf.fr"]
        provider = generic
[core]
        excludesfile = C:/Users/C07138/.gitignore_global
        ignorecase = true
        attributesfile = C:/Users/C07138/.gitattributes_global
        whitespace = trailing-space,-space-before-tab,indent-with-non-tab,cr-at-eol
        blank-at-eof = false

5.5.3 Las attributs .gitattributes - fin de ligne CR LF CRLF LFCR line endings

Pour régler les problèmes d'espace, de tabulation ou de code de fin de ligne des fichiers textes il faut ajouter la configuration des attributs des formats des fichiers (voir ci-après) et configurer les deux variables suivantes localement comme ici ou globalement :

git config core.eol lf
git config core.autocrlf input

Si des fichiers sont marqués modifiés pour les problèmes d'espaces et de fin de lignes alors il faut les ajouter et commiter, après quoi le bonne configuration se mettront en place :

git add -u
git commit -m "nomralisation eof whitespace"

voir :

On peut le configurer en global ou en local .gitattributes crée à la racine en le versionnant dans la base même si l'on veut le retrouver sur d'autres machines.

git config --global core.attributesfile ~/.gitattributes_global


Contenus possible :

* text=auto
*.bat    text eol=crlf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.csv    text 
*.doc    -text diff
*.docx   -text diff 
*.html   text 
*.idx    -text diff 
*.ini    text
*.jpg    -text diff
*.mov    -text diff 
*.mp4    -text diff
*.pack   -text diff
*.pdf    -text diff
*.png    -text diff
*.ppt    -text diff
*.pptx   -text diff
*.py     text  eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=python
*.pyc    -text diff
*.sample -text diff
*.sh     text  whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=bash
*.svg    text
*.tx     text
*.txt    text
*.uml    -text diff 
*.xls    -text diff
*.xlsm   -text diff
*.xlsx   -text diff
*.xml    text
voir(old) Trying to fix line-endings

5.5.4 Ignorer les fichiers .gitignore

5.5.4.1 .gitignore_global

Ajouter le ~/.gitignore_global aux fichiers exclus en tapant, y compris sous WINDOWS:

git config --global core.excludesfile ~/.gitignore_global
5.5.4.2 la casse de la configuration

Rendre la configuration non sensible à la casse :

git config --global core.ignorecase true
Cette option se retrouve alors dans le fichier wrkDir/.git/config
5.5.4.3 .gitignore

Pour un répertoire spécifique, créer ce fichier nommé .gitignore dans le répertoire à filtrer (en général la racine qui est wrkDir) en le complétant par l'exemple se trouvant dans :

Vous avez ici une copie :

.gitignore
.project
.pydevproject
.settings
noPull
noPush
*chenal3.cfg*
modAtTool

# local config
###################
python*bat
python*sh

# My generated #
###################
tmp*
gen*
old*
external*
*generated*
*Copie*
*Copy*
*.puml
*PlantUml.png

# Editor generted #
###################
.project
.pydevproject
.settings
*~
*bak
*back.py

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
*.pyc
__pycache__

# External executable #
#######################
plantuml.jar

# External git base #
#####################
exe/textTool


# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.dbatoross@hpOmen:~/git/textDoc/git:master$cd ..
atoross@hpOmen:~/git/textDoc:master$cd git/
atoross@hpOmen:~/git/textDoc/git:master$cat gitignore.txt 
.gitignore
.project
.pydevproject
.settings
noPull
noPush
*chenal3.cfg*
modAtTool

# local config
###################
python*bat
python*sh

# My generated #
###################
tmp*
gen*
old*
external*
*generated*
*Copie*
*Copy*
*.puml
*PlantUml.png

# Editor generted #
###################
.project
.pydevproject
.settings
*~
*bak
*back.py

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
*.pyc
__pycache__

# External executable #
#######################
plantuml.jar

# External git base #
#####################
exe/textTool


# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Rqe-1

Ne pas laisser d'espace devant les pattern de filtrage.

5.6 Local : .git/config

git config --edit # .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
[remote "old-origin"]
        url = https://git.forge.pleiade.edf.fr/git/verona.colmat.git
        fetch = +refs/heads/*:refs/remotes/old-origin/*
[gui]
        wmstate = zoomed
        geometry = 893x435+208+208 418 464
[submodule "modAtTool"]
        active = true
        url = https://git.forge.pleiade.edf.fr/git/verona.git
[remote "at64g"]
        url = F:/base/gitDvlp/ciclope.git/
        fetch = +refs/heads/*:refs/remotes/at64g/*
[remote "origin"]
        url = https://gitlab.pleiade.edf.fr/ciclope/ciclope-code.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[http]
        sslVerify = false

5.7 La complétion des commandes de git

Copier le fichier de complétion:

cp /etc/bash_completion.d/git ~/.git-completion.sh

et ajouter dans ~/.bashrc la ligne suivante :

source ~/.git-completion.sh

5.8 Un prompt affichant les branches

A mettre dans .bashrcExemples de .bashrc

5.9 Les outils : éditeur et fusion et différence (diff tool merge tool meld tkdiff)

Pour travailler sous windows et linux sans les problèmes de fin de ligne \lf \cr il suffit de positionner core.autocrlf sur input source:

git config --global core.autocrlf input
git config --global core.editor gedit
git config --global merge.tool tkdiff
git config --global diff.tool meld
git config --global difftool.meld.path "/usr/bin/meld"
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.path "/usr/bin/meld"
git config --global mergetool.prompt false

Utilisation

git difftool  HEAD^1 comMultiZone/common.py

5.10 Dimensionner la taille des paquets d'envoi quand le protocole http est utilisé

SI le massage suivant est ertourné :

Expected ok/error, helper said 2004[...]
git config --global http.postBuffer 209715200

5.11 Le fichier bashrc pour git bash sous windows

Se trouve dans C:\Users\<your user name>.

Si on exécute la commande echo ~ on obtient par exemple « /c/Users/Arthur »

5.12 Les alias

Lire d'abord Exemple de référence

alias gad='git add '
..
git config --global alias.sw   'checkout'
git config --global alias.ad   'add'
git config --global alias.br   'branch'
git config --global alias.cm   'commit' -m 
git config --global alias.co   'checkout'
git config --global alias.cur  'symbolic-ref --short HEAD'
git config --global alias.lg   'log  --pretty=format:"[%h][%cN]%Cgreen[%s]%Cred[%d]" --date=iso  --graph  --abbrev-commit'
git config --global alias.ltag 'describe --exact-match --abbrev=0'
git config --global alias.pl   'pull'
git config --global alias.pu   'push'
git config --global alias.slg  'log  --pretty=format:"[%h]%Cgreen[%s]%Cred[%d]" --graph  --abbrev-commit'
git config --global alias.st   'status'
git config --global alias.sw   'checkout'
git config --global alias.rv  ' remote -v '
git config --global alias.ra  'remote add '
git config --global alias.me  'merge --no-ff --no-commit'

Dautres alias plus spécifiques

alias branch-merge-point = !bash -c 'diff --old-line-format=--new-line-format= <(git rev-list --first-parent \"${1:-master}\") <(git rev-list --first-parent \"${2:-HEAD}\")

git config -l |grep alias
alias.le=log --oneline --decorate
alias.filelog=log -u
alias.fl=log -u
alias.dl=!git ll -1
alias.dlc=diff --cached HEAD^
alias.dr=!f() { git diff $1^..$1; }; f
alias.lc=!f() { git ll $1^..$1; }; f
alias.diffr=!f() { git diff $1^..$1; }; f
alias.f=!git ls-files | grep -i
alias.grep=grep -Ii
alias.gr=grep -Ii
alias.cp=cherry-pick
alias.st=status -s
alias.cl=clone
alias.ci=commit
alias.co=checkout
alias.br=branch
alias.diff=diff --word-diff
alias.dc=diff --cached
alias.r=reset
alias.r1=reset HEAD^
alias.r2=reset HEAD^^
alias.rh=reset --hard
alias.rh1=reset HEAD^ --hard
alias.rh2=reset HEAD^^ --hard

5.13 Vérifier la configuration

git config --list --show-origin  
git config user.name

6 Aide

git <commande> -h
man git-<commande>
git help <commande>
git --help <commande>

exemple :

git config -h
man git-config
git help config
git --help config

7 Les commandes les plus utilisées

Not-1

cp : copier(copy)

Not-2

mv : déplacer(mv)

Not-3

rec : enregistrer(record), inscrire juste le nom

Not-4

unrec : dés-enregistrer(unrecord), effacer le nom

7.1 Désigner une révision - HEAD

  • HEAD désigne la dernière révision, notée N, de la branche pointée par le locRep.
  • HEAD~ ou HEAD^ ou HEAD~1 HEAD^1 désigne la révision N-1.
  • HEAD~2 désigne la révision N-2.
  • HEAD^2 désigne la révision N-2 du deuxième parent dans le cas où on peut avoir plusieurs parents.
  • ORIG_HEAD est l'état antérieur de HEAD pour certaines opérations critiques. Il est moins utile maintenant que git a reflog: git reflog show donne par exemple :
    febdfb9 (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: checkout: moving from at to master
    010837a (origin/at, at) HEAD@{1}: checkout: moving from master to at
    febdfb9 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2}: commit: save
    010837a (origin/at, at) HEAD@{3}: pull: Fast-forward
    
Rqe-2

Les révisions sont aussi appelées des « commit ». Par exemple HEAD^1 désigne le dernier « commit » (last commit). Dans la documention de git les « commit » sont noté « <commit> ».


exemples :

git lg  HEAD~1^2
git lg  origin/master~1
git log  --pretty=format:"%h"   --graph
*   1bd1d09
|\  
| *   37d48e9
| |\  
| | * edae2b9
| | * 42bb57e
| |/  
|/|   
| * 74dc61f
| * c43c75d
|/  
* eedbf2e
* 0361888
* 87c79ea
git lg -1 HEAD~1
* eedbf2e
git lg -1 HEAD^1
* eedbf2e
git lg -1 HEAD~2
* 0361888
git lg -1 HEAD^2
37d48e9

7.2 S'authentifier aévec mot de passe stocké temporairement

Pour garder le mot de passe pour 3 heures

git config --global credential.helper 'cache --timeout=10800'

Pour garder le mot de passe pour une heure

git config --global credential.helper 'cache --timeout=3600'

Pour garder le mot de passe pour un certain temps

git config --global credential.helper cache


Sous windows (pas possible de mettre un timeout):

git config --global credential.helper wincred

Si vous êtes bloqué sous windows, on peut gérer les dientifications en cherchant dans tapant « Gérer vos informations d'identification »

Rqe-3

Attention dans certain cas par défaut le paramétrage peut être dans --system.

7.3 Copier une base locale - clone

git clone <remGitNameUrl>  <locGitNameRep>
Cette commande créera la répertoire <locGitNameRep>.

7.3.1 Cloner une branche ou un tag particulier

# pour une branche
git clone -b <branchName> <remGitNameUrl>  <locGitNameRep>
# ou pour un tag
git clone -b <tagName> <remGitNameUrl>  <locGitNameRep>
Cette commande créera la répertoire <locGitNameRep>.

7.4 Pour une base locale existante modifier l'emplacement du répertoire « .git »

Utilisation de « --separate-git-dir »

git clone <remGitNameRep> <locGitNameRep> \
                 --separate-git-dir=<newPathOfLocGitRep>

Exemple :

git clone /c/chenal3/chenal /c/chenal3/newChenal \
                 --separate-git-dir=/c/chenal3/newChenalGitRep

7.5 Ajouter/Add un fichier au «stgArea»

git add <filepath>
git add <dirpath>
git add ./rep1/dvlp1File.txt


Seulement les éléments déjà ajoutés:

git add -u [--] [filepattern ...]
git add -u 
git add -u "*.c" "../*.h"


Tous les éléments:

git add -A [--] [filepattern ...]
git add -A 
git add -A "*.c" "../*.h"

Attention git add -A supprimera dans stgArea les fichiers qui ne sont plus dans wrkDir. Attention git add -n permet de tester sans toucher stgArea, très pratique si l'on n'est pas sûr, exemple git add -n -A "../ser*" "../inter*".

stash        wrkDir        stgArea    locDep   remDep
                └────rec──────▶│
                   "add" ou "add -u"        

stash        wrkDir        stgArea    locDep   remDep
                └────rec──────▶│
                              some
                               └unrec─▶∅
                   "add -A"

7.6 Montrer les différences et comparer

Entre deux tags :

git diff tag1 tag2
git diff tag1 tag2 -- some/file/name


Pour ne voir que la liste des fichiers qui comportent des différences:

git diff tag1 tag2 --stat


Pour une différence avec le répertoire courant:

git diff tagX
git diff tagX -- some/file/name
git diff tagX  --stat

7.7 Enregistrer/Commiter les fichiers déjà ajoutés dans «locDep»

git commit -m <message>
git commit -m "dvlp01-01"


stash        wrkDir        stgArea    locDep   remDep
                │             └unrec─▶∅
                └───────────cp───────────▶<newSha1>
                                          <sha1>
                                           ...
                    "commit -m <message>"


7.8 Annuler

7.8.1 Annuler un ajout d'un fichier au «stgArea» - “unadd” - "reset <path>"

git reset <filepath>
git reset HEAD <filepath>

« wrkDir » n'est pas impacté.

stash        wrkDir        stgArea    locDep   remDep
                     ∅◀─unrec─┘ 
                         "reset <path>"

7.8.2 Annuler/Uncommiter le dernier enregistrement dans « locDep »

git reset --soft HEAD^


« wrkDir » et « stgArea » ne sont pas impactés.

stash        wrkDir        stgArea    locDep   remDep

                                ∅◀─mv─<HEAD>
                                       <HEAD^>
                                        ...

                                  "reset --soft HEAD^"
Rqe-4

La commande git reset --soft HEAD ne fait rien

7.8.3 Annuler/Uncommits plusieurs enregistrements dans « locDep »

git reset --soft HEAD^^^
git reset --soft dba146f


« wrkDir » et « stgArea » ne sont pas impactés.

stash        wrkDir        stgArea    locDep   remDep

                              ∅◀─mv─ <HEAD>  
                              ∅◀─mv─ <HEAD^>  
                              ∅◀─mv─ <HEAD^^>  
                                     <HEAD^^^>=<Commit>
                                        ...   

                         "reset --soft <Commit>"

7.8.4 Annuler/unLocalyModify toutes les modifications dans « wrkDir »

git reset --hard
git reset --hard HEAD


« wrkDir » et « stgArea » sont directement impactés.

stash        wrkDir        stgArea    locDep    remDep
               │     ∅◀─unrec─┘  
               │◀───────────cp────────<HEAD>  
                                       ...   

                    "reset --hard HEAD"

7.8.5 Annuler/unLocalyModify les modifications d'un fichier dans « wrkDir »

git checkout HEAD Makefile



stash        wrkDir        stgArea    locDep    remDep
               │     ∅◀─unrec─┘  
               │◀───────────cp────────<HEAD>  
                                       ...   

                    "git checkout HEAD Makefile"

7.9 Dépôt distant

7.9.1 Changer le dépôt distant « origin »

git remote rename origin origin-old
git remote add origin git@gitlab.pleiade.edf.fr:eelCounter/eelCounter.git
git branch --set-upstream-to=origin/master master

7.9.2 Connaître l'url de la base distante - remote

git remote -v
origin	<remGitNameUrl>  (fetch)
origin	<remGitNameUrl>  (push)

7.9.3 Ajouter un dépôt distant - remote add

remoteName est nom (une variable) correspondant à la base distante

git remote add <remoteName> <path>
git remote add <remoteName> <remotePath>
git remote add <remoteName> <localPath>
git remote add <remoteName> <url>

cas distant :

git remote add claumep1 http://claumep1.der.edf.fr/git/P112N_pivot.git
git remote add atorossClaui2v9 ssh://atoross@claui2v9.der.edf.fr/local01/atoross/dvlp/vishnu/github_vishnu.git


git pull <remoteName> [<remoteBranchName>]


git pull atorossClaui2v9 zmq

cas local:

git remote add theTrunk /home/C07138/opentelemacTrunk

git remote -v
git branch 

git stash 
git pull theTrunk master

git pull theTrunk master

git branch gouttedo
git branch 
git checkout gouttedo 

git pull theTrunk gouttedo

7.9.4 Enlever un dépôt distant - remote rm

git remote rm claui2v6

7.9.5 Inspecter un dépôt distant - remote -v show

git remote -v show <remoteName>

Example :

git remote -v show origin

7.10 Merger

7.10.1 Merger une branche (locale) dans la branche courante

git merge multiZoneDvlp

7.10.2 Merger seulement des fichiers d'une branche dans la branche courante

git merge --no-ff --no-commit <branch>
git status
git merge --no-ff --no-commit at
git status
  • --no-ff : pas de fast-forward
  • --no-commit : pas de commit

Vous aurez alors une liste de fichiers automatiquement fusionnés(merged) et d'autres avec des fusions comportant des conflits.

Pour les fichiers auto-fusionnés on peut inspecter le fusion avec la commande :

git diff --cached <filepath>


Pour fusions avec conflit il faut les éditer et faire le choix soi-même, sinon on peut choisir entre la branche et la branche courante.

Choix de la branche courante :

git checkout HEAD <filepath>


Choix de la branche à fusionner :

git checkout <branch>  <filepath>

7.10.3 Merger une branche distante - branch merge

git checkout master
git branch -a -v
git merge remotes/origin/BOU/addStudyExamples

7.10.4 gérer les conflits lors des merges/fusions

Le cas imprévu :

git pull lex256 master
git checkout --theirs facture/facture.ods
git add -facture/facture.ods
git pull lex256

Le cas prévisible :

git pull -s ours
git pull -X theirs

7.11 Branches

7.11.1 Supprimer une branche

exemple :

git branch -d sph_rpa-1.0.0.0
git branch -D sph_rpa-1.0.0.0 # sans confirmation

7.11.2 Lister les branches - fetch, branch

exemple :

git fetch -p
git branch -a -v

7.11.3 Récupérer / changer une branche distante - fetch, checkout --track

git fetch <remoteName>
git checkout --track <remoteName>/<remoteBrancheName>

exemple :

git fetch -p
git branch -a -v
git checkout remotes/origin/BOU/addStudyExamples

7.11.4 Créer une nouvelle branche - branch

git branch <newBranchName> <refBranchName> 
git branch v0.1 master
git checkout v0.1
git push origin at/v0.1

7.11.5 Partager une nouvelle branche - push <remoteName> <xx>/<topic>

git branch <xx>/<topic>
git co <xx>/<topic> 
git branch
...
git push <remoteName> <xx>/<topic>

7.11.6 Renomer une branche - git branch -m <new-name>

7.11.6.1 Rename your local branch

If you are on the branch you want to rename:

git branch -m new-name

If you are on a different branch:

git branch -m old-name new-name
7.11.6.2 Delete the old-name remote branch and push the new-name local branch
git push origin :old-name new-name
7.11.6.3 Reset the upstream branch for the new-name local branch
git push origin -u new-name

7.12 Tag

7.12.1 Taguer une version d'application (pushable)

git tag -a  cloggingGridModel_rpa-1.0.0 -m "cloggingGridModel version rpa-1.0.0"

7.12.2 Le dernier commit - tag -s -a v0.1 -m "FPL 0.1"

Préparer une clé gpg

gpg --gen-key
gpg --list-keys


Real name: Arthur Torossian
Email address: arthur.torossian@edf.fr
You selected this USER-ID:
    "Arthur Torossian <arthur.torossian@edf.fr>"


/home/atoross/.gnupg/pubring.gpg
--------------------------------
pub   3072D/DDDFB557 2013-07-05
uid                  Arthur Torossian <arthur.torossian@edf.fr>
sub   3072g/999BED15 2013-07-05



Il faut créer de tag avec annotation sinon le tag est lightweight dans ce cas c'est juste un pointeur sur le nœud du commit.

git tag -s -a v0.1 -m "FPL 0.1"
git tag -v v0.1
git show v0.1



L'option -s permet de signer avec le mail comme clé.

7.12.3 Un ancien commit - tag -s -a v0.1 -m "FPL 0.1" 979e98c

git tag -s -a "ciclope.py_x5-1.2.0.1" -m "ciclope.py version x5-1.2.0.1" 979e98c

7.12.4 Lister les tags sans notations (lightweight tags, annotated tags)

git for-each-ref refs/tags/ --format '%(objecttype) %(refname:short)'

7.12.5 Un ancien commit - tag -s -a v0.1 9fceb02

git tag -s -a v0.1 9fceb02

7.12.6 Partager les tags - push origin v0.1

git push origin v0.1

ou

git push origin --tags

7.12.7 Supprimer un tag local

git tag -d alpha-3.0.0.0

7.12.8 Supprimer un tag distant

git push --delete origin alpha-3.0.0.0

7.13 Chercher (find) un mot/expression dans un fichier dans toutes les versions

git rev-list --all

7.14 Supprimer

7.14.1 Supprimer un répertoire - rm -r fuelCell

git rm -r  fuelCell
git rm -r lightModel   airportsTraffic

7.14.2 Supprimer un répertoire / fichier dans toute l'historique - git filter-branch -f --tree-filter

git filter-branch -f --tree-filter "rm -rf  ./donnees/studyExamples  " --prune-empty -- --all
git push --force

7.15 Sous base ou module

7.15.1 Organisation

Pour l'instant il n'y pas moyen d'ajouter plusieurs dépôts pour un sous module. Dans ce cas il vaut mieux ajouter un dépôt local avec un chemin relatif (exemple : ../modAtTool) et ainsi on pourra gérer les dépôts distants depuis la base locale.

7.15.2 Ajouter un sous module - une autre base git dans un sous répertoire

git submodule add  https://git.forge.pleiade.edf.fr/git/verona.git modAtTool

Il faut tout de suite configurer la liaison avec une branche par exemple ici ciclope. Ainsi chaque utilisateur du module a sa propre version.

git config -f .gitmodules submodule.modAtTool.branch ciclope

7.15.3 Configurer la branche du sous module

git config -f .gitmodules submodule.modAtTool.branch ciclope
more .gitmodules
[submodule "modAtTool"]
	path = modAtTool
	url = https://git.forge.pleiade.edf.fr/git/verona.git
	branch = ciclope

7.15.4 Récuprer un sous module - puller un sous module

La première fois :

git submodule update --init --recursive

Après on peut utiliser la commande pull lui-même :

git pull --recurse-submodules

7.15.5 Changer l'url du sous module

git config --file=.gitmodules submodule.modAtTool.url ../modAtTool
git config --file=.gitmodules submodule.modAtTool.branch chenal3
git submodule sync
git submodule update --init --recursive --remote

7.15.6 Renommer un sous module

git mv modAtTool/ modExtTool
gcm "rename extern tool"

7.15.7 Supprimer un sous module

git rm modExtTool
gcm "delete extern tool"

7.15.8 Cloner une base avec les sous modules

Pour une version ≥ 2.13 :

git clone --recurse-submodules  https://...myBase.git myBase

7.15.9 Voir l'historique - git-log

  • La doc en ligne : [1]

D'un fichier donné:

git log --pretty=format:"%h %cd %Cgreen%s %Cred%d" \
        --graph  --abbrev-commit  --date="format:%Y/%m/%d %Hh%M" \
        --follow ciclopeM3z.py

Globalement:

# court
git log --pretty=format:"%h %cd %Cgreen%s %Cred%d" --graph  --abbrev-commit  --date="format:%Y/%m/%d %Hh%M"
# long
$git log --pretty=format:"%h %cd %cn %Cgreen%s %Cred%d" --graph  --abbrev-commit --date="format:%Y/%m/%d %Hh%M"

8 Comment s'organiser

GitCycleGtaph.png
Fig. n°2 le graph

8.1 Créer une nouvelle base

cd <locGitBaseRep>
git init
touch README
git add README
git commit -m "init"
git branch

8.2 Exporter ou archiver hors base - archive

git archive --format=tar HEAD  ./pivotLanguage/ | gzip > test.tar.gz

8.3 Créer un dépôt commun

Sur le serveur distant:

mkdir <remGitBaseRep>
cd <remGitBaseRep>
git init --bare
git update-server-info
cd ..
chown -R www-data:atoross <remGitBaseRep>


L'option --bare évite d'avoir les fichiers locaux de travail.

Sur l'une des machines de travail ou base de travail:

git clone https://claumep1.der.edf.fr/git/hydro myHydro
git br


La commande git br ne renvoie aucune branche. Il faut au minimum ajouter(add) un fichier et enregistrer l'ajout (commit) afin que la branche par défaut master apparaisse :

git add conv.py
git cm -m  "test python file reading med file" conv.py
git br


Cette fois-ci nous avons bien la branche master :

* master

Rqe-5

Je ne sais toujours pas pourquoi il faut ajouter absolument un fichier pour que la branche master puisse exister localement !

Attention tout n'est pas fini

Si on utilise https/http, pour pusher il faut ajouter son login dans .git/config sinon le push ne passe pas !

[remote "origin"]
	url = https://atoross@at.bht.fr/git/atTools.git

Finallement on peut pusher :

git push --set-upstream  origin  master


Pour pouvoir « pusher » et « puller » il faut également ajouter au moins un fichier :

git add readme.txt
gcm "init"
git push

8.4 Le rôle de l'intégrateur

cd integratorLocGitBase/
evim intFile.txt
git add intFile.txt
git cm -m "int-01"
git lg origin/master
git push
git lg origin/master
git add intFile.txt
git cm -m "int-02"
git push
git lg origin/master
git fetch
git co --track origin/ar/topic-u2-01 
git co master
git branch 
git merge ar/topic-u2-01 
#git merge --log --no-ff ar/topic-u2-01 
git push 
git co ar/topic-u2-01 
git pull
more dvlp2File.txt 
git co master
git merge --log --no-ff ar/topic-u2-01 
git push
git config user.name "Integrator"
git config --list
git status
more intFile.txt 
git add intFile.txt
git commit -m "int-03"
git push
git lg origin/master
git remote show origin
git lg
git st
git add intFile.txt
git cm -m "int-04"
git push
git lg
git add intFile.txt
git cm -m "int-05"
git push
git lg
git fetch origin
git co --track origin/at/topic-u1-01 
git br
git status
git br
git sw master
git br
git merge --log --no-ff at/topic-u1-01 
git status
git push
git slg

8.5 Rôle de l'utilisateur 1

cd dvlp1GitBase/
git lg  origin/master
git pull
branch at/topic-u1-01
git sw at/topic-u1-01 
git branch
git add dvlp1File.txt
git status
git cm -m "dvlp01-01"
git lg
branch
push origin at/topic-u1-01 
git co master

8.6 Rôle de l'utilisateur 2

git clone   file:///home/atoross/dvlp/gitTests/remGitBase dvlp2GitBase
cd dvlp2GitBase/
git br ar/topicu2-01
git sw ar/topicu2-01 
git br
git config user.name "Arturo Torossiani"
git pull
git lg
git branch ar/topic-u2-01
git branch
git checkout ar/topic-u2-01 
git branch
git cm -am "dvlp02-01"
git add dvlp2File.txt
git cm -am "dvlp02-01"
git push origin ar/topic-u2-01 
git branch
git cm -am "dvlp02-02"
git push origin ar/topic-u2-01
git lg
more dvlp2File.txt 
git slg

8.6.1 Créer un patch

-<n>
Prepare patches from the topmost <n> commits.

git format-patch master -1


[2]

9 git-svn

10 Mes bases Git

11 Git servi par apache

11.1 Créer une base sans les fichiers locaux - Create a bare repository

bare
nue, sans la partie de travail
cd <remGitNameRep>
git init --bare
git update-server-info

ou à partir d'une base existante

cd <remGitNameParentRep>
git clone --bare <remGitNameUrl> <GitName>.git
git update-server-info

11.2 Configurer apache

on peut ajouter un fichier git :

################################################################################
# git
################################################################################
Alias /git/ "/local01/www/arth/git/"
<Location /git>
    DAV on
    Options -Indexes

    <RequireAll>
    Require all granted
    SSLRequireSSL

    AuthType Basic
    AuthName "Git"
    AuthBasicProvider file
    AuthUserFile "/etc/apache2/passwd/passwords_admin"
    <RequireAll>
        Require valid-user
    </RequireAll>
    </RequireAll>
</Location>
a2ensite git
a2enmod dav
a2enmod dav_fs
/etc/init.d/apache2 restart

Pour terminer il faut lire Créer une base commune distante

12 Problèmes rencontrés

12.1 Le problème de dev.azure.com IMPOSSIBLE de désactiver

Voir globalDoc/gitlab.txt.

Solution :

git config --edit --system

12.2 Manque de mémoire

remote: Counting objects: 11191, done.
remote: warning: suboptimal pack - out of memory
remote: fatal: Out of memory, malloc failed (tried to allocate 348936731 bytes)
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header


Résolution :

Git LFS (Large File Storage) est une extension de Git développée par Atlassian, GitHub, et quelques autres contributeurs open source, qui réduit l'impact des fichiers volumineux dans votre dépôt en téléchargeant paresseusement les versions de ces fichiers. [3]

Installation :

git lfs install

13 Liens

13.1 Rsync avec git bash sous windows

13.2 Autres

13.3 Clients

13.4 Serveur web