Introduzione
Un remote è un URL nominato che punta a un altro repository Git. git clone ne crea uno chiamato origin automaticamente, ma puoi aggiungerne quanti vuoi. I remote sono il ponte tra il tuo repo locale e il mondo esterno.
Elencare e ispezionare
git remote
git remote -v
git remote show origin
git remote show contatta il server e riporta i branch tracciati, le regole di push e i ref obsoleti.
Aggiungere e rimuovere
git remote add upstream https://github.com/original/widget.git
git remote rename upstream origin-upstream
git remote remove origin-upstream
Il pattern fork-and-upstream è comune: origin è il tuo fork, upstream è il progetto da cui hai forkato.
Cambiare un URL
Se un progetto si sposta da HTTPS a SSH o a un nuovo host:
git remote set-url origin [email protected]:example/widget.git
git remote -v
URL multipli
Puoi fare push a diversi mirror contemporaneamente aggiungendo URL di push extra:
git remote set-url --add --push origin [email protected]:example/widget.git
git remote -v
Pulire branch obsoleti
Quando i branch sono cancellati sul server, i tuoi refs/remotes/origin/* locali possono restare indietro. Puliscili:
git fetch --prune
git remote prune origin
O impostalo permanentemente:
git config --global fetch.prune true
Ispezionare il tracking
git branch -vv
# main a1b2c3d [origin/main] Latest fix
# feature/login e4f5g6h [origin/feature/login: ahead 2] WIP
-vv mostra l'upstream di ogni branch e quanto è avanti/indietro.
Riscrittura con insteadOf
Se gli URL di un progetto cambiano (HTTPS a SSH, migrazione di host, o vuoi che tutti gli URL GitHub usino SSH automaticamente), insteadOf li riscrive in modo trasparente:
git config --global url."[email protected]:".insteadOf "https://github.com/"
git config --global url."https://github-mirror.example.com/".insteadOf "https://github.com/"
Particolarmente comodo in CI, dove puoi riscrivere tutti i clone verso un mirror locale con una riga di config, senza modifiche agli script. La direzione inversa (pushInsteadOf) ti permette di fetch via HTTPS ma push via SSH dallo stesso remote.
Workflow triangolari
Nell'open source, tipicamente fai fetch da upstream (il progetto canonico) e push a origin (il tuo fork personale). Configuralo una volta e dimentica:
git remote add upstream https://github.com/project/repo.git
git config branch.main.remote upstream
git config branch.main.pushRemote origin
git config --global push.default current
Ora git pull legge da upstream e git push scrive sul tuo fork, automaticamente. L'impostazione remote.pushDefault applica la regola a ogni branch in un clone.
Errori comuni
Confondere il nome di un remote con il suo URL. origin è solo un'etichetta; puoi rinominarlo. Un'altra trappola: aggiungere lo stesso URL sotto due nomi diversi, poi essere sorpresi dai ref duplicati. Usa git remote -v per verificare. Dimenticare git fetch dopo aver cambiato rete o URL lascia i tuoi tracking branch obsoleti. Infine, sui server condivisi, cancellare un ref di tracking remoto localmente (es. git branch -dr origin/main) non cancella il branch sul server; usa git push origin --delete main per quello, e solo quando intendi davvero farlo.