Quero fazer check-out de uma versão específica de um arquivo específico de um repositório git remoto, sem baixar outros arquivos ou histórico desnecessários.
Dado um $URL
no formato https://github.com/foo/bar.git
e um $REVISION
que deve aceitar um nome de branch, um nome de tag ou um hash de commit curto ou longo, tenho esta solução:
git clone --depth 1 --no-checkout $URL .
git fetch origin $REVISION
git checkout FETCH_HEAD -- foo.txt
mas não funciona em hashes de commit curtos. A etapa fetch falha com fatal: couldn't find remote ref
, mas funciona com o hash de comprimento total. Existe uma solução geral que também funciona em hashes curtos?
A solução aqui , usando git show
, não funciona porque assume que a revisão já existe localmente.