Nessa dica vou mostar algo que parece simples (no Git), mas é bem complicadinho! =) Pois, na verdade, eu criei um script Shell Script que você pode rodar como comando na sua $PATH
.
Também vou disponibilizar uma solução a mais , mas não do Git e sim do SVN , que pra ser sincero, nem precisaria de uma função Shell, mas pra ficar ainda mais fácil também vou mostrar.
Pra você entender esse artigo você deve possuir conhecimentos básicos de Git e GitHub ou qualquer outro repositório Git.
Para isso recomendo você conhecer nossa paǵina específica para iniciantes em Git e GitHub: https://terminalroot.com.br/git . Lá você vai encontrar dicas em textos e vídeos, inclusive um mini-curso de Git e GitHub para Iniciantes .
Em resumo, clonar um repositório significa: copiar todos os arquivos dele para seu computador.
git clone é um utilitário de linha de comando Git que é usado para direcionar um repositório existente e criar um clone ou cópia do repositório de destino. É muito simples para clonar repositórios Git: GitHub , GitLab , BitBucket e entre outros.
O comando resume em:
git clone [repositório]
Por exemplo, eu tenho um repositório que é https://github.com/terroo/fonts , supondo que você deseja clonar esse repositório, o comando seria:
git clone https://github.com/terroo/fonts
Você ainda pode clonar já renomeando e/ou com o mesmo nome em um novo caminho do seu computador, exemplo:
git clone https://github.com/terroo/fonts novas-fonts
git clone https://github.com/terroo/fonts Downloas/novas-fontes
Ou até mesmo clonar com o mesmo nome em outro caminho:
git clone https://github.com/terroo/fonts Downloads/fonts
Observação: Se você informar um novo caminho, obrigatóriamente você precisa informar um nome , seja ele o mesmo nome ou um novo. Se você fizer assim, sem informar um nome, ele informará um erro:
fatal: destination path 'Downloads' already exists and is not an empty directory.
.
Além disso existem diversos parâmetros que você pode usar, aqui veremos alguns, mas você pode obter a documentação completa no site oficial do Git mais especificamente na URL: https://git-scm.com/docs/git-clone .
Esse repositório que eu usei como exemplo foi totalmente mal projetado, lá você não vai encontrar somente fonts , mas também: Wallpapers, arquivos de configuração para WM e entre outras coisas . E por conta disso, às vezes eu quero copiar somente um sub-diretório dentro dele .
Por exemplo, nesse repositório existe uma pasta/diretório de nome files e vamos supôr que eu queira copiar/clonar somente esse diretório/sub-diretório , se eu fizer isso: não dará certo, o Git não permite isso, haverá falha no comando clone:git clone https://github.com/terroo/fonts/files
marcos@gentoo ~ $ git clone https://github.com/terroo/fonts/files
Cloning into 'files'...
remote: Not Found
fatal: repository 'https://github.com/terroo/fonts/files/' not found
marcos@gentoo ~ $
E é bem inconveniente você clonar todo o repositório (que por sinal é bem grande) que vai demorar bastante, somente para usar os arquivos de um diretório específico do repositório.
Até a versão 2.18 do Git isso não era possível, mas a partir da versão 2.19 já é possível, logo verifique a versão do seu Git antes de prosseguir, use o comando git --version
para saber a versão. Se for igual ou maior de 2.19 é possível clonar somente um diretório específico.
Para clonar esse diretório (files, dentro do repositório) vamos usar os seguintes comandos, explicação nos comentários (#):
# Criar um diretório, para o Git não ficar bagunçado, e entrar no mesmo
mkdir meu-dir && cd meu-dir
# Iniciar um repositório Git
git init
# Rastrear o repositório, não informe o subdiretório
git remote add -f origin https://github.com/terroo/fonts/
# Ativar o recurso de verificação em árvore
git config core.sparseCheckout true
# Criar um arquivo no caminho: .git/info/sparse-checkout
# Que esttá dentro do diretório oculto .git que foi criado
# ao rodar o comando: git init
# E dentro dele inserir o nome do sub-diretório que você deseja somente clonar
echo 'files' >> .git/info/sparse-checkout
## Fazer o download com o pull e não com o clone
git pull origin master
Para cada comando , se você não entendeu bem, recomendo você dar uma olhada por cima no manual, por exemplo: man git remote
.
Se você acha muito processo rodar todos esse comandos, você pode usar um script em Shell, como eu havia dito para ficar automático e rodar somente um comando, veja o script clicando no link abaixo:
Se quiser que vire um comando para usar em qualquer diretório que você estiver, salve com o nome: git-dir
(ou o nome que você deseja) e mova pra onde desejar, exemplo:
sudo mv git-dir /usr/local/bin/git-dir
# Ou se você for um fanchato do UNIX:
# sudo install -D -v git-dir -t /usr/local/bin/git-dir
E pra usar basta rodar git-dir
em qualquer lugar que você estiver que o mesmo já mostrará o help exibindo as opções.
Pode-se notar que quando usamos o Git pra isso, esse clone , apesar de ser de um subdiretório , ainda assim vai ser muito lento. Para isso existe uma solução bem mais rápida que é o usando o SVN que é uma alternativa ao Git da Apache Software Foundation .
A diferença do SVN para o Git, na minha opinião, se resume nessas duas imagens abaixo, ou seja, não existe melhor e nem pior, existe aquele que atende suas necessidades específicas para cada caso.
O Apache Subversion (também conhecido por SVN) é um sistema de controle de versão desenhado especificamente para ser um substituto moderno do CVS, que se considera ter algumas limitações. O Subversion utiliza banco de dados Berkeley BD.
Antes de tudo , você precisa possuir ele instalado no seu sistema. Para isso use o gerenciador de pacotes da sua distro:
sudo emerge subversion # Gentoo, Funtoo e Portage baseds
sudo apt-get install subversion # Debian, Ubuntu, Linux Mint APT baseds
sudo pacman -S subversion # Arch Linux, Manjaro e PacMan baseds
sudo yum install subversion # Red Hat, CentOS e YUM baseds
sudo dnf install subversion # Fedora
E pra clonar basta usar o parâmetro export
com o fake-dir : trunk
entre o repositório e o subdiretório, exemplo:
svn export [repository]/trunk/[subdirectory]
Exemplo para o nosso caso:
svn export https://github.com/terroo/fonts/trunk/files
Se quiser que seja seu comando, basta criar um comando ou adicionar essa função ao seu ~/.bashrc
:
git-svn(){
if [[ ! -z "$1" && ! -z "$2" ]]; then
echo "Iniciando o clone/cópia ..."
repo=$(echo $1 | sed 's/\/$\|.git$//')
svn export "$repo/trunk/$2"
else
echo "Use: git-svn <repository> <subdirectory>"
fi
}
Nesse caso tratei o final do nome do repositório, caso o usuário copie com .git ou com / no final do nome da URL.
E para usar, basta rodar: git-svn [repository] [subdirectory]
Bem mais simples, né ?
Fica à sua escolha qual modo utilizar. Deixe suas dicas/dúvida nos comentários pra gente interagir na solução ou discussão sobre assuntos relacionados!
Abraços!