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:

  • Perché l'utente principale può modificare i file di sola lettura, ma un utente regolare con accesso sudo non può?
  • Problemi con gitweb con nginx
  • Clone di Git / tirare attraverso la networking locale
  • Specificare la port SSH per Git
  • Specificare il gruppo predefinito e le autorizzazioni per i nuovi file in una determinata directory
  • Sono disponibili Git o SVN con un'impronta di memory?
  •  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

  • Può essere utilizzato l'etckeeper per tenere traccia dei file di configuration al di fuori di / etc?
  • Impostazione di Git su SSH su Windows utilizzando una port non standard
  • Come faccio a dare a un computer un nome di dominio su una networking Windows?
  • GIT, SSH e GIT-SHELL
  • Jenkins non può leggere la password di Github da quando si aggiorna al plug-in Git client 2.1.0
  • Spostare il server Gitlab e Gitolite in un'altra macchina
  • 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.