DevelVersionManagement



Git

http://fr.wikipedia.org/wiki/Git

http://git-scm.com/

Tutoriels

https://openclassrooms.com/courses/gerer-son-code-avec-git-et-github
https://www.grafikart.fr/formations/git
https://www.christopheducamp.com/2013/12/15/github-pour-nuls-partie-1/

Playgrounds / tutoriels interactifs

Learn Git Version Control using Interactive Browser-Based Scenarios https://www.katacoda.com/courses/git
Learn Git Branching https://learngitbranching.js.org/

Livres

ProGit

Exemple d'utilisation

Cloner un repository distant

git clone https://giturl

Connaître l'état d'un repository

git status

Connaître l'historique d'un repository

git log
Appuyer sur `q` pour quitter

Envoi d'un ou plusieurs fichiers


Ajout dans le repository local

Ajouter `mon_fichier` dans l'index
git add -v nom_fichier

Faire un commit
Cela signifie stocker dans le repository les modifications

- Uniquement pour les fichiers sur lesquels on a fait un add après modification
git commit -m "Work In Progress"

- Sur tous les fichiers qui sont déjà dans l'index (-a)
git commit -v -a -m "WIP"

Remarque : il vaut mieux utiliser des messages de commit "judicieux"

Synchronisation

Synchronisation (montante) du repository local vers le repository distant

git push

Synchronisation (descendante) du repository distant vers le repository local

git pull

Interface graphique (GUI)

TortoiseGIT http://code.google.com/p/tortoisegit/
Source Tree https://www.sourcetreeapp.com/
GitHub Desktop https://desktop.github.com/

Workflow

Comparaison Git / SVN

http://stackoverflow.com/questions/2745076/what-is-the-difference-between-git-commit-and-git-push

Workflow git

http://makina-corpus.com/blog/metier/2014/un-workflow-git-efficace-pour-les-projets-a-moyen-long-terme
http://nvie.com/posts/a-successful-git-branching-model/

Conseils

Utiliser au début du projet uniquement la branche master
Puis ensuite utiliser des branches pour résoudre un bug, ajouter une fonctionnalité...
Faire des Pull-Requests (PR) pour fusionner le code d'un fork avec le projet upstream

https://xkcd.com/1597/

Git derrière un proxy

Rajouter dans ~/.bashrc
export http_proxy="server.proxy.com:8080"
export https_proxy="server.proxy.com:8080


ou

Afficher
git config --global http.proxy

Définir le proxy
git config --global http.proxy cache.domain.com:3128

Astuces

.gitignore

Ajouter dans ~/.config/git/ignore (général) ou dans .gitignore d'un repository la liste des fichiers à ignorer
*.pyc

Conserver le mot de passe

git config --global credential.helper 'cache --timeout 18000'

timeout: durée de conservation du mot de passe en secondes

Plus d'informations sur https://git-scm.com/book/fr/v2/Utilitaires-Git-Stockage-des-identifiants

Alias Bash pour un comportement proche de SVN

Mettre dans ~/.bashrc

Commit puis push sans message

alias gitcon="git commit -v --allow-empty-message -am ; git push;";

Commit puis push

alias gitcopu="git commit -v; git push;";

Ajout fichier verbeux

alias gitadd='git add -v'

Script commit / push avec message

dans ~/bin/gitcom
#!/usr/bin/env bash
git commit -v --allow-empty-message -am "$1"; git push;


Alias Git pour autoriser un commit sans message

Création d'un raccourci

git config --global alias.nco 'commit -a --allow-empty-message -m " "'

Utilisation

git nco au lieu de git commit
(n = no message)

Fichier ~/.gitconfig
[user]
	name = ...
	email = ...
	mail = ?
[github]
	user = ...
[push]
	default = simple
[credential]
	helper = osxkeychain
[alias]
	nco = commit -a --allow-empty-message -m \"\"


ou

modifer dans repository/config ?

[remote "origin"]
	url = https://USER@github.com/repos/repos.git


git config credential.helper store

voir config

git config --list

git config --global user.name "..."
git config --global user.email "...@domain.com"
git config --global github.user "..."


Définir l'éditeur par défaut pour les messages de commit

Par défaut l'éditeur est vi https://fr.wikipedia.org/wiki/Vi
https://stackoverflow.com/questions/10564/how-can-i-set-up-an-editor-to-work-with-git-on-windows

Branches

Lister les branches distantes

git branch -r
-r : remote

Récupérer le code d'un repo Git d'une autre branche

git checkout autre_branche

Créer une branche et passer sur cette branche

git checkout -b nom_branche

Synchroniser fork / upstream

Configurer une source distante upstream d'un fork

git remote add upstream https://github.com/ORIGINAL_USER/REPOS  (.git)


cela va rajouter

[remote "upstream"]
	url = https://github.com/ORIGINAL_USER/REPOS
	fetch = +refs/heads/*:refs/remotes/upstream/*


au fichier .git/config du repository

Miror repository

Sync from remote to local (with all branches)

git clone --mirror url://to/remote.git local.git


Synchroniser

Fork
Synchoniser son fork depuis la version upstream
https://help.github.com/articles/syncing-a-fork/

git checkout master
git reset --hard  # !!! suppression des modif locales !!!
git fetch upstream
git merge upstream/master
git push


Origin
Synchroniser un repository local en reprenant la version distante comme référence
(perte de toute les modifications locales)

git checkout master
git reset --hard  # !!! suppression des modif locales !!!
git fetch origin
git merge origin/master --strategy-option theirs
git push


Supprimer la branche master

Est-ce vraiment une bonne idée ?
git checkout <some_other_branch>
git branch -D master
git checkout -b master upstream/master
git config branch.master.remote origin


Squash commits

Remplacer 3 derniers commits par 1 seul
git rebase -i HEAD~3


Remplacer

pick MY COMMIT MESSAGE
pick 2nd COMMIT MESSAGE
pick 3rd COMMITMESSAGE


par

pick MY COMMIT MESSAGE
s 2nd COMMIT MESSAGE
s 3rd COMMITMESSAGE


s=squash

Supprimer les commentaires inutiles (dd dans vi) et ne conserver que

MY COMMIT MESSAGE


git push -f


Enlever du repository fichiers/répertoires selon .gitignore

git rm -r --cached .
git add .
git commit -m ".gitignore fix"
git push


Interface gestion de plusieurs projets

gws https://streakycobra.github.io/gws/ workspace / espace de travail git
gitcheck https://github.com/badele/gitcheck
tsrc


Prompt Git

https://github.com/magicmonty/bash-git-prompt

Interface graphique

ungit

pre-commit

https://pre-commit.com/

ATTENTION DANGER

Supprimer un commit

ATTENTION ! A UTILISER AVEC PRECAUTION !

git reset --soft HEAD~1
git push -f


voir aussi :
- Mercurial
- ForgesLogiciels
- DevOps

There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki