Come faccio a impostare git in modo che spinga automaticamente su un repository remoto (includendo automaticamente la mia passphrase) dopo ogni commit al repository locale?Come spingere automaticamente dopo aver eseguito il commit in git?
risposta
Innanzitutto, assicurarsi di poter eseguire il push manualmente senza fornire la password. Se si esegue il push su HTTP o HTTPS, si tratterà di creating a .netrc
file with the login details o adding your username and password into the URL for the remote. Se stai usando SSH, puoi creare una coppia di chiavi in cui la chiave privata non ha una password, oppure use ssh-agent
to cache your private key.
Poi si dovrebbe creare un file in .git/hooks/post-commit
che contiene quanto segue:
#!/bin/sh
git push origin master
... personalizzazione quella linea, se si vuole spingere ad un altro a distanza di origin
, o spingere un ramo diverso master
. Assicurati di rendere quel file eseguibile.
Impossibile che ssh-agent ricordi la mia passphrase, quindi è stato necessario renderlo vuoto. Spero che mia moglie non possa hackerare il mio account :) – ulu
Parlando di personalizzazione, cosa succede se voglio spingere alcuni ma non tutti i rami in questo modo? Ad esempio, voglio spingere automaticamente solo i rami che hanno un ramo remoto corrispondente annotato in '.git/config' con il prefisso' feature/xy/'. –
git push --all origin – Yada
Questo script git-autopush consente di impostare un hook post-commit, simile a quanto raccomandato in "How configure automatic pushing?".
Ma per la passphrase, è necessario run a ssh-agent
.
Creare un file denominato "post-commit" nella directory .git/hooks con il contenuto "git push", sebbene se si desidera fornire automaticamente una password, saranno necessarie modifiche.
Se si inizia a utilizzare più del ramo master, è possibile che si desideri spingere automaticamente il ramo corrente. Il mio gancio si presenta così:
#!/usr/bin/env bash
branch_name=`git symbolic-ref --short HEAD`
retcode=$?
non_push_suffix="_local"
# Only push if branch_name was found (my be empty if in detached head state)
if [ $retcode = 0 ] ; then
#Only push if branch_name does not end with the non-push suffix
if [[ $branch_name != *$non_push_suffix ]] ; then
echo
echo "**** Pushing current branch $branch_name to origin [i4h_mobiles post-commit hook]"
echo
git push origin $branch_name;
fi
fi
Spinge il ramo corrente, se si può stabilire il nome ramo con git simbolico-ref.
"How to get current branch name in Git?" tratta questo e altri modi per ottenere il nome del ramo corrente.
Una spinta automatica per ogni ramo può essere fastidiosa quando si lavora in rami di attività in cui si prevede che alcuni sausage making si verifichi (non sarà possibile rebase facilmente dopo aver premuto). Quindi il gancio non sposterà i rami che terminano con un suffisso definito (nell'esempio "_local").
Per la prima riga, ho dovuto usare '#!/Bin/sh' per farlo funzionare. Altrimenti continuava a dire: 'errore: impossibile eseguire .git/hooks/post-commit: nessun file o directory simile». Grazie, mi piace la tua soluzione migliore. – oyalhi
Grazie per il commento, @oyalhi, ho aggiornato la riga shebang nella risposta. Dovrebbe portare meglio ora! – i4h
Ecco semplice istruzione a spingere/tirare senza fornire passphrase tramite ssh per le persone che utilizzano Linux e Windows (git bash)
sul client:
verificare se avete le chiavi SSH generato :
$ ls ~/.ssh/id_rsa.pub; ls ~/.ssh/id_dsa.pub /c/Users/Cermo/.ssh/id_rsa.pub <-- I have RSA key ls: cannot access '/c/Users/Cermo/.ssh/id_dsa.pub': No such file or directory
Se non si dispone di un tasto qualsiasi (due "ls: non possono accedere ..." linee) generarne uno nuovo. Se hai qualcuno dei tasti, salta questo passaggio.
$ ssh-keygen.exe Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Cermo/.ssh/id_rsa): Enter passphrase (empty for no passphrase): <-- press Enter Enter same passphrase again: <-- press Enter
Copia la chiave per server remoto da cui si vuole tirare o spingere con git:
$ ssh-copy-id [email protected]_name /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys [email protected]_name's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]_name'" and check to make sure that only the key(s) you wanted were added.
Nota: Sarà necessario fornire la password durante questa operazione. Dopo che le operazioni pull/push non richiederanno la password.
Nota 2: Devi effettuare il log al server utilizzando nome_utente almeno una volta prima di utilizzare questa procedura (home directory a cui le chiavi SSH vengono copiati è creato durante il primo login)
- 1. Ramo anonimo dopo aver eseguito il reset git
- 2. git: spingere un singolo commit
- 3. Spingere senza commit in Mercurial o Git
- 4. cancella() dopo aver eseguito remove_if()
- 5. commit dispersi dopo git aggiustano il
- 6. Come spingere più filiali da più commit?
- 7. utilizzando git hook dopo il commit
- 8. Git Commit dopo l'unione si apre VIM
- 9. "Attualmente non in qualsiasi ramo" dopo aver fatto un commit
- 10. Dopo aver eseguito File.Delete, il file rimane in DELETE PENDING
- 11. Come posso spingere un commit Git senza uno precedente?
- 12. Git controlla se ci sono commit in sospeso per spingere
- 13. Evita di stampare dopo aver eseguito il comando nella console
- 14. Chiudere un file batch dopo aver eseguito il file jar
- 15. Ottenere git per non spingere mai un singolo commit?
- 16. git push, non spingere tutti i commit locali
- 17. Cambia automaticamente il file di versione su commit con git
- 18. Mostra automaticamente di stato dopo git add
- 19. Come impedire che la shell di PuTTY si chiuda automaticamente dopo aver eseguito il comando dal file batch in Windows?
- 20. Come posso annullare un commit Git DOPO un git push?
- 21. Come aggiornare lo stato React dopo aver eseguito navigator.pop()?
- 22. Come spingere determinati file in origine/master in git?
- 23. WebViewFragment webView è null dopo aver eseguito un FragmentTransaction
- 24. Perché dopo aver copiato il repository git in un'altra directory ho modificato i file?
- 25. Posso andare all'errore dopo aver eseguito make in VIM?
- 26. Perché la cronologia del mio file git è stata persa dopo aver eseguito un refactoring di movimento in eclissi?
- 27. Elimina automaticamente il ramo git dopo l'unione nel master
- 28. Involgi automaticamente lunghi messaggi di commit Git in Vim
- 29. come eseguire automaticamente l'installazione di bundle se il gemfile viene aggiornato dopo una git pull/merge?
- 30. Creare e mostrare un'etichetta dopo aver eseguito l'applicazione java
Quale protocollo stai spingendo sopra? Se richiede la password, presumo che sia SSH o HTTP. –
Inoltre, è sempre utile con le domande git per menzionare almeno quale sistema operativo si sta utilizzando. –
Metto in discussione la saggezza di un tale set up. Ciò rimuove qualsiasi possibilità di riorganizzare le modifiche in un diverso gruppo di commit (in particolare, ribadendo). Faccio troppi errori perché un set come questo finisca per essere utile per me. – jpmc26