Faça o checkout dos arquivos Git para um local fora do repositório
21
É possível fazer "checkout" 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 git para gerenciar um site. Você edita alguns arquivos, confirma e copia os arquivos para um servidor Web via WebDAV. O caminho do WebDAV seria o local fora do repositório, que não deve conter o ".git".
Pode não ser o problema para o qual o git foi criado, mas isso é possível?
Digamos que eu tenho um repositório vazio nomeado /srv/production.gitno 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-nua, o comando será um pouco diferente. Digamos que eu tenho um repositório não-nua em /srv/testing. Para verificar que eu usariacd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
De fato, no meu sistema, eu até automatizo isso em um gancho pós-confirmação no meu production.gitrepositório. Portanto, quando você envia para production.gita versão mais recente, verifica automaticamente 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 gancho pós-confirmação que fará o checkout no host webdav, diretamente ou em um local temporário, no qual você poderá criar um script para upload.
Eu acho que você está tornando isso mais difícil do que precisa ser. Basta executar GIT_WORK_TREE=/destinationpath git checkout -fenquanto o diretório atual estiver no topo de um repositório vazio ou no subdiretório .git. Você fará um checkout em / destinationpath
Zoredache
Ok, devo ter perdido de alguma forma essa opção, +1 para você.
slhck
11
Acho essa opção muito mais intuitiva, para ser sincero. E menos propenso a erros.
Se você apenas deseja os arquivos, pode usar
git archive
. Geralmente, ele grava em um arquivo como tarballs ou ZIP, mas você também pode canalizá-lo:Aqui,
master
obviamente , é o ramo que você deseja arquivar e/some/path
conterá apenas os arquivos - nenhum.git
ou.gitignore
.Ou você pode usar o
git checkout-index
que mais se assemelha a um "checkout" de arquivos:Aqui, a
-a
opção informagit
para verificar todos os arquivos. O prefixo será anexado à saída. Alguém também escreveu um wrapper para dar agit export
.fonte
GIT_WORK_TREE=/destinationpath git checkout -f
enquanto o diretório atual estiver no topo de um repositório vazio ou no subdiretório .git. Você fará um checkout em / destinationpath