Tentando criar um repositório git que faz um checkout automático toda vez que alguém atualiza a origem

4

Basicamente, eu tenho um servidor com um repositório git 'origin'. Eu estou tentando ter outro repo auto-pull da origem toda vez que alguém empurra código para ele. Eu tenho usado os ganchos de origem, especificamente pós-recebimento. Até agora, minha postagem recebe algo parecido com isto:

#!/bin/sh
GIT_DIR=/home/<user>/<test_repo>
git pull origin master

Mas quando eu envio para um outro computador, recebo o erro:

remote: fatal: Not a git repository: '/home/<user>/<test_repo>'

No entanto, test_repo definitivamente é um repositório do git. Eu posso fazer um cd nele e rodar 'git pull origin master' e ele funciona bem.

Existe uma maneira mais fácil de fazer o que estou tentando fazer? Se não, o que estou fazendo errado com essa abordagem? Agradecemos antecipadamente.

Edite, para esclarecer: o repo é um site em andamento e eu gostaria de ter uma versão disponível o tempo todo e totalmente atualizada.

    
por Dane Larsen 06.02.2011 / 09:54

3 respostas

2

Estou usando um gancho semelhante, mas o GIT_DIR deve apontar para o subdiretório .git.

#!/bin/sh
cd /home/<user>/<test_repo>
GIT_DIR=.git git pull origin master
    
por 06.02.2011 / 23:34
3

Quando você define uma variável de ambiente, ela está disponível apenas dentro desse shell - assim, quando você inicia outro programa, como o git, as variáveis locais não são repassadas. Vamos dizer que temos test.sh :

#!/usr/bin/bash
echo "GIT_DIR=$GIT_DIR"

Agora vamos ver os exemplos a seguir

$ GIT_DIR=LOOK_MY_GIT_DIR_IS_SET
$ ./test.sh
GIT_DIR=

Isso ocorre porque a variável de ambiente não foi exportada para o programa iniciado.

$ export GIT_DIR=LOOK_MY_GIT_DIR_IS_SET
$ ./test.sh
GIT_DIR=LOOK_MY_GIT_DIR_IS_SET

No exemplo de ScottZ, definir a variável de ambiente quando você inicia o programa faz com que seja exportado APENAS para esse comando.

$ GIT_DIR=LOOK_MY_GIT_DIR_IS_SET ./test.sh
GIT_DIR=LOOK_MY_GIT_DIR_IS_SET

Espero que isso ajude!

    
por 06.02.2011 / 20:14
1

Tem certeza de que está definindo o GIT_DIR corretamente?

Eu suponho que você esteja comprando de um repositório não-nu, neste caso, o seu GIT_DIR deve ser

GIT_DIR=/home/user/test_repo/.git

Para testar isso, execute o seguinte na linha de comando:

GIT_DIR=/home/user/test_repo/.git git status
    
por 06.02.2011 / 19:02

Tags