remote Como puxar diretório específico com git




push pull fetch git (7)

Eu tenho um projeto com git, e eu só quero clonar ou puxar um diretório específico, como myproject / javascript assim como o subversion faz.
faça algumas alterações, confirme e empurre novamente.
É possível?


git clone --filter do Git 2.19

Esta opção irá realmente pular a busca de objetos desnecessários do servidor.

Eu escrevi uma resposta detalhada explicando o status atual do suporte em: Como clonar um subdiretório apenas de um repositório Git?

É muito provável que o que for implementado para o git clone nessa área também tenha análogos de git pull .


Às vezes, você só quer dar uma olhada nas cópias anteriores dos arquivos sem a ladainha de passar pelos diffs.

Nesse caso, é tão fácil fazer um clone de um repositório e verificar o commit específico que você está interessado e dar uma olhada no subdiretório desse repositório clonado. Como tudo é local, você pode simplesmente excluir esse clone quando terminar.


Não é possível. Você precisa puxar todo o repositório ou nada.


Talvez este comando possa ser útil:

git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit  path/to/your/dir/or/file > files.tar

"Et voilà"


Entendo. Vou tentar criar submódulos e ver se funciona para mim. Vou reportar resultados. EDIT: check-out esparso e submodules funcionou para mim. Os links que eu usei para ler sobre (dados por VonC e Michel Jansen) são:

Como git-pull todos, mas uma pasta

http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout

http://vmiklos.hu/blog/sparse-checkout-example-in-git-1-7

http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout

atualização do submodule git


Em um diretório vazio:

git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory

Depois de muito procurar uma resposta, não encontrar, desistir, tentar novamente e assim por diante, finalmente encontrei uma solução para isso em outro thread SO:

Como git-pull todos, mas uma pasta

Para copiar e colar o que está lá:

git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master

Para fazer o que o OP quer (trabalhe apenas em um diretório), apenas adicione esse diretório a .git/info/sparse-checkout , ao executar as etapas acima.

Muito obrigado a @cforbish!





pull