O Lindo Git Hook

Fala pessoal!!!! Hoje eu estou aqui para trazer mais um dica para vocês, e a dica de hoje é o Git Hook!!

O Git Hook nada mais é que scripts que iram rodar “automagicamente” cada vez que você realizar uma ação como um pré/pós commit, push, etc.

Como Funciona isso?

Quando nós iniciamos um repositório no nosso projeto temos acesso a pasta .git com a seguinte estrutura

├── branches
├── hooks
├── info
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

O que nos interessa está dentro da pasta hooks. Para começar a funcionar nossos hooks basta tirar a extensão .sample dos arquivos, veja só como é um arquivo desses

#!/bin/sh
#
# An example hook script to check the commit log message.
# Called by "git commit" with one argument, the name of the file
# that has the commit message.  The hook should exit with non-zero
# status after issuing an appropriate message if it wants to stop the
# commit.  The hook is allowed to edit the commit message file.
#
# To enable this hook, rename this file to "commit-msg".

# Uncomment the below to add a Signed-off-by line to the message.
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
# hook is more suited to it.
#
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"

# This example catches duplicate Signed-off-by lines.

test "" = "$(grep '^Signed-off-by: ' "$1" |
	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
	echo >&2 Duplicate Signed-off-by lines.
	exit 1
}

Esse é o arquivo para aparecer uma mensagem quando é feito um commit, porém para manipular esses arquivos você precisa saber Shell Script ou Python e ai que entra o Husky!

O Husky

O Husky é uma linda ferramenta que vai nos permitir criar hooks de maneira rápida e fácil. =D

Primeiro precisamos instalar ele, o que é um passo bem simples de se fazer:

$ npm install husky --save-dev

Depois na parte de scripts do nosso package.json é só colocar os hooks que queremos e o que eles devem fazer. Aqui vai uma Lista dos hooks.

Aqui vai um exemplo:

"scripts": {
    "precommit": "npm run lint",
    "prepush": "npm run test",
    "lint": "eslint src/*js",
    "test": "echo \"Error: no test specified\" && exit 1"
  }

No precommit ele vai rodar um lint antes de commitar o código e no prepush ele vai rodar o test antes de mandar para o nosso repositório remoto!

Fim

E chegamos ao fim de mais um post!! Espero que a dica de hoje tenha sido útil para vocês, não se esqueçam de deixar seu feedback e compartilhar o post nas redes sociais!!!!!

Até a próxima!!!