Tutoriel GITIntroductionVoici un petit tutoriel qui vous permettra de prendre en main GIT, le gestionnaire de versions distribué. Installer GITVoici le code pour installer GIT avec ubuntu sudo apt-get install git-core git-doc git-email gitweb gitk Bien configurer son GITVoici comment s'identifier dans git git-config --global user.name "Votre Nom ou pseudo ou ce qui vous référence" git-config --global user.email "monemail@exemple.org" Votre configuration est enregistrée dans le fichier ~/.gitconfig (répertoire racine de votre compte) [user] email = monemail@exemple.org name = Votre Nom ou pseudo ou ce qui vous référence Mais ce fichier peut être édité directement si vous le souhaitez Créer un projet GITSetup a public GIT repository mkdir mondepot cd mondepot git init git add . git commit Pour le faire exister en remote git remote add origin <url du depot distant> git push origin master Récupérer la branche distante "gh-page" sous le nom "origin" (sur une seule ligne) git remote add -f -t <fetchedrepo> -m <mergedrepo> origin <url repo> -t = track -m = for merge git remote add -f -t gh-pages -m gh-pages origin git@github.com:pascalfares/pisae2013.git Appliquer tous les patchs d'origin dans le master vide git merge origin Maintenant "origin" est gh-pages et non master comme avec un git-clone. On peut faire les git-fetch origin et git-rebase origin comme d'habitude. Clones a repository into a new directory $ git-clone git@github.com:pascalfares/pisae2013.git Synchronisation du dêpot $ git-fetch origin $ git-log master..origin $ git-rebase origin Git et les branchesTravailler avec plusieurs branches dans GIT $ git-clone git@github.com:pascalfares/pisae2013.git
$ git-branch * master $ git-branch -r origin/HEAD -> origin/master origin/gh-pages origin/master $ git-clone git@github.com:pascalfares/pisae2013.git gh-pages * master $ git checkout gh-pages $ git status $ git checkout -f $ git rebase origin/master Avant de commiter, vous devez vérifier ce qui a été modifié $ git diff ou $ git diff <fichier ou répertoire> approuver la modification avec $ git add <fichier ou répertoire> Si on modifie encore un fichier approuvé, git est assez intelligent pour montrer le diff entre le dernier git-add et la nouvelle modification. Vérifier qu'on n'oublie rien $ git status Vous montrera notamment les fichiers qui n'ont pas été ajoutés (se demander alors pourquoi). On peut maintenant faire le commit $ git commit Vérifier si le chef du projet sur lequel on contribue n'a pas des préférences pour le message de commit. Revenir à un commit précédentIl est possible d'annuler le ou les derniers commits. Exemple pour annuler le dernier commit : $ git reset master~1 Ce qui fera disparaître toute modification. Pour annuler les deux derniers commits $ git-reset --soft master~1 L'option "--soft" conserve les modifications. On peut alors refaire son commit. Attention car faire disparaître des commits modifie l'historique. Si vous aviez fait un miroir juste avant, git refusera d'écrire sur le miroir sans l'option "-f". Pour annuler un commit plus loin, et vu qu'on ne peut/doit pas modifier l'historique, il faut appliquer le patch inverse : $ git revert <ID du commit> Git va préparer un commit "Revert of 'message du commit'" en appliquant le patch inverse, s'il n'y a pas de conflit bien sûr. Vous devrez garder ces deux commits dans votre historique. Git log --diff-filterL'option --diff-filter permet de filtrer les commits ayant ajouté/supprimé/copié/modifié/renommé ... --diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]] Valeurs possible pour --diff-filter
DiversAfficher les log des différents commit effectués $ git log --color Pour toujours avoir la couleur, faites un alias bash (voir "Envoi de patch" plus haut). Afficher la liste des fichiers du dépôt git $ git ls-files Visualiser le delta entre la branche active (gh-pages) et la branche de base de devis (origin) $ git log --oneline -r gh-pages..origin
"--oneline" permet d'afficher un commit par ligne. Pour cloner une branche de itools avec git: $ git show --stats Créer et utiliser un miroir git$ grep GIT ~/.bashrc export GIT_AUTHOR_NAME="Moi ..." ... $ cd ~/sandbox $ cg-clone /var/git/PvxCoreApplication--luis PvxCoreApplication--moi $ cd PvxCoreApplication--moi $ cg-admin-setuprepo -g users /var/git/PvxCoreApplication--moi $ cg-branch-add mirror /var/git/PvxCoreApplication--moi $ cg-push mirror Construire et envoyer un patch$ git format-patch origin $ git-send-email --smtp-server smtp.nerim.fr --to norman@khine.net \ 0001-Change-the-storage-for-companies-and-addresses-now.patch Pour appliquer le patch $ git-am 0001-Change-the-storage-for-companies-and-addresses-now.patch Pour utiliser les alias de git-pushCréer l'alias "mirror" dans .git/config [remote "mirror"] url = git@github.com:pascalfares/pisae2013.git Ce qui va mirrorer toutes les branches et tous les tags. Pour ne mirrorer que master [remote "master"]
url = git@github.com:pascalfares/pisae2013.git
push = master:master
Si on a fait un git-rebase qui a modifié l'historique, on doit ajouter un -f: git push -f mirror Astuce : ajoutez un alias bash "git-mirror='git-push mirror'". Ne mettez pas "-f" dans l'alias. BranchesPour créer une nouvelle branche depuis master $ git checkout -b newname Pour supprimer une branche $ git branch -d oldname Pour supprimer une branche distante $ git push origin :oldname TagsPour lister les tags $ git tag Pour créer un tag $ git tag new_tag Pour supprimer un tag local $ git tag -d tag_name Pour pusher un tag $ git push origin --tag Pour supprimer un tag distant $ git push origin :refs/tags/tag_name Pour renommer un tag $ git tag new_tag old_tag $ git push origin --tag $ git push origin :refs/tags/old_tag Modifier son dernier commitIl peut être utile de modifier son dernier commit par exemple :
Dans ce cas utilisez la commande $ git-commit --amend Compter le nombre de commit par commiteur: $ git shortlog -sn Packer son dépôt Il est conseillé de régulièrement packer son dépôt. Pour cela on peut par exemple utiliser $ git gc Limiter la taille des packsPour éviter de se retrouver avec des packs de plusieurs giga peu évidents à manipuler, on peut restreindre la taille maxi des packs. Dans son .gitconfig ou le .git/config d'un dépôt, on peut ajouter les informations ci-dessous (pack de taille maxi 512Mo): [pack] packSizeLimit = 512m |
Tutoriels >