Git – post-receive hook con git pull "Imansible trovare una directory git valida"

È molto strano, ma quando si imposta un repository di git e crea un hook post-ricezione con:

echo "--initializing hook--" cd ~/websites/testing echo "--prepare update--" git pull echo "--update completed--" 

il hook funziona effettivamente, ma non riesce mai a correre git tirare correttamente:

 6bfa32c..71c3d2a master -> master --initializing hook-- --prepare update-- fatal: Not a git repository: '.' Failed to find a valid git directory. --update completed-- 

quindi mi chiedo ora, come è ansible far aggiornare il hook con il clone con post-ricezione?

in questo caso l'utente che esegue i processi è lo stesso, e tutto ciò che è all'interno della cartella utente quindi non capisco davvero … perché se andrò manualmente

 cd ~/websites/testing git pull 

funziona senza alcun problema …

qualsiasi aiuto su questo sarebbe stato molto apprezzato

molte grazie

  • Suite di monitoraggio Unix CLI
  • Linux / Unix - / etc / sudoers - definizione dell'host
  • Sostituzione per NIS / YP
  • Perché l'utente principale può modificare i file di sola lettura, ma un utente regolare con accesso sudo non può?
  • chattr - Come modificare l'attributo di file + i senza utilizzare chattr
  • Privilegi per ifconfig
  • Come eseguire un command su più host utilizzando solo IPv6?
  • Unire chiavi SSH locali per lavorare contemporaneamente
  • 6 Solutions collect form web for “Git – post-receive hook con git pull "Imansible trovare una directory git valida"”

    Mentre il hook è in esecuzione, GIT_DIR e (se il lavoro è stato definito esplicitamente) sono impostati GIT_WORK_TREE . Ciò significa che il tiro non verrà eseguito con il secondo repository nella directory che hai cambiato.

    Prova git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull ; o distriggersre l'ambiente repo-locale di git con questo:

     unset $(git rev-parse --local-env-vars) 

    Maggiori informazioni su queste variables di ambiente in man 1 git .

    Una cosa che ho sperimentato era che usando il hook post-update '- git-dir' ha funzionato bene ma git era ancora lamentarsi di un tree di lavoro mancante (nonostante utilizzi '–work-tree')

    In breve, questo non ha funzionato:

    git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

    mentre questo ha funzionato:

    cd /path/to/websites/testing
    git --git-dir /path/to/websites/testing/.git pull

    Non funziona?

     cd /home/smb/websites/testing env -i git pull 

    Modificato

    Meglio ancora

     cd /home/smb/websites/testing unset GIT_DIR git pull 

    Hai provato con il path completo invece del ~?

     cd /home/smb/websites/testing git pull 

    Lo script è probabilmente invocato con /bin/sh , che non comprende ~ . Provare con il path completo a ~ invece.

    La prima risposta consigliata è giusta – quando un hook è in esecuzione GIT_DIR etc sono impostati. Tuttavia, se si desidera essere in grado di utilizzare lo script in un altro repository allora questo metodo è errato perché codici hard-reset il GIT_DIR. Come ha implicato, l'altro modo è quello di rimuovere la variabile usando env come segue: env -i git reset – hard Ovviamente che command si esegue c'è a te – è solo il bit 'env -i' che è il bit importnte .

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.