git-logoIl existe un excellent tutoriel sur le site du zéro et un autre encore plus complet sur le site developpez.com. Il existe un tutorial simple de 6 minutes sur Youtube qui présente les commandes de base (création de repo, ajout de fichiers, modification et branching simple). Une série de tutoriaux complète est disponible ici (en anglais). Un autre tutoriel pour le paramétrage de Git et Eclipse est disponible sur ce site.

Ignorer le commit sur certain fichier pourtant gérés dans Git

Pour ignorer toute modification sur un fichier lors d’un commit, mais que ce fichier soit pourtant géré dans Git il suffit d’utiliser la commande git update-index:

git update-index –assume-unchanged chemin/vers le/fichier  

Pour reprendre le tracking:

git update-index –no-assume-unchanged chemin/vers le/fichier</span></div><div></div>  

Activer le .gitignore

Qu’est-ce que le fichier .gitignore ?
Ce fichier, présent à la racine de votre projet Git, permet de contrôler automatiquement les mises à jour Git que vous aller effectuer (envoi/réception… git push/git pull) en précisant les fichiers ou répertoires qui ne doivent pas être indexés.

Mon .gitignore ne fonctionne pas !
Dans certain cas, il est possible que votre fichier .gitignore ne fonctionne pas, notamment si ce dernier n’a pas été initialisé lors de la création de la première branche Git.
our régler ce problème, il faut nettoyer le cache du Git, en exécutant les commandes suivantes:

git rm -r --cached .  
git add .  

Attention : Pensez à faire une sauvegarde de votre projet Git en local. Pour ceux qui débutent avec le Git, voici un exemple de fichier .gitignore :

cache/*  
log/*  
web/uploads/*  
config/databases.yml  
config/propel.ini  
data/sql  
lib/filter/doctrine/base/Base*  
lib/form/doctrine/base/Base*  
lib/model/doctrine/base/Base*  
lib/model/om/*  
lib/model/map/*  

Quelle est la différence entre git pull et git fetch ?

  • git pull = git fetch + git merge autrement dit, si on raisonne pas exemple avec la branche de travail locale T d’un repository distant D :
  • git pull va récupérer tous les commits qui ont été effectués récemment sur D, télécharger les objets nécessaires à leur description, puis tenter de faire un merge de ces commits avec T
  • git fetch ne va que récupérer tous les commits qui ont été effectués récemment sur D et télécharger les objets nécessaires à leur description.

git fetch est une commande quasi-passive, elle ne risque pas de modifier la branche de travail locale.

git pull est une commande active qui initie une fusion de code (merge). Il faut donc avoir conscience, en fonction des arguments donnés et des arguments par défaut de la branche qui va être la cible de cette fusion.

Comment faire accepter un certificat SSL auto-signé (git via https)

Si votre serveur git utilise un certificat SSL auto-signé pour git par https, il faut alors indiquer à git que vous acceptez le certificat

git config http.sslVerify false  

ajouter l’option --global si vous voulez que les certificats ne soient pas vérifiés pour tous les repositories.

Le vocabulaire de Git

Term Definition
RepositoryA *repository* contains the history, the different versions over time and all different branches and tags. In Git each copy of the repository is a complete repository. If the repository is not a not a bare repository, it allows you to checkout revisions into your working tree.
Working treeThe *working tree* contains the content of a commit which you can checkout from the Git repository. You can modify the content and commit the changes again to the Git repository.
BranchesA *branch* is a named pointer to a commit. Selecting a branch in Git terminology is called *to checkout a branch*. If you working in a certain branch, the creation of a new commit advances this pointer to the newly created commit. Each commit knows its successor or successors. This way a branch defines it’s own line of descents in the overall version graph formed by all commits in the repository.You can create a new branch from an existing one and change the code independently from other branches. One of the branches is the default (typically named *master*).
TagsA tag points to a commit which uniquely identifies a version of the Git repository. With a tag, you can have a named point to which you can always revert, e.g. the coding of 25.01.2009 in the branch “testing”.Branches and tags are named pointers, the difference is that branches move when a new commit is created while tags always point to the same commit.
CommitYou commit your changes into a repository. This creates a new *commit object* in the Git repository which uniquely identifies a new revision of the content of the repository.This revision can be retrieved later, for example if you want to see the source code of an older version. Each commit object contains the author and the committer, thus making it possible to identify the source of the change. The author and committer might be different people.
URLA URL in Git determines the location of the repository.
RevisionRepresents a version of the source code. Git implements revisions as *commit objects* (or short *commits*). These are identified by a SHA1 secure hash. SHA1 ids are 160 bits long and are represented in hexadecimal.
HEAD*HEAD* is a symbolic link most often pointing to the currently checked out branch. Sometimes, e.g. when directly checking out a commit *HEAD* points to a commit, this is called *detached HEAD mode*. In that state creation of a commit will not move any branch.The versions before that can be addressed via *HEAD~1*, *HEAD~2* and so on. If you switch branches the *HEAD* pointer moves to the last commit in the branch. If you checkout a specific commit the *HEAD* points to this commit.
Staging areaThe *staging area* is the place to store changes in the working tree before the commit. It contains the set of changes relevant for the next commit.
Index*Index* is an alternative term for the *staging area*

Quelques Commandes

Log

git log --graph --pretty=oneline --abbrev-commit --decorate --all  

Branches

git show-branch -a  

Configuration

git config --global core.logAllRefUpdates true  
git config --global receive.denyDeletes true```  

Autres

Pour voir ses propres changements
git ls-files -d -m git diff HEAD  

Partager un répositoy

Il existe quatre manières de partager un repository avec Git. Celles-ci sont présentées sous forme de quatre exemples ci-dessous:

Par ssh

git clone user@<URL ou adresse IP>:repo/repository.git  

En utilisant un serveur Web (http ou https)

https://user@<URL ou adresse IP>:/repo/repository.git  

Par un chemin (réseau ou local)

git clone file://path/to/repo  

Ou en utilisant le protocole Git (un serveur faisant tourner le démon Git)

git clone git://<URL ou adresse IP>:/repo  

Références

http://gitolite.com/2-command-line-usage/git-tasks.html
http://www.vogella.com/articles/Git/article.html