2009-05-19 12 views
10

Situazione:Aggiornamento del sito web con un unico comando (git push), invece di trascinare FTP e far cadere

  • Ho una copia locale di un sito web
  • Ho un server che ho accesso SSH al

Cosa voglio fare?

  • Commit a livello locale fino a quando non sono felice con il mio codice
  • Fai rami localmente
  • Avere un ramo master che è quello che dovrebbe essere trasmesso al server
  • Aggiornamento del sito web utilizzando un unico comando (git push master d'origine)

Se si configura un repository git localmente utilizzando git init e quindi si esegue il push su una cartella sul server, non funziona. Quando eseguo l'FTP sul server per controllare i file, sono effettivamente lì. Quando I SSH nel server e faccio lo stato git, non è pulito, anche se dovrebbe essere dato che ho appena spinto al server.


passaggi che sto facendo:

  1. creare una nuova cartella sul mio computer (mkdir folder_x)
  2. andare in quella cartella (cd folder_x)
  3. impostare un nuovo repository git lì (git init)
  4. (repository git impostato correttamente)
  5. Spingere il repository sul server utilizzando git push origine master (dove origine è s come utente: [email protected]) ​​
+0

duplicato http://stackoverflow.com/questions/3728054/git-push-to-live-server – cmcginty

+0

possibile duplicato di [Distribuire un progetto utilizzando Git push] (http://stackoverflow.com/questions/279169/ distribuire-a-project-utilizzando-git-push). [git config receive.denyCurrentBranch updateInstead] (http://stackoverflow.com/a/28381235/895245) sul telecomando è una buona possibilità. –

risposta

12

È necessario scrivere un hook di post-ricezione che esegua git checkout -f dopo che il repository git remoto riceve una push. Vedi Using Git to manage a web site per i dettagli.

+1

sembra presumere che in realtà non lavori sul mio server web. Quindi qualsiasi lavoro fatto lì è perso – gman

+0

Con Git 2.3 non hai più bisogno di questo hook puoi fare 'git config receive.denyCurrentBranch updateInstead'. Vedi https://github.com/blog/1957-git-2-3-has-been-released. – Aurelien

+1

Penso che il commento di @Aurelien dovrebbe essere la risposta accettata! Soluzione molto bella! –

1

Quando si esegue il push su un repository git, non vengono aggiornati i file di lavoro del repository. Generalmente quando si spinge, si dovrebbe essere spingendo verso un repository nudo --- che sembra essere il modo in cui intendevano spingere a lavorare.

Per uno dei miei progetti (locali), ho scritto uno script per verificare automaticamente l'ultima sottodirectory "ui" quando spingo il mio lavoro su un repository di distribuzione. Qui è incorporato in una risposta precedente: Developing Django projects using Git

Si potrebbe anche semplicemente fare in modo che il gancio di post-aggiornamento sul server esegua un "reset git --hard master" se qualcuno invia un aggiornamento al master e usa un non-bare repo piuttosto che avere un'area separata per i file estratti.

0

Io uso il gancio post-aggiornamento come dettagliato in questa FAQ: http://git.or.cz/gitwiki/GitFaq#non-bare

Si aggiornerà il vostro albero di lavoro se è stato configurato il repo remoto come "nuda".

0

Git Versione 1.9.1
Server Ubuntu 14.04 LTS
LAMP Server

Ho impostato il mio server LAMP per aggiornare la mia directory di lavoro del mio repository Git ogni volta che uno dei miei sviluppatori web invia una modifica al server. Ho notato che il log notava il nuovo commit, ma non aggiornava la directory di lavoro. Invece di farlo manualmente (git checkout -f) per ogni aggiornamento, questo può essere impostato automaticamente per farlo dopo aver ricevuto un push.

  1. Nella directory ".git", andare in "ganci" cartella.
  2. Creare un file denominato "post-ricevere" all'interno delle "ganci" Cartella con questo contenuto:

    #!/Bin/sh
    directory di lavoro
    # aggiornamento dopo aver ricevuto una spinta da clienti remoti.
    # Dovrebbe essere indirizzato alla directory di lavoro git.

    GIT_WORK_TREE =/var/www/dev_site git checkout -f

  3. attivare le autorizzazioni per eseguire il file digitando "chmod + x post-ricezione" nella cartella "ganci".

Ora aggiornerà la directory di lavoro quando i commit vengono inviati al repository Git. Il mio sito ora mostra le modifiche quando lo visita in un browser.

In questo esempio, la mia directory di lavoro è "/var/www/dev_site". Modificalo di conseguenza in base a dove si trova il tuo Repo.

Si prega di notare che questo Repo non è un semplice Repo. Un semplice Repo non ha una directory di lavoro da cui un server web può leggere.