git,

vers l’infini et au-delà!

Qui suis-je?

Grummfy

Jonathan Van Belle

@Grummfy

@Grummfy@mamot.fr

me@grummfy.be

github.com/grummfy

 

Contributeur open source : atoum, hoa, ...

Plan

  • git
  • git alias
  • git extension
  • Création d'extension
  • Trucs & astuces

git

  • DCVS
  • Le plus utilisé des CVS
  • Ecosystème conséquent

git : opération courante

  • commit
  • merge
  • push
  • pull
  • log
  • fetch
  • rebase
  • stash

git : config

  • set
    • git config --local user.name "grummfy"
    • git config user.name "grummfy"
  • get
    • git config --show-origin --get-all user.name
    • git config --local --get user.name
    • git config --global --get user.name
  • ​fichier
    • ​~/.gitconfig
    • .git/config

git : alias

  • ~ bash alias
  • relativement simple
  • a priori pas de paramètre ou de chaînage
[alias]
  st = status
  who = shortlog -sne
  co = checkout
  coma = commit -am
  pu = push
  undo = reset --soft HEAD^
  oneline = log --pretty=oneline --abbrev-commit --graph --decorate

git : alias avancé

  • utilisé la force de bash ;)
[alias]
  oneline = log --pretty=oneline --abbrev-commit --graph --decorate
  lc = !git oneline ORIG_HEAD.. --stat --no-merges # change since last pull

  addm = !git-ls-files -m -z | xargs -0 git-add # add modified files
  addu = !git-ls-files -o --exclude-standard -z | xargs -0 git-add  # add unknown files

  rem-extra = "!yolo() { git remote add $1 https://github.com/$2.git; }; yolo"

git alias : have fun

git extension

  • extension, plugins, sous commande, ...?
  • pas de documentation
  • facile à mettre en place
  • ⚠ concerne git ⇒ pas jgit, ngit, ...

git extension - flow

  • bien documenté
  • aide pour suivre un workflow git
  • git flow <command>
  • manipuler des branches, tag, merge, pull, push
  • bash script

git extension - subtree

  • extension ↦ intégré
  • alternative aux "submodules"
  • plusieurs repository dans un seul
  • git subtree <command>
  • bash script

git extension

  • But
    • Automatiser
    • Uniformiser
    • Simplifier
  • Code simple
  • bash embarqué sous windows ;)
  • ⚠ sécurité

Extension "homemade"

  • But identique
    • Automatiser
    • Uniformiser
    • Simplifier
  • Contexte
    • workflow
    • configuration
    • hook
    • opérations complexes

git author

  • échanger entre des profiles git
    • ​email
    • username
    • signature
  • git >= 2.13  configuration par dossier
  • un alias pourrait suffire
[alias]
  author-pro = !exec git config --local user.name "jvb" && \
    git config --local user.email "jvb@company.be"
  author-perso = !exec git config --local user.name "Grummfy" && \
    git config --local user.email "me@grummfy.be"

git deploy

  • lance les tests
    • make test
    • phing test
    • ...
  • ajout d'un tag
  • push le tag, un repository précis, une branche

git project

  • initialiser
    • configuration git
    • git submodule
    • composer
    • git hook
  • création de fichier
    • license
    • readme

git <company>

  • même idée que projet
    • framework
    • docker
    • configuration du server de CI
  • question-réponse sur un client/project

Trucs & astuces

  • Prévoir
    • autocomplétion
    • -h|--help
    • cas d'erreur ;)
  • git alias
  • bash alias
  • executable
  • KISS

Création

  • création d'un exécutable
    • script
    • chmod +x
    • commence par "git-"
  • dans un dossier du $PATH

Création : bash-completion

_MyAutocomplete ()
{
  local cur prev words cword
    _init_completion || return

  case "$cur" in
    -*)
      COMPREPLY=( $( compgen -W '--help -h -v' -- $cur ) );;
  esac

  return 0
}

complete -F _MyAutocomplete supercommande

complete -C monScriptDautocomplete.php supercommande

bash-completion & git

# see /usr/share/bash-completion/completions/git
_git_author ()
{
	case "$cur" in
	*)
		__gitcomp "perso pro"
		return
		;;
	esac
}

peut casser avec l'évolution de git

# ~.bashrc
source /chemin/vers/fichier/de/completion

Création : autocompletion

<?php

function animal($word) {
  return ['elephant', 'elephpant']; 
}

readline_completion_function('animal');
$reponse = readline('Quel est ton animal favoris? : ');

echo ((trim($reponse) == 'elephpant') ? 'Bravo' : 'bouuuuhhh') . PHP_EOL;

Question / Réponse

Création : $PATH

  • unix style (linux, *bsd, ...)
    • ~/bin
    • /usr/local/bin ?
  • windows
    • %GIT_HOME% ?
    • %PATH% ?

Création : git-auteur

#!/usr/bin/php
<?php

function switchConfig(string $user, string $email, string $sign) {
	passthru('git config --local user.name "' . $user . '"');
	passthru('git config --local user.email "' . $email . '"');
	passthru('git config --local user.signingkey "' . $sign . '"');
}

function help() { echo 'you ned help, too bad!', PHP_EOL; }

switch (@$argv[1]) {
        case 'perso': switchConfig('Grummfy', 'me@grummfy.be', 'AAAEEEVV'); break;
	case 'pro': switchConfig('jvb', 'jvb@company.tld', 'VVAAAEEE'); break;
	default: help(); break;
}

alias || extension

  • simple
  • peu de logique
  • pas de configuration
  • plutôt local
  • complexe a partagé
  • ± complexe
  • logique
  • configuration
  • dans votre langage de dev
  • facile a distribuer

⚠ git est un DCVS pas un task runner...

Questions?

commentaires ⇒

les slides y seront aussi ;)

git, vers l’infini et au-delà!

By Jonathan Van Belle

git, vers l’infini et au-delà!

git, la plupart d’entre nous l’utilise, on a tous une connaissance plus ou moins vague de git : commit, merge, push, pull et éventuellement des rebase ou encore des stash. Je ne vais pas vous parler de cela! Ce que nous allons voir c’est comment étendre git, comment faire en sorte que dans votre flux habituel de travail git soit là pour vous épauler avec quelques petit trucs et astuces. En gros, nous allons voir comment, au travers de git, créer des plug-ins vous permettant de vous épauler au quotidien, et tout cela dans notre langage favori ! Que cela soit pour votre boulot, pour vous, pour vos projets open source ou encore pour passer de l’un à l’autre, je vous garantis que vous repartirez avec de l’extra et que vous ne voudrez plus vous en séparer.

  • 2,550