Est-il OK de copier (pas de cloner) un dépôt git en utilisant les commandes Unix de base?


22

Je suis assez nouveau dans l'utilisation de git et je me demandais s'il était correct de copier un référentiel Git avec des commandes UNIX courantes (comme cpou tar/ untag), plutôt que via git clone.

Je suis dans la situation où j'ai un environnement de production (python virtuel) que du code a extrait dans git. Je me demande si c'est une mauvaise idée d'un point de vue git de copier tout l'environnement en utilisant un tarou quelque chose. Cette approche serait pratique pour faire une copie rapide d'une base de code / environnement.

Ma préoccupation est que peut-être git clone associe un identifiant unique à la copie de travail qui pourrait provoquer des conflits si deux copies de travail existent là où l'une a été copiée par le système de fichiers de l'autre.


Wow, j'étais dans cette situation parce que j'avais certains fichiers sous contrôle de source et d'autres non, et j'avais les autorisations de fichiers que je devais conserver. Je suis content que vous ayez posé cette question.
Joe C

Réponses:


21

C'est parfaitement bien.

git stocke toute son histoire, s'engage, etc. sur place - c'est une propriété fondamentale d'un DCVS.

Techniquement parlant, cela gitpeut très bien fonctionner avec des référentiels copiés qui tournent partout, car tout l'intérêt d'un DCVS est qu'il n'a pas à savoir ce qui se passe en dehors d'un référentiel donné , et en fait pas à moins que vous ne le disiez .

Le même principe s'applique ici.


1
Ma compréhension est qu'un référentiel cloné contiendra un lien vers le parent. L'utilisation d'une commande de copie du système d'exploitation ne créera pas ce lien.
Tony

@Tony True, mais vous pouvez supprimer ce lien en utilisant git remote remove origin, ce qui empêche Git d'utiliser le référentiel parent en amont.
new123456

2

Vous devriez pouvoir copier l'intégralité du répertoire de travail n'importe où ailleurs sur votre système et le faire continuer à fonctionner normalement lorsque vous utilisez Git, Hg ou SVN. Je ne peux pas commenter d'autres SCM.


0

C'est un cas d'utilisation plus inhabituel, mais ...

J'ai vu l' repoutilitaire créer des liens symboliques dans le .gitrépertoire. Dans ce cas, lorsque vous effectuez une copie, vous devez vous assurer de déréférencer les liens symboliques. Par exemple:

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

0

C'est OK mais si vous êtes sur le point de partager votre repo avec quelqu'un d'autre, veuillez considérer les points suivants :

  • Votre configfichier peut contenir des télécommandes que l'autre personne pourrait ne pas aimer.
  • Votre logsdossier contiendra des références que vous ne voudrez peut-être pas partager. Git est excellent pour vous permettre de faire les choses désagréables sur votre ordinateur jusqu'à ce que vous soyez à l'aise avec le résultat final, puis poussez-le sur la télécommande pour le partager (occasionnellement). Une partie de cette histoire désagréable pourrait être dans votre reflog, il est donc préférable de ne pas la partager à mon humble avis.
  • Votre info/excludefichier peut ignorer certains fichiers que vous souhaitez ignorer.
  • Vous pouvez également avoir des crochets, des branches et un tas d'autres trucs qui sont personnels et que vous préférez ne pas partager ...
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.