Comment utiliser git commit --fixup
, git commit --amend
et git rebase -i --autosquash
pour avoir un historique de commits clean avant de soumettre une PR.
Attention, contrairement a l'exemple de l'article, il est fortement déconseillé d'utiliser ces commandes sur la branche master
ou sur une branche sur laquelle on est pas le seul a travailler si l'on a déjà "pushé" les commits. Par ailleurs , Il vaut mieux utiliser git push --force-with-lease
.
git worktree
permet de travailler sur une branche d'un repo dans un répertoire de travail dédié.
C'est super utile pour éviter de jongler avec les git stash
quand on travaille sur plusieurs branches en //.
Particulièrement quand on a lancé un build local super long en local et qu'on aimerait bien travailler sur une autre branche en attendant que le build termine.
git log --all --grep "pattern"
pour chercher dans les messages de commit git.
Une bonne explication du fonctionnement interne de git et de l'arborescence du répertoire .git
. A noter que la 2ème partie de l'article sur les rebases est également très intéressante.
Des bonnes pratiques pour optimiser l'utilisation de repos git volumineux avec jenkins (reference repos, shallow clone, sparse checkout...)
Pour générer un fichier ~/.gitignore_global
en fonction de son environnement.
Perso j'utilise https://www.gitignore.io/api/go,vim,gpg,code,linux,macos,emacs,python,packer,archive,ansible,vagrant,archives,terraform,jetbrains,virtualenv
Ensuite un petit coup de git config --global core.excludesfile ~/.gitignore_global
et on est tranquille
Pour visualiser l'historique d'un fichier sur GitHub
Jenkins permet d'utiliser un repository de référence local en tant que cache pour les jobs.
- créer un mirroir du repository en local:
git clone --mirror git@github.com:my-user/my-repository.git
- configurer le job jenkins pour utilise le repo de référence:
Git SCM
=>Additional Behavior
=>Advanced clone behaviours
=>Path of the reference repo to use during clone
- mettre à jour régulièrement le repo de référence:
git fetch --all --prune
Les jobs vont alors utiliser ce repo local en tant que cache ce qui peut grandement accélérer les temps de builds pour les repos bien lourds.
Example d'utilisation de pre-commit git pour forcer le formattage de code python avec black et flake8
Super utile pour créer, reviewer et merger des PR GitHub depuis VS Code
Script utile pour réécrire l'historique d'un repo git en changeant le nom et l'email de l'auteur
Pour mettre à jour un repo fork à partir du repo upstream:
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
$ git fetch upstream
$ git checkout master
$ git merge upstream/master
$ git push origin master
Comment utilisé un repo git chiffré Keybase en tant que submodule
pour stocker les secrets qu'on utilisera au sein d'un repo git de code
GitHub-backup est un outils développé en Haskell qui permet de sauvegarder les metadata d'un repos GitHub (issues, comments, watchers, ...)
Un webhook listener en Python avec Flask pour exécuter des actions automatiquement après un push git sur GitHub ou BitBucket:
import os
from sys import platform as _platform
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def tracking():
data = request.get_json()
commit_author = data['actor']['username']
commit_hash = data['push']['changes'][0]['old']['target']['hash'][:7]
commit_url = data['push']['changes'][0]['old']['target']['links']['html']['href']
print 'Webhook received! %s committed %s: %s' % (commit_author, commit_hash, commit_url)
return 'OK'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
Fetch permet de récupérer des fichiers ou répertoires spécifiques à l'intérieur d'un repo git sans avoir à cloner tous le repos.
C'est pratique quand on a besoin de récupérer un seul fichier (script ou fichier de conf par exemple...) dans un repo.
Une liste d'alias git pour se simplifier la vie
Un module Fabric pour gérer les déploiements via Git.
L'auteur utilise des Git Push depuis un repo local vers le repo sur le serveur cible au lieu d’exécuter le git pull directement sur le serveur cible.
cf. http://dan.bravender.net/2012/5/11/git-based_fabric_deploys_are_awesome.html
Quick guide pour git
Template a utiliser pour avoir des messages de commit plus détaillés