Qual é o mecanismo mais eficiente (em relação aos dados transferidos e ao espaço em disco usado) para obter o conteúdo de um único arquivo em um repositório git remoto?
Até agora eu consegui pensar em:
git clone --no-checkout --depth 1 [email protected]:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
Isso ainda parece um exagero.
Que tal obter vários arquivos do repositório?
git
git-checkout
sparse-checkout
git-sparse-checkout
dreftymac
fonte
fonte
Respostas:
na versão 1.7.9.5 do git, isso parece funcionar para exportar um único arquivo de um controle remoto
Isso classificará o conteúdo do arquivo
README.md
.fonte
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
cat README.md
tar -xO
a saída para STDOUT para tubulação, por exemploFILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
Na sequência do Jakub 's resposta .
git archive
produz um arquivo tar ou zip, então você precisa canalizar a saída através do tar para obter o conteúdo do arquivo:Salvará uma cópia de 'filename' do HEAD do repositório remoto no diretório atual.
A
:path/to/directory
peça é opcional. Se excluído, o arquivo buscado será salvo em<current working dir>/path/to/directory/filename
Além disso, se você deseja ativar o uso de
git archive --remote
repositórios Git hospedados pelo git-daemon, é necessário ativar a opção de configuração daemon.uploadarch. Consulte https://kernel.org/pub/software/scm/git/docs/git-daemon.htmlfonte
Se houver uma interface da web implantada (como gitweb, cgit, Gitorious, ginatra), você poderá usá-la para fazer o download de um único arquivo (visualização "bruta" ou "simples").
Se o outro lado o ativou , você pode usar a opção git archive 's'
--remote=<URL>
'(e possivelmente limitá-la a um diretório no qual o arquivo reside), por exemplo:fonte
git config daemon.uploadarch true
no repositório remoto. Por padrão, o git daemon desabilita o arquivamento remoto com "fatal: erro remoto: acesso negado ou repositório não exportado: ..."git archive
abordagem foi minha primeira tentativa - mas notei que exigirtar
na máquina cliente não era exatamente conveniente para os usuários do Windows. Acabamos buscando no nossocgit
servidor local . Funciona, mas não é tão rápido quanto eu gostaria que fosse (e ainda requer execuçãounix2dos
ou semelhante em máquinas Windows, pois armazenamos arquivos com as terminações de linha Unix no repositório Git).Não em geral, mas se você estiver usando o Github:
Para mim,
wget
o URL bruto acabou sendo a melhor e mais fácil maneira de baixar um arquivo específico.Abra o arquivo no navegador e clique no botão "Raw". Agora atualize seu navegador, copie o URL e faça um
wget
oucurl
nele.wget exemplo:
wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py
Exemplo de ondulação:
curl 'https://example.com/raw.txt' > savedFile.txt
fonte
curl https://example.com/raw.txt > savedFile.txt
Para exportar um único arquivo de um controle remoto:
Isso fará o download do arquivo
README.md
no seu diretório atual.Se você deseja que o conteúdo do arquivo seja exportado para STDOUT:
Você pode fornecer vários caminhos no final do comando.
fonte
Parece uma solução para mim: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
onde
4
significa quatro revisões a partir de agora e~
é um til como mencionado no comentário.fonte
git show HEAD:./my_other_file > local_file
se o arquivo não está na sua dir raiz :)Eu uso isso
fonte
wget https://raw.github.com/bk322/bk_automates/master/bkubuntu/bkubuntu.bash
ERROR: Certificate verification error for raw.github.com: unable to get local issuer certificate.
To connect to raw.github.com insecurely, use '--no-check-certificate'.
Uma variante diferenciada de algumas das respostas aqui que responde à pergunta do OP:
fonte
Se o seu repositório suportar tokens (por exemplo, GitLab), gere um token para o usuário, navegue até o arquivo que você fará o download e clique na saída RAW para obter o URL. Para baixar o arquivo, use:
fonte
Eu resolvi desta maneira:
Se desejar, você pode substituir "BranchName" por "HEAD"
fonte
Parece-me a maneira mais fácil de usar o seguinte:
fonte
A resposta de Yisrael Dov é direta, mas não permite a compressão. Você pode usá-lo
--format=zip
, mas não pode descompactá-lo diretamente com um comando de pipe como pode com o tar, portanto, você deve salvá-lo como um arquivo temporário. Aqui está um script:Isso funciona com diretórios também.
fonte
Para um arquivo único, basta usar o comando wget.
Primeiro, siga a foto abaixo para clicar em "bruto" para obter o URL, caso contrário, você fará o download do código incorporado no html.
Em seguida, o navegador abrirá uma nova página com o URL iniciado por https://raw.githubusercontent.com/ ...
basta digitar o comando no terminal:
Um pouco o arquivo será colocado na sua pasta.
fonte
Se o seu repositório Git estiver hospedado no Azure-DevOps (VSTS), você poderá recuperar um único arquivo com a API Rest .
O formato desta API se parece com o seguinte:
Por exemplo:
fonte
Eu uso curl, ele funciona com repositórios públicos ou com autenticação básica https através de uma interface da web.
curl -L --retry 20 --retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD
Eu testei no github e no bitbucket, funciona em ambos.
fonte
Se você deseja obter um arquivo de um hash + um repositório remoto específico, tentei o git-archive e não funcionou.
Você teria que usar o git clone e, uma vez que o repositório é clonado, você teria que usar o git-archive para fazê-lo funcionar.
Postei uma pergunta sobre como fazê-lo mais simples no arquivo git a partir de um hash específico do controle remoto
fonte
para bitbucket diretamente do navegador (usei o safari ...), clique com o botão direito do mouse em 'View Raw "e escolha" Download Linked File ":
fonte
Se você não se importa em clonar o diretório inteiro, essa pequena função bash / zsh terá como resultado final a clonagem de um único arquivo no diretório atual (clonando o repo em um diretório temporário e removendo-o posteriormente).
Pro: você só obtém o arquivo que deseja
Contras: Você ainda precisa esperar o repo inteiro clonar
fonte
Solução Github Enterprise
fonte
GITHUB_PERSONAL_ACCESS_TOKEN
?Se seu objetivo é apenas fazer o download do arquivo, há um aplicativo sem complicações chamado
gget
:O exemplo acima baixaria um arquivo único do
hugo
repositório.https://github.com/dpb587/gget
fonte
Relacionado à resposta de Steven Penny, eu também uso o wget. Além disso, para decidir qual arquivo enviar a saída, eu uso -O.
Se você estiver usando o gitlabs, outra possibilidade para o URL é:
A menos que você tenha o certificado ou acesse a partir de um servidor confiável para a instalação do gitlabs, você precisará --no-check-certificate, como disse o @Kos. Prefiro isso do que modificar o .wgetrc, mas isso depende das suas necessidades.
Se for um arquivo grande, você pode considerar usar a opção -c com o wget. Para poder continuar baixando o arquivo de onde você o deixou, se a intenção anterior falhar no meio.
fonte