Je fais du travail pour suivre un bug perçu dans un outil de support GIT, et je souhaite copier un référentiel (éventuellement plusieurs fois) à des fins expérimentales. Je voudrais que les liens difficiles soient créés dans la base de données d'objet de référentiel d'origine afin de ne pas gaspiller de l'espace disque stockant plusieurs copies d'objets identiques avec des valeurs SHA identiques. Git Clone l'accomplit bien, mais malheureusement, je ne peux malheureusement pas trouver un moyen de faire de GIT Clone, donnez-moi une nouvelle copie du référentiel configuré comme le référentiel d'origine: P>
Je peux améliorer une partie de cela en utilisant Git Clone --Mirror, mais cela ne fonctionnera que pour créer un référentiel nu, et le référentiel que j'essaye n'est pas nue et que l'outil de soutien que j'essaie de déboguer ne fonctionne pas. fonction sur les référentiels nus. p>
J'ai pensé à écrire une boucle de shell rapide pour créer une nouvelle base de données d'objets pleine de lignes hardlinks dans la base de données d'objets d'origine, puis copiez tout ce qui est sur le répertoire .git d'origine, puis faire une caisse de git, mais je suis concerné. Ceci est suffisamment compliqué pour être sujet aux erreurs et que je ne connais pas suffisamment pour effectuer correctement ce type de chirurgie de bas niveau et construire un référentiel avec des erreurs subtiles. Si cette approche fonctionne, en théorie? P>
Mieux encore, y a-t-il un moyen de passer des options pour git clone pour faire ce que je veux? p>
Y a-t-il une façon de créer un nouveau référentiel, mais de le dire que sa base de données d'objets est dans un autre répertoire, lui indiquant essentiellement de partager la base de données d'objets à partir du référentiel d'origine? P>
Si rien de ce qui précède ne fonctionne, alors je ne suis laissé avec un seul CP -PR, qui va consommer beaucoup d'espace et consommer du temps. P>
3 Réponses :
Je pense que vous recherchez
git clone --reference=/path/to/existing/repo url
Utilisez "git clone-mirror", puis changez-le du référentiel nué au référentiel non nu (renommé Repo.Git to Repo / .git, copier / fichier de configuration, répertoire de travail à la caisse à l'aide de "head de checkout git") . Remarque: je n'ai pas vérifié si cela fonctionne comme prévu! P>
Utilisez clone git avec l'option -NO-Checkout. Mettez à jour le référentiel Git avec Git Fetch au lieu de Git Tirez pour éviter une commande. P>