verificando uma parte de um repositório git

7

Como posso fazer o check-out de apenas uma parte de um repositório Git? Eu tenho um repositório que tem vários módulos, e eu só quero um dos módulos instalados em um site específico.

No Subversion, eu faria svn export http://example.com/repository/path/to/module ./module-name .

    
por ceejayoz 18.05.2010 / 19:13

3 respostas

3

Como o @Chris mencionou, as versões atuais do Git suportam o checkout esparso.

Para converter um repositório local para conter apenas diretórios especificados:

cd <repo/location>
git config core.sparsecheckout true
echo desiredDir/ >> .git/info/sparse-checkout    # repeat to add multiple subdirs (the rest will be removed)

Agora, para remover todos, mas os diretórios especificados:

 git read-tree -mu HEAD             # remove all, but those in .git/info/sparse-checkout
    
por 15.08.2014 / 19:43
2

Acho que o equivalente mais próximo de svn export seria git archive . Você poderia puxar o diretório path/to/module da ramificação master de um repositório e colocar no diretório local module-name desta forma:

git archive --remote=url-of-Git-repository --prefix=module-name/ master:path/to/module |
tar xf -

Se o servidor remoto não suportar o arquivamento, puxe o arquivo de um clone local (simples) (usar um clone simples evita ter outra cópia dos arquivos no repositório local, se isso for importante).

No entanto, seu uso de "check-out" implica (para mim) que você deseja ter uma árvore de trabalho funcional do Git com apenas alguns dos arquivos presentes. Pode-se conseguir isso com a funcionalidade “checkout esparsa” introduzida no Git 1.7.0.

Ativar essa funcionalidade por

  1. definindo a opção de configuração core.sparseCheckout como "true" * e
  2. preenchendo o arquivo per-repository $GIT_DIR/info/sparse-checkout com os padrões para os nomes de caminho para manter ** .

    Pode-se usar o “skip-worktree bit” de baixo nível no índice *** para gerenciar a escassez de arquivos individuais, mas provavelmente é mais fácil usar o mecanismo de nível superior.

Existem algumas lacunas na interface geral do usuário (ou seja, não há uma maneira fácil de dizer "clone o repositório neste URL, mas apenas check-out X, Y e Z"), mas deve ser suficiente para obter "checkout parcial" funcionalidade.

* veja “core.sparseCheckout” no git config manpage
** veja “Verificação esparsa” no git leia-árvore manpage
*** consulte "Skip-worktree bit" no git update- índice manpage

    
por 18.05.2010 / 23:07
1

link

No, that's not possible in Git.

Implementing something like this in Git would be a substantial effort and it would mean that the integrity of the clientside repository could no longer be guaranteed. If you are interested, search for discussions on "sparse clone" and "sparse fetch" on the git mailinglist.

    
por 18.05.2010 / 21:27