Eu quero clonar um repositório GIT e NÃO acabar com um .git
diretório. Em outras palavras, eu apenas quero os arquivos. Existe uma maneira de fazer isso?
git clone --no-checkout
fiz exatamente o oposto do que eu quero (me deu apenas o .git
diretório).
Estou tentando fazer isso em um repositório remoto , não local, o que significa que não é uma duplicata de " Como fazer uma" exportação git "(como" svn export ") " (mesmo que a solução possa acabar sendo a mesmo).
git archive
agora é (Q4 2017) mais precisa e não inclui pastas vazias.Respostas:
O comando git que seria o mais próximo do que você está procurando seria
git archive
.Veja o projeto de backup que usa o git : ele incluirá em um arquivo todos os arquivos (incluindo submódulos se você estiver usando o
git-archive-all
script)Você pode usar esse arquivo em qualquer lugar, devolvendo apenas arquivos, sem
.git
diretório.Se você precisar de pastas e arquivos apenas do primeiro nível:
Para listar apenas as pastas de primeiro nível de um repositório remoto:
Nota: isso não funciona no GitHub (não suportado)
Portanto, você precisará clonar (superficialmente para acelerar a etapa de clone) e arquivar localmente :
Outra opção seria fazer um clone superficial (como mencionado abaixo), mas localizando a pasta .git em outro lugar.
A pasta repo incluiria apenas o arquivo, sem
.git
.Nota:
git --git-dir
é uma opção do comandogit
, nãogit clone
.Atualização com o Git 2.14.X / 2.15 (quarto trimestre de 2017): evitará adicionar pastas vazias .
Veja commit 4318094 (12 de setembro de 2017) de René Scharfe (``) .
Sugerido por: Jeff King (
peff
) .(Mesclado por Junio C Hamano -
gitster
- na confirmação 62b1cb7 , 25 de setembro de 2017)fonte
git --git-dir=/dev/null clone --depth=1 /url/to/repo
git archive --remote=https://github.com/pornel/dssim.git @ | tar -t
eu entendotar: This does not look like a tar archive
. Não funciona com o GitHub? Além disso, o que@
significa?@
: removi-o. Além disso, o GitHub não suporta um controle remotogit archive
: editei a resposta para propor uma alternativa.tirado daqui
fonte
--format=tar
é desnecessário. "tar" é a saída padrão, sem necessidade de especificar.tar x
é suficientevocê pode criar um clone superficial para obter apenas as últimas revisões:
simplesmente exclua o diretório .git ou use-o
git archive
para exportar sua árvore.fonte
Por que não executar um clone e excluir o
.git
diretório para obter apenas uma cópia de trabalho?Edit: Ou, de fato, por que usar clone? É um pouco confuso quando você diz que deseja um repositório git, mas sem um
.git
diretório. Se você quer apenas uma cópia de algum estado da árvore, por que não fazer issocp -R
no shell em vez do clone git e depois excluir o.git
arquivo depois?fonte
Parece que você só quer uma cópia do código fonte. Se sim, por que não copiar o diretório e excluir o diretório .git da cópia?
fonte
git checkout -f
Há outra maneira de fazer isso dividindo o repositório da árvore de trabalho.
Este método é útil se você precisar atualizar esses arquivos git-less git regularmente. Por exemplo, eu o uso quando preciso fazer o check-out dos arquivos de origem e criar um artefato, depois copio o artefato em um repositório diferente apenas para implantação em um servidor e também o uso ao enviar o código-fonte para um servidor quando desejo o código-fonte para efetuar o checkout e incorporar o diretório www.
Criaremos duas pastas, uma para o git e para os arquivos de trabalho:
inicialize um repositório bare git:
Em seguida, crie um gancho pós-recebimento:
Edite o pós-recebimento no seu editor favorito:
Adicione isso como um controle remoto:
Agora, toda vez que você enviar para esse repositório simples, ele fará o checkout da árvore de trabalho para
/workingfiles/
. Mas/workingfiles/
ele próprio não está sob controle de versão; correndogit status
em/workingfiles/
dará o errofatal: Not a git repository (or any parent up to mount point /data)
. São apenas arquivos simples.Ao contrário de outras soluções, o
rm -r .git
comando não é necessário, portanto, se/workingfiles/
houver algum outro repositório git, você não precisa se preocupar com o comando usado para remover os arquivos git do outro repositório.fonte