Transférer un clone GIT d'un serveur vers un autre (avec tout son historique)
git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin
Une info complémentaire, si tous tes répos Git sont accessibles avec le même mot de passe, tu peux taper ceci à la place :
git config --global credential.helper store
Pour faire simple voici les deux commandes à utiliser au sein de votre répo.
Pull only :
git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose
Pull / Push :
git daemon --base-path=. --export-all --enable=receive-pack --reuseaddr --informative-errors --verbose
Pour Utiliser le répo :
git clone git://127.0.0.1/
Rappel : Le port part défaut du protocol
Un tuto pour embarquer Git dans vous applications Java. En résumer JGit est à la fois une API Java mais aussi un exécutable bash permettant d'interagir avec un répo Git.
Un concurrent de GitLab à tester
Un bon article sur le Git rebase pour Chlouchloutte. J'aime bien le message de fin :
" Cette commande est très complète, mais il faut garder à l’esprit qu’elle modifie l’historique, et donc ne doit être appliquée que sur des commits locaux, donc avant le push. S’il est tout de même possible de modifier une partie de l’historique déjà poussé, via un git push --force, cela est à éviter dans la majorité des situations, car cela causera des problèmes aux personnes ayant déjà récupéré les commits modifiés."
Décrotter Git quand Git vous lâche.
Un tuto sur Git Glow. Je le lirai en détail plus tard. En gros l'outil permet d'avoir une vision feature de ses commits git. Sympa.
Pour définir son nom de commiter :
git config --global user.name "Anti CHESSE"
git config --global user.email "antichesse@cakeozolives.com"
Pour que Git ignore les certificats auto-signés (cela créé une faille de sécurité) :
git config --global http.sslVerify false
Pour que Git affiche correctement les accents dans la console :
git config --global core.quotepath off
git config --global i18n.logoutputencoding utf8
git config --global i18n.commitencoding utf8
git config --global --unset svn.pathnameencoding
Pour que Git ignore enfin les changements de droits dans les systèmes de fichiers Linux / Windows:
git config --global core.fileMode false
N.B : si la dernière astuce ne marche pas, penser à supprimer la ligne fileMode = true dans votre fichier .git/config
Très très bonne idée pour des rollback facile !
Un tuto sur Git remonté par Roudoudoutte (thanks).
Un wrapper pour utiliser Git à travers PHP. J'avais exactement besoin de ça, merci tout plein :D
SUPPPPPPPPPPPPPPPER UTILE Je copie-colle !
Ce qu'il faut éviter
Pour annuler des commits, il existe la commande git reset.
git reset --hard HEAD~1
HEAD is now at 444b1cf Rhoo
Celle-ci est pertinente tant que les commits n'ont pas été poussés. Git vous retiendra au push d'ailleurs :
git push
To /tmp/repo
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '/tmp/repo'
En effet, à partir du moment où un commit existe sur le serveur, il est potentiellement utilisé par des collaborateurs (mergé, à la base d'une branche, etc.). On pourrait faire le sale et forcer le push :
git push -f
Total 0 (delta 0), reused 0 (delta 0)
To /tmp/repo
+ b67c343...444b1cf master -> master (forced update)
Mais il y a beaucoup mieux !
Ce qu'il faut faire
Annuler un commit, c'est finalement appliquer l'inverse de son diff !
On peut rediriger le diff des commits à annuler vers la commande patch --reverse :)
git diff HEAD^ | patch --reverse
Pour faire plus simple, il y a git revert !
Par exemple pour annuler les trois derniers commits :
git revert HEAD~3..HEAD
Ou pour annuler un commit en particulier :
git revert 444b1cff
Il suffit alors de pousser proprement le commit obtenu sur le serveur. Les éventuels collaborateurs qui avaient basé leur travail sur les commits annulés devront gérer les conflits au moment venu...
Un peu tout dans ce post. Ce qui m'intéresse c'est comment réécrire l'historique de commits avec Git.
Pour les débutants sur Git, voici un petit rappel.
1) Git ne vous permet pas de commiter tout de suite. Vous devez d'abord ajouter les fichiers modifiés dans un panier temporaire de choses à commiter (ce panier est appelé "stage"). Et c'est uniquement ce qui se trouve dans ce panier qui sera commité avec la commande "git commit".
2) Pour ajouter au panier vous faites simplement :
- git add
- git add . (ça c'est pour ajouter tous les fichiers modifiés d'un seul coup)
3) Pour commiter c'est simple :
- git commit
- git commit -m "Message du commit"
4) À l'instar de Mercurial, Git dissocie le commit (i.e je versionne mon travail pour moi en local) du push (je transmet mon travail à mes copains). Pour propager son travail il faut faire :
- git push origin
5) De la même manière, Git dissocie le commit et le push de la récupération du travail des copains. Pour récupérer le travail des autres il faut faire :
- git pull origin
Quand vous travaillez sous Git, ce serait sympa d'avoir des jolies couleurs pour séparer dans votre prompt : user / chemin / branche
Ajouter ceci à la fin de votre fichier ~/.bashrc.
# Setting GIT prompt
c_cyan=`tput setaf 6`
c_red=`tput setaf 1`
c_green=`tput setaf 2`
c_sgr0=`tput sgr0`
branch_color() {
if git rev-parse --git-dir >/dev/null 2>&1
then
color=""
if git diff --quiet 2>/dev/null >&2
then
color=${c_cyan}
else
color=${c_green}
fi
else
return 0
fi
echo -n $color
}
parse_git_branch() {
if git rev-parse --git-dir >/dev/null 2>&1
then
gitver="["$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')"]"
else
return 0
fi
echo -e $gitver
}
# It's important to escape colors with \[ to indicate the length is 0
PS1='\[\033[1;34m\]\u\[\033[1;37m\]@\[\033[1;31m\]\h\[\033[1;37m\]:\[\033[33m\]\w \[$(branch_color)\]$(parse_git_branch)\[${c_sgr0}\]\[\033[37m\]\n\$'
Je commence de lister un ensemble de commandes Git utiles.
Comment récupérer la liste de tous les auteurs ayant contribué à un répo :
git log --format='%aN' | sort -u
Comment commiter à une autre date que la date du jour ?
git commit --date="Wed Feb 16 14:00 2011 +0100"
==> Le format est obligatoirement celui fournit dans l'exemple.
Comment afficher le contenu d'un fichier à une date précise :
git show ${ID_COMMIT}:Test.txt
==> À noter que ${ID_COMMIT} peut être un tag, un hash ou une branche.
Comment rédiger ses commentaires avec Git, Mercurial ou SVN. Je me le garde pour plus tard
19 commandes Git à retenir.
Un tutoriel très très simple (et visuel) sur la manière de merger et rebaser des branches dans Git.