#!/bin/bash
# This will attempt to do a 'git pull' in any directories found in the
# present working directory.
for d in *; do
if [[ -d "$d"/.git ]]; then
( cd $d; git pull )
fi
done
Estou tentando escrever um script que possa ser adicionado mais tarde. Basicamente, eu tenho uma coleção de git repos em todo o meu diretório pessoal. Eu gostaria de manter uma lista principal de seus locais e, em seguida, ter um script executado por todos eles e executar um comando git up
ou git pull
ou algo assim.
Estou cansado de ter cd
em tudo individualmente para atualizá-lo. Eu gostaria de fazer tudo de uma vez, mas não há rima ou motivo para a localização deles, e prefiro não reestruturar minha árvore de pastas domésticas apenas para acomodar alguma ação de script.
Estou mais do que feliz em ter isso como um arquivo de configuração, onde posso simplesmente acrescentar mais diretórios ao início do arquivo, conforme necessário, ao longo do tempo.
EDITAR:
Aqui é onde eu estou:
CWD="$(pwd)";
cd ;
dir1="$HOME/FW/foo";
dir2="$HOME/FW/bar";
for repo in $dir1, $dir2;
do
cd "$repo"
git up
done
cd $CWD
Ah, e estou usando o ZSH, não o bash ...
Na verdade, você não precisa alterar o diretório para um repositório git para executar um comando com git
. Você pode passar o diretório de trabalho para git
com -C path
.
Se você quiser manter uma lista de repositórios, sugiro usar uma matriz:
repos=(
$HOME/somedir/repo1
"$HOME/somedir/with space/repo2"
)
for repo in $repos; do
git -C $repo $@
done
Se você colocar isso em um script, diga com o nome multigit
, você pode executar qualquer comando git
, pois os argumentos são passados com $@
. Por exemplo, multigit pull
.
Se você não se importa em configurar uma lista de repositórios, você pode até obter zsh
para encontrar todos eles para você:
for repo in **/.git(/N); do
git -C ${repo:h} $@
done
**/.git(/N)
pesquisará recursivamente por qualquer diretório chamado .git
e ${repo:h}
removerá o último elemento de um caminho, neste caso .git
, deixando você com os caminhos para os repositórios.
Bônus: você pode até conseguir completar o Tab para o seu novo comando:
compdef '_dispatch git git' multigit