Git – Spingendo il codice a due telecomandi

Ho due repository git remoti. origin e github

Spingo il mio devel su entrambi i repository.

 git push -u origin devel git push -u github devel 

Ma poi, quando lo faccio. git push Sarebbe solo spinto a github .

Posso comunque configurare i miei due telecomandi, in modo da poter modificare le modifiche su entrambi i repository con un solo comando?

Nelle versioni recenti di Git puoi aggiungere più pushurl per un dato telecomando. Usa il seguente per aggiungere due pushurl alla tua origin :

 git remote set-url --add --push origin git://original/repo.git git remote set-url --add --push origin git://another/repo.git 

Quindi, quando si spinge verso l’ origin , si spinge in entrambi i repository.

AGGIORNAMENTO 1 : Git 1.8.0.1 e 1.8.1 (e probabilmente altre versioni) sembrano avere un bug che causa --add di sostituire l’URL originale la prima volta che lo usi, quindi devi aggiungere nuovamente l’URL originale usando lo stesso comando. Fare git remote -v dovrebbe rivelare gli URL correnti per ciascun telecomando.

AGGIORNAMENTO 2: Junio ​​C. Hamano, il manutentore di Git, ha spiegato come è stato progettato. Facendo git remote set-url --add --push aggiunge un pushurl per un dato telecomando, che sostituisce l’URL predefinito per i push. Tuttavia, è ansible aggiungere più pushurl per un determinato telecomando, che consente quindi di pushurl a più telecomandi utilizzando un singolo git push . Puoi verificare questo comportamento qui sotto:

 $ git clone git://original/repo.git $ git remote -v origin git://original/repo.git (fetch) origin git://original/repo.git (push) $ git config -l | grep '^remote\.' remote.origin.url=git://original/repo.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 

Ora, se vuoi spingere su due o più repository usando un singolo comando, puoi creare un nuovo telecomando chiamato all (come suggerito da @Adam Nelson nei commenti), o continuare a usare l’ origin , anche se il secondo nome è meno descrittivo per questo scopo. Se si desidera continuare a utilizzare l’ origin , saltare il passaggio seguente e utilizzare l’ origin anziché all in tutti gli altri passaggi.

Quindi aggiungiamo un nuovo telecomando chiamato all quello di cui ci riferiremo in seguito quando si preme su più repository:

 $ git remote add all git://original/repo.git $ git remote -v all git://original/repo.git (fetch) <-- ADDED all git://original/repo.git (push) <-- ADDED origin git://original/repo.git (fetch) origin git://original/repo.git (push) $ git config -l | grep '^remote\.all' remote.all.url=git://original/repo.git <-- ADDED remote.all.fetch=+refs/heads/*:refs/remotes/all/* <-- ADDED 

Quindi aggiungiamo un pushurl a all remoto, indicando un altro repository:

 $ git remote set-url --add --push all git://another/repo.git $ git remote -v all git://original/repo.git (fetch) all git://another/repo.git (push) <-- CHANGED origin git://original/repo.git (fetch) origin git://original/repo.git (push) $ git config -l | grep '^remote\.all' remote.all.url=git://original/repo.git remote.all.fetch=+refs/heads/*:refs/remotes/all/* remote.all.pushurl=git://another/repo.git <-- ADDED 

Qui git remote -v mostra il nuovo pushurl per push, quindi se fai git push all master , spingerà il ramo master a git://another/repo.git only. Questo mostra come pushurl sovrascrive l'URL di default (remote.all.url).

Ora aggiungiamo un altro pushurl punta al repository originale:

 $ git remote set-url --add --push all git://original/repo.git $ git remote -v all git://original/repo.git (fetch) all git://another/repo.git (push) all git://original/repo.git (push) <-- ADDED origin git://original/repo.git (fetch) origin git://original/repo.git (push) $ git config -l | grep '^remote\.all' remote.all.url=git://original/repo.git remote.all.fetch=+refs/heads/*:refs/remotes/all/* remote.all.pushurl=git://another/repo.git remote.all.pushurl=git://original/repo.git <-- ADDED 

Vedete entrambi i pushurl che abbiamo aggiunto vengono mantenuti. Ora un singolo git push all master a spingere il ramo master su git://another/repo.git e git://original/repo.git .

Per inviare a entrambi i telecomandi con un comando, puoi creare un alias per questo:

 git config alias.pushall '!git push origin devel && git push github devel' 

Con questo, quando usi il comando git pushall , aggiornerà entrambi i repository.