O caminho mais curto para baixar do GitHub

7

Isto é, como faço o download de várias ramificações mestras do GitHub, e pretendo ter um script mais bonito (e talvez mais confiável?).

wget -P ~/ https://github.com/user/repository/archive/master.zip
unzip ~/master.zip
mv ~/*-master ~/dir-name

Isso pode ser reduzido a uma linha de alguma forma, talvez com tar e pipe?

Por favor, abordar questões de download diretamente para o diretório base ~/ e ter um certo nome para o diretório ( mv realmente necessário?).

    
por shorter 04.02.2018 / 14:00

3 respostas

14

O caminho mais curto que parece ser o que você deseja seria git clone https://github.com/user/repository --depth 1 --branch=master ~/dir-name . Isso só copiará a ramificação principal, copiará o mínimo possível de informações extras e armazenará em ~/dir-name .

    
por 04.02.2018 / 14:20
4

Isso irá clonar os arquivos no novo diretório criado:

git clone [email protected]:whatever NonExistentNewFolderName
    
por 04.02.2018 / 15:00
3

Vamos começar com a função bash que eu tinha à mão para meu uso pessoal:

wget_github_zip() {
  if [[ $1 =~ ^-+h(elp)?$ ]] ; then
    printf "%s\n" "Downloads a github snapshot of a master branch.\nSupports input URLs of the forms */repo_name, *.git, and */master.zip"
    return
    fi
  if [[ ${1} =~ /archive/master.zip$ ]] ; then
    download=${1}
    out_file=${1/\/archive\/master.zip}
    out_file=${out_file##*/}.zip
  elif [[ ${1} =~ .git$ ]] ; then
    out_file=${1/%.git}
    download=${out_file}/archive/master.zip
    out_file=${out_file##*/}.zip
  else
    out_file=${1/%\/} # remove trailing '/'
    download=${out_file}/archive/master.zip
    out_file=${out_file##*/}.zip
    fi
  wget -c ${download} -O ${out_file}
  }

Você quer que o arquivo seja sempre chamado master.zip e sempre seja baixado no seu diretório pessoal, então:

wget_github_zip() {
  if [[ $1 =~ ^-+h(elp)?$ ]] ; then
    printf "%s\n" "Downloads a github snapshot of a master branch.\nSupports input URLs of the forms */repo_name, *.git, and */master.zip"
    return
    fi
  if [[ ${1} =~ /archive/master.zip$ ]] ; then
    download=${1}
  elif [[ ${1} =~ .git$ ]] ; then
    out_file=${1/%.git}
    download=${out_file}/archive/master.zip
  else
    out_file=${1/%\/} # remove trailing '/'
    download=${out_file}/archive/master.zip
    fi
  wget -c ${download} -O ~/master.zip && unzip ~/master.zip && mv ~/master.zip ~/myAddons
  }

No entanto, existem algumas coisas para você considerar:

1) Meu script original fornecerá um nome de arquivo zip exclusivo para cada download, com base no nome do repositório github, que geralmente é o que a maioria das pessoas deseja, em vez de ser chamado master e ter que ser manualmente renomeie-os depois para unicidade. Nessa versão do script, você pode usar o valor de $ out_file para nomear com exclusividade o diretório raiz da árvore descompactada.

2) Se você realmente quiser que todos os arquivos zip carregados sejam nomeados ~/master.zip , você deseja excluir cada um depois de terem sido descompactados?

3) Já que você parece querer sempre colocar tudo no diretório ~/myAddons , por que não executar todas as operações lá e economizar a necessidade de mover o diretório descompactado?

    
por 04.02.2018 / 14:22

Tags