Domanda

Voglio usare git per gestire alcuni dati su un server remoto, quindi ho impostato un repository non nudo lì. Posso farcela senza problemi e il repository stesso si aggiorna ma i file effettivi non vengono modificati / aggiunti / eliminati. Devo accedere al server e fare un

git reset --hard HEAD

per aggiornare effettivamente la struttura dei file.

Cosa si deve fare?

È stato utile?

Soluzione

Non dovresti farlo. Si consiglia di avere repository nudi. In altre parole, nessun file è stato estratto, solo la directory .git stessa. È quindi possibile effettuare il checkout del repository in un'altra posizione sul server, ad esempio il Web root. In questo modo, ottieni:

  • best practice git. Secondo i documenti Git, puoi ottenere "risultati imprevisti" se non lo segui. Chiunque abbia fatto un bel po 'di programmazione sa che "risultati inaspettati" è il codice per " probabilmente mangerà i tuoi figli e dovrebbe essere evitato a tutti i costi. "

  • migliore sicurezza, se hai intenzione di avere i file estratti sul server accessibili da un server web.

  • Modifiche locali sul codice di check-out e possibilità di apportare modifiche rapide sul codice di check-out live. Potresti provare a farlo direttamente sul repository, ma sarebbe disordinato e più soggetto a errori.

  • La possibilità di aggiornare il repository del server indipendentemente dall'aggiornamento del codice del servizio live. Questo è piuttosto cruciale, se lavori in remoto e devi inviare qualcosa al server e poi fare ulteriori lavori prima che sia pronto per il tuo servizio live o se hai cambiamenti nel codice del servizio live (diciamo, impostazioni di configurazione diverse ) e devono unire tali modifiche con le modifiche nel repository, ma non è possibile farlo ora.

Consiglierei i seguenti passaggi:

  • Segui i documenti git sull'impostazione di un repository nudo
  • Controlla il codice dal tuo repository alla directory di destinazione del servizio live
  • Imposta un hook git (post-commit dovrebbe essere quello giusto IIRC) per aggiornare il tuo servizio live quando il repository viene aggiornato. Probabilmente dovrebbe cd al dir del servizio live e fare un git pull --rebase, e forse impostare alcuni permessi per i file.
  • Spingi il tuo codice nel repository dalla tua casella di sviluppo da ora in poi.

Altri suggerimenti

Questo, fortunatamente, ora è supportato direttamente in git stesso! Puoi trovare i dettagli in questa risposta, che ho appena votato:

https://stackoverflow.com/a/38363683/85360

Raccomanda di configurare il telecomando con

git config receive.denyCurrentBranch updateInstead

in modo che i push generino una copia di lavoro aggiornata!

Utilizza un hook post-aggiornamento:

hooks

Lì puoi eseguire quello che vuoi su ogni aggiornamento.

Git Versione 1.9.1
Ubuntu Server 14.04 LTS
Server LAMP

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 registro avrebbe notato i nuovi commit, ma non avrebbe aggiornato la directory di lavoro. Invece di farlo manualmente (git checkout -f) per ogni aggiornamento, questo può essere impostato automaticamente per farlo dopo che è stato ricevuto un push.

  1. Nel tuo " .git " , vai nella directory " hooks " cartella.
  2. Crea un file chiamato " post-ricezione " all'interno dei "ganci" cartella con questo contenuto:

    #! / Bin / sh

    # Aggiorna la directory di lavoro dopo aver ricevuto un push dai client remoti.
     # Questo dovrebbe essere diretto nella directory di lavoro di git.
    GIT_WORK_TREE = / var / www / dev_site git checkout -f

  3. Abilita le autorizzazioni per eseguire il file digitando " chmod + x post-reception " nei "ganci" cartella.

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

La mia directory di lavoro è / var / www / dev_site

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top