El otro día enseñé a Jorge un par de funciones de mi .zshrc que me facilitan la vida gestionando repositorios git desde la terminal y le gustaron bastante. He pensado que igual también resultan interesantes por aquí.

imagen teclado

  • Cómo generar un .gitignore automáticamente
function gi() {
	 curl -L -s https://www.gitignore.io/api/$@ >> .gitignore;
}

de esta forma se puede ejecutar gi vagrant java intelliJ para descargar el .gitignore resultado de esa búsqueda en Gitignore.io

  • Cómo listar todos los repositorios (con sus respectivas ramas actuales) presentes en un directorio

function gls() {
    for d in *; do
        if [[ -d "$d" && -e "$d/.git" ]]; then
            echo "$d -> $(cd "$d" && git_prompt_info | sed 's/%//g;s/{//g;s/}//g')"
        fi
    done
}

En uno de los proyectos en los que me encuentro tenemos que trabajar con varios módulos, cada uno de los cuales está en un repositorio git distonto. Muchas veces necesitaba poder saber de un vistazo en qué rama estaba cada uno de estos módulos. Se ve así:

~/.vim/plugged
▶ gls
YouCompleteMe -> master ✔
csapprox -> master ✔
ctrlp.vim -> master ✔
ferret -> master ✔
goyo.vim -> master ✔
jshint.vim -> master ✗
nerdcommenter -> master ✔
nerdtree -> master ✔
plaintasks.vim -> master ✗
tagbar -> master ✔
vim-airline -> master ✔
vim-airline-themes -> master ✔
vim-colorschemes -> master ✔
vim-fugitive -> master ✔
vim-gitgutter -> master ✔
vim-hybrid-material -> master ✔
vim-javascript -> master ✔
vim-jsx -> master ✔
vim-sensible -> master ✔
vim-strip-trailing-whitespaces -> master ✔

Requisito: la función git_prompt_info del plugin git de ohmyzsh

  • Cómo hacer git pull a sus ramas actuales en todos los repositorios dentro de un directorio
function gupd() {
    current_directory=$PWD
    for d in *; do
        if [[ -d "$d" && -e "$d/.git" ]]; then
            cd $d
            echo "$d -> $(git_prompt_info | sed 's/%//g;s/{//g;s/}//g')"
            git fetch
            git pull origin $(git_current_branch)
            cd $current_directory
        fi
    done
}

Por lo mismo que he contado en el punto anterior, a veces necesito bajarme los cambios de unos cuantos repositorios, para lo cual esta función me resulta muy cómoda. Además de listar los repositorios, también los actualiza. Evidentemente para poder hacer esto no puedo tener cambios sin commitear en ninguno de los repositorios.

Requisito: las funciones git_current_branch y git_prompt_info del plugin git de ohmyzsh

Estoy seguro de que puede hacerse mejor, por lo que cualquier comentario o idea será bien recibida :)