Un tuto (en français) ludique pour apprendre a bien gérer les branches dans git
//
A playful tutorial (in french) to learn git branching
Les commandes principales de Git avec des illustrations pour rendre ça intuitif
//
Git main commands illustrated to ease their use
Comment surcharger git en un petit dépot
//
How to overload git using one little repository
Quelques exemples plus détaillés pour mieux construire son .gitignore
//
Few examples with more details to better build our .gitignore
Une fois n'est pas coutume, j'ai fait un commit avec un fichier trop volumineux dans mon repo git. Et encore une fois j'ai fait plusieurs commits avant de m'en rendre compte lors du push et son joli message d'erreur :
remote: error: File ThesisLinked/Publications/Molecular biology of the cell.pdf is 208.47 MB; this exceeds GitHub's file size limit of 100.00 MB
To git@github.com:Kumquatum/XXXXXX.git
! [remote rejected] master -> master (pre-receive hook declined)
error: impossible de pousser des références vers 'git@github.com:Kumquatum/XXXXXX.git'
/!\ ATTENTION : je ne saurais que trop vous conseiller de faire une sauvegarde de vos fichier avant d'entreprendre l'opération qui suit. Une mauvaise manip peut toujours arriver /!\
Voici donc comment s'en sortir. On commence par commit toutes les modifications courante (oui je sais ça rajoute encore plus de commit sur celui qu'on cherche à nettoyer mais ne vous inquiétez pas).
On va ensuite lister les commit non pushés pour essayer de se souvenir de celui qui nous fait doucement suer :
$ git log origin/master..HEAD
Une fois le commit incriminé identifié (ou non), on commence un joli rebase pour retourner en l'état du git :
$ git rebase -i origin/master
Vous arrivez dans une jolie interface manipulable avec nano dans laquelle il va vous falloir changer le "pick" du vilain commit en "edit" ainsi que tous ceux qui auront été fait après lui (et là si vous ne savez pas quel est le commit qui bloque, vous allez devoir mettre edit sur tous)
Ainsi :
pick 1fc6c95 Patch A
pick 6b2481b Patch B
pick dd1475d something I want to add (<= commit avec le fichier volumineux)
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
Devient :
pick 1fc6c95 Patch A
pick 6b2481b Patch B
edit dd1475d something I want to add
edit c619268 A fix for Patch B
edit fa39187 something to add to patch A
(Note : dans le cas où vous devriez reprendre depuis le premier commit, il se peut que vous ayez à travailler avec HEAD^ plutot que HEAD pour les $ git reset)
Une fois ceci fait, faites un ctrl+O pour valider cette modification, puis Entrée pour la sauver sous le nom prédéfini. Sortez ensuite de la via un ctrl+X.
Git va commencer l'opération de rebase, laissez lui quelques minutes (et n'ayez pas peur en voyant les fichiers de votre repo revenu X semaines en arrière, c'est normal). A l'issu de ceci, git va gentiment vous indiquer :
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
Parfait ! Votre commit a été remis à zero, c'est à dire que vous allez devoir re-ajouter tous les fichiers que vous souhaitez continuer de suivre, en faisant bien attention de ne pas ajouter le(s) fichier(s) trop volumineux. Exemple :
git add .pdf
git add MonDossier/
git reset HEAD MonDossier/monFichierTropGros.zip
git add toto.txt
Vos ajouts sont finis ? Faites un petit "$ git status" pour être sûrs. C'est bon ? On lance donc avec joie notre commande :
git commit --amend --no-edit (--no-edit vous permet de ne pas changer le message de commit)
Cette commande va écraser le commit précédent. Si jamais vous aviez à ce stade fait une erreur, vous pouvez toujours re-ajouter/supprimer des fichiers pour ensuite relancer la même commande.
On va ensuite passer au commit suivant à éditer :
$ git rebase --continue
Et on va recommencer la même opération qu'avant car le commit suivant a également été remis à zero. Continuez ainsi jusqu'à atteindre le dernier de vos commit fait, vous vous retrouverez ainsi dans votre état initial tout en ayant éliminé le(s) fichier(s) problématique(s).
Vous pouvez alors lancer votre push classique et voir tout vos commit passer sans soucis ! (Si ce n'est pas le cas, vous avez loupé un commit avec le(s) fichier(s) en question, recommencez alors du début :/).
Bon et sinon la prochaine fois pour éviter ça, pensez à bien gérer votre/vos .gitignore pour ne pas inclure ces fichiers, et à push réguliement histoire de ne pas avoir une dizaine de commit à modifier si cette erreur se produit tout de même.
Présentations en Markdown pour les developpeurs sur GitHub, GitLab et Bitbucket
//
Markdown Presentations For Developers on GitHub, GitLab and Bitbucket
Un generateur de fichier .gitignore tres utile pour ne pas sauvegarder les fichiers inutiles (recuperables, regenerables, trop volumineux, ...)
//
Usefull generator for .gitignore files in order to except useless files (recoverable, regenerable, too large, ...)
Des erreurs courantes en git et comment (parfois) s'en sortir
//
Somme usual errors with git and how (sometimes) get out of it
Visualiseur de l'organisation d'un dépot GitHub sous forme d'arbre interactif
//
GitHub repo organisation vizualiser by an interactive tree