É possível copiar (não clonar) um repositório git usando comandos básicos do Unix?


22

Eu sou muito novo no uso do git e queria saber se não há problema em copiar um repositório Git com comandos comuns do UNIX (como cpou tar/ untag), em vez de através git clone.

Estou na situação em que tenho um ambiente de produção (python virtual) em que algum código foi verificado no git. Gostaria de saber se é uma má idéia, do ponto de vista do git, copiar todo o ambiente usando um tarou algo assim. Essa abordagem seria conveniente para fazer uma cópia rápida de uma base de código / ambiente.

Minha preocupação é que talvez o git clone associe algum ID exclusivo à cópia de trabalho que possa causar conflitos se existirem duas cópias de trabalho em que uma foi copiada do sistema de arquivos da outra.


Uau, eu estava nessa situação porque tinha alguns arquivos sob controle de origem e outros não, e tinha permissões de arquivo que precisava preservar. Estou feliz que você fez esta pergunta.
Joe C

Respostas:


21

Está perfeitamente bem.

git armazena toda a sua história, confirmações etc. no local - essa é uma propriedade fundamental de um DCVS.

Tecnicamente falando, gitpode funcionar muito bem com repositórios copiados correndo ao redor em toda parte, porque o ponto inteiro de um DCV são é que ele não tem que saber o que está acontecendo do lado de fora de um determinado repositório , e na verdade não a menos que você diga a ele .

O mesmo princípio se aplica aqui.


1
Meu entendimento é que um repositório clonado conterá um link para o pai. O uso de um comando de cópia do SO não criará esse link.
Tony

@ Tony True, mas você pode remover esse link usando git remote remove origin, o que impede o Git de usar o repositório pai como um upstream.
new123456

2

Você deve copiar todo o diretório ativo para qualquer outro lugar no sistema e continuar funcionando normalmente ao usar Git, Hg ou SVN. Não posso comentar sobre outros SCMs.


0

Este é um caso de uso mais incomum, mas ...

Eu já vi o repoutilitário criar links simbólicos no .gitdiretório Nesse caso, quando você estiver fazendo uma cópia, certifique-se de remover a referência de links simbólicos. Por exemplo:

cp -r -L <source-repo-dir> <destination-repo-dir>

0

Tudo bem, mas se você estiver prestes a compartilhar seu repo com outra pessoa, considere o seguinte :

  • Seu configarquivo pode ter controles remotos que a outra pessoa pode não se importar.
  • Sua logspasta terá referências que talvez você não queira compartilhar. O Git é ótimo em permitir que você faça coisas desagradáveis ​​no computador até se sentir confortável com o resultado final e, em seguida, empurre-o para o controle remoto para (ocasionalmente) compartilhá-lo. Parte dessa história desagradável pode estar no seu reflog, por isso é melhor não compartilhá-lo no IMHO.
  • Seu info/excludearquivo pode estar ignorando alguns arquivos que apenas você deseja ignorar.
  • Você também pode ter ganchos, galhos e várias outras coisas pessoais, e você prefere não compartilhar ...
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.