Eu tenho um projeto com o git e só quero clonar ou extrair um diretório específico, como myproject / javascript, assim como o subversion.
faça algumas alterações, confirme e empurre novamente.
É possível?
Eu tenho um projeto com o git e só quero clonar ou extrair um diretório específico, como myproject / javascript, assim como o subversion.
faça algumas alterações, confirme e empurre novamente.
É possível?
Respostas:
git fetch
git checkout HEAD path/to/your/dir/or/file
Onde " path/...
" em (3) começa no diretório logo abaixo da raiz do repositório que contém o seu " .../file
"
Observe que, em vez de "HEAD", o código de hash de uma confirmação específica pode ser usado e, em seguida, você obterá a revisão (arquivo) ou a revisão (dir) específica dessa confirmação.
--
não é necessário. Ele força os bits após serem interpretados como um caminho. Portanto, sim, se você tiver um arquivo com o nome --help
que deseja efetuar o checkout, será necessário git checkout HEAD -- --help
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
fetch
ou checkout
comando; podemos simplesmente fazer a solicitação pull após o remote add
comando para obter todo o ramo mestre.
Depois de muito procurar uma resposta, sem encontrar, desistir, tentar de novo e assim por diante, finalmente encontrei uma solução para isso em outro tópico do SO:
Como git-pull, exceto 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 deseja (trabalhe em apenas um diretório), basta adicionar esse diretório ao .git/info/sparse-checkout
executar as etapas acima.
Muito obrigado a @cforbish!
master
. Apenas certifique-se que você faz git branch --set-upstream-to=origin/<branch>
para puxar corretamente
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à"
Se você deseja obter as alterações mais recentes em um diretório sem inseri-lo, é possível:
$ git -C <Path to directory> pull
git clone --filter
do Git 2.19
Essa opção realmente ignora a busca de objetos desnecessários do servidor.
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 tudo o que for implementado git clone
nessa área também tenha git pull
análogos.
Tentei e testei isso funciona!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
Espero que isso tenha sido útil!
Às vezes, você só quer dar uma olhada nas cópias anteriores dos arquivos sem a dificuldade de passar pelas diferenças.
Nesse caso, é igualmente fácil criar um clone de um repositório e verificar o commit específico no qual você está interessado e dar uma olhada no subdiretório nesse repositório clonado. Como tudo é local, você pode excluir este clone quando terminar.
Por toda essa luta com caminhos de arquivos teóricos e exemplos como eu, aqui está um exemplo do mundo real: a Microsoft oferece seus documentos e exemplos no git hub, infelizmente eles reúnem todos os seus arquivos de exemplo para uma grande quantidade de tópicos neste repositório:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Eu só estava interessado nos arquivos js do Microsoft Dynamics no caminho
msdn-code-gallery-community-s-z/Sdk.Soap.js/
então eu fiz o seguinte
Crie um
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
arquivo na minha pasta de repositórios no disco
git sparse-checkout init
nesse diretório usando o cmd no windows
O conteúdo do arquivo
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
é
Sdk.Soap.js/*
finalmente faça um
git pull origin master