Não é possível chamar "git reset" dentro do gancho git post-update?

1

Eu configurei um repositório git para minha página da web (é um HTML simples, gerado a partir do markdown por Pandoc ). O repositório só será atualizado remotamente por mim e eu o configurarei com sucesso para trabalhar com HTTPS.

Agora, este não é um repositório vazio - ninguém atualizará o repositório ou a árvore de trabalho localmente no servidor, portanto, basta manter uma cópia de trabalho lá e disponibilizá-la para o servidor da Web publicar.

Tudo funciona bem, mas - Eu preciso que a árvore de trabalho seja atualizada automaticamente toda vez que eu enviar alterações para o servidor, então eu escrevi o seguinte script post-update (no exemplo , a árvore de trabalho está em /path/git/me e o repositório em /path/git/me/.git ):

#!/bin/bash

(cd /path/git/me/ && echo "running git reset --hard on 'pwd'" && git reset --hard)

(cd /path/git/me/ && pandoc -s -o index.html index.md)

E quando eu executo git push , o hook é executado, mas algo realmente estranho acontece:

  • git reclama que '.' não é um repositório e não executa o comando git reset --hard
  • no entanto, o pandoc executa sem problemas!

Abaixo está a transcrição de um push:

$ GIT_TRACE=1 git push
12:21:12:21:27.088581 run-command.c:347       trace: run_command: 'git-remote-https' 'origin' 'https://server.org/git/me'
Username for 'https://server.org': me
Password for 'https://[email protected]': 
12:21:32.624468 run-command.c:347       trace: run_command: 'send-pack' '--stateless-rpc' '--helper-status' '--thin' '--progress' 'https://server.org/git/me/' '--stdin'
12:21:32.627833 exec_cmd.c:128          trace: exec: 'git' 'send-pack' '--stateless-rpc' '--helper-status' '--thin' '--progress' 'https://server.org/git/me/' '--stdin'
12:21:32.633026 git.c:348               trace: built-in: git 'send-pack' '--stateless-rpc' '--helper-status' '--thin' '--progress' 'https://server.org/git/me/' '--stdin'
12:21:32.634024 run-command.c:347       trace: run_command: 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
12:21:32.634538 exec_cmd.c:128          trace: exec: 'git' 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
12:21:32.636701 git.c:348               trace: built-in: git 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 223 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: running git reset --hard on /path/git/me
remote: fatal: Not a git repository: '.'
To https://server.org/git/me
   93be2f2..9cc7a28  master -> master

O que eu fiz de errado aqui, e como eu conseguiria o gancho para executar os comandos como pretendido?

    
por Jay 24.08.2015 / 17:33

1 resposta

3

Eu encontrei o problema!

Durante a execução do gancho, as variáveis GIT_DIR e GIT_WORK_TREE são definidas e o git ignorará o diretório atual. E parece que posso passar os diretórios explicitamente para o git:

git --git-dir /path/git/me/.git --work-tree /path/git/me/ reset --hard

Tudo funciona agora!

    
por 25.08.2015 / 14:02

Tags