Saída dos arquivos Git para um local fora do repositório

18

É possível "fazer check-out" para um local fora do repositório? O que quero dizer é um clone de uma ramificação sem o diretório ".git".

Por exemplo: Use o git para gerenciar um site. Você edita alguns arquivos, confirma e copia os arquivos para um servidor da Web via WebDAV. O caminho WebDAV seria o local fora do repositório, que não deveria conter o ".git".

Este pode não ser o problema para o qual o git foi criado, mas isso é possível?

    
por user240826 25.07.2013 / 21:20

2 respostas

17

Sim, isso é certamente possível.

Digamos que eu tenha um repositório simples chamado /srv/production.git no sistema / servidor de destino.

No sistema de destino, posso usar o comando cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Se eu estiver em um repositório não nu, o comando é um pouco diferente. Vamos dizer que eu tenho um repositório não vazio em /srv/testing . Para verificar se usaria cd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Na verdade, no meu sistema, eu até automatizo isso em um gancho post-commit no repositório production.git . Portanto, quando você enviar para production.git , a versão mais recente será automaticamente verificada para a raiz da Web.

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

Se o seu único acesso ao sistema remoto for webdav, certamente será possível escrever um post-commit hook que fará o check-out para o host do webdav, diretamente ou em um local temporário, o qual você poderá fazer um upload de script.

    
por 26.07.2013 / 00:53
5

Se você quiser apenas os arquivos, use git archive . Normalmente, ele grava em um arquivo, como tarballs ou ZIP, mas você também pode canalizá-lo:

git archive master | tar -x -C /some/path

Aqui, master obviamente é o ramo que você deseja arquivar, e /some/path conterá apenas os arquivos - não .git ou .gitignore .

Ou você pode usar git checkout-index que mais assemelha-se muito a um "check-out" de arquivos:

git checkout-index -f -a --prefix=/some/path/

Aqui, a opção -a informa ao git para fazer o check-out de todos os arquivos. O prefixo será prefixado na saída. Alguém também escreveu um wrapper em volta disso para dar um git export .

    
por 25.07.2013 / 21:23

Tags