todo es un repo git #
Hace varios años que uso git
para el control de versiones del código
fuente en los que trabajo a diario. Pero últimamente me estoy moviendo
de una computadora a otra: una desktop, una notebook y una netbook, es
por esto que necesito tener sincronizados los repositorios en cada una
de ellas y terminé realizando un script bash que me facilite la tarea.
Además de los repositorios de los proyectos en los que estoy involucrado en la cooperativa 1, necesito varias utilidades que en su mayoría estan siendo actualizadas constantemente en github, también necesito mis repositorios personales 2 y sobre todo las configuraciones de todas los programas que uso, que obviamente estan en un repo git!
~/.git-repos
#
Para no olvidarme de ningún repo, armo una lista en ~/.git-repos
, el
esquema es el siguiente:
1egrep "(osiris|bash)" ~/.git-repos
parse_bash_history https://github:swooingfish/parse_bash_history
aps2dot github:osiris/aps2dot
blog github:osiris/osiux-blog
direplos github:osiris/direplos
git-bash-utils github:osiris/git-bash-utils
html github:osiris/osiris.github
libretA7 github:osiris/libretA7
media-bash-utils github:osiris/media-bash-utils
minimal-bash-prompt github:osiris/minimal-bash-prompt
multiboot github:osiris/multiboot
org-bash-utils github:osiris/org-bash-utils
org-mode-doc-es github:osiris/org-mode-doc-es
pcap2dot github:osiris/pcap2dot
sugar-graphviz github:osiris/sugar-graphviz
traducciones github:osiris/traducciones
Las líneas que comienzan con #
son ignoradas. Por lo general el
directorio coincide con el nombre del repo, aunque a veces es necesario
cambiarlo.
Para acortar la url, es conveniente definir los hosts en el
~/.ssh/config
, por ejemplo para github sería asi:
Host github
User git
Hostname github.com
git-repos
#
Las tareas que realiza git-repos
son elementales:
- listar
- clonar
- pullear
- pushear
Lo interesante es que se realizan en todos los repositorios!
Supongamos que no tenemos ni un solo repo git, para obtener todos los repositorios que utilizo debería descargar la lista 3 y el script:
1cd ~
2git clone https://github.com/osiris/git-bash-utils
Agregar al ~/.bashrc
:
1if [[ -d "$HOME/git-bash-utils" ]]
2then
3PATH="$HOME/git-bash-utils:$PATH"
4source $HOME/git-bash-utils/git-alias
5fi
Si quisiera listar todos los repositorios que contienen bash ejecutaría lo siguente:
1git-repos -f bash
Si no encuentra un repo, muestra NOT FOUND y una cruz ✖ indicando que falló el comando sobre el repositorio.
Si quisiera clonar estos repositorios haría:
1git-repos -f bash -c
Se clonaron todos los repositorios pero además se muestra información extra, un streak que indica los últimos 30 días y cuando se hizo por lo menos un commit.
En caso de agregar el tiempo invertido en cada commit en el formato HH:MM se puede totalizar y saber cuanto tiempo hemos invertido a lo largo del proyecto.
1git-repos -f bash -t
Podríamos visualizar la última línea del log a fin de saber que es lo último que se hizo.
1git-repos -f bash -g
Y para el final queda lo más importante, hacer un pull/push en todos los repositorios.
1git-repos -f bash -ls
Hay más utilidades en el repositorio git-bash-utils
, en particular
recomiendo mirar el git-alias y cualquier correción/sugerencia será bien
recibida.