Simplifique o gerenciamento de vários repositórios Git com SSH

Para aqueles interessados ​​em uma explicação mais detalhada, consulte minha postagem no blog .

Para mim, iniciar um projeto git é tão fácil quanto ginit gh epic-project.

Use vários pontos de extremidade git

Eu uso três endpoints Git de dois sites diferentes, e os aliases aqui mapeiam para os URLs reais por meio de minha configuração SSH, o que me permite usar atalhos semânticos. A primeira função mostrada aqui atua como um ‘auxiliar’, permitindo-me especificar qual ponto de extremidade um repo deve usar.

# Test the first argument of a command for a git host identifier (aliases configured in ssh-config)
is_git_host
() {
case "$1" in
'gh') host='github-personal'
user
='SteveBenner'
true
;;
'bb') host='bitbucket'
user
='SteveBenner09'
true
;;
'xf') host='github-work'
user
='xFactorApplications'
true
;;
*) echo 'Usage: clone [host] [repository-name]'
echo
"where <host> is one of:"
echo
' gh: Personal GitHub account'
echo
' xf: X-Factor Applications GitHub account'
echo
' gh: personal BitBucket account'
false
;;
esac
}

Faça tudo com um comando

Usar as ferramentas CLI não deve ser um processo complexo; sempre faça o computador fazer o trabalho pesado. Os comandos a seguir cuidam de tudo que você precisa para iniciar um novo repo ou clonar um existente.

# Clone a git repo using hostname aliases resolved via SSH configuration
clone
() { if is_git_host $1 ; then `git clone git@${host}:${user}/${2}.git` ; fi }

# Initialize a new local git repository, setting the remote using given alias
ginit
() {
if is_git_host $1 ; then
git init

`git remote add origin git@${host}:${user}/${2}.git`
echo
"# This repo and README were created automatically." >> README.md
cp
-n ~/.gitignore_global .gitignore
git add
-A
git commit
-m "Initial commit."
git push
-u origin master
`git config core.filemode false` # see my blog post for explanation of this line
fi
}

PS O código parece um pouco confuso devido à largura menor que o CoderWall usa – no github , é muito mais limpo.