92 votes

Convertir le dépôt git en peu profond ?

Comment puis-je convertir un référentiel git déjà cloné en un référentiel superficiel ?

Le référentiel git est téléchargé via un script hors de mon contrôle, je ne peux donc pas faire de clone superficiel.

La raison pour cela est d'économiser de l'espace disque. (Oui, je manque vraiment d'espace disque, donc même si un référentiel peu profond n'économise pas beaucoup, il est nécessaire.)

j'ai déjà essayé

 git repack -a -d -f -depth=1

Mais cela a en fait agrandi le référentiel.

17voto

user212328 Points 121

Vous pouvez convertir git repo en un peu profond en place le long de ces lignes :

 git show-ref -s HEAD > .git/shallow
git reflog expire --expire=0
git prune
git prune-packed

Assurez-vous de faire une sauvegarde car il s'agit d'une opération destructrice, gardez également à l'esprit que le clonage ou la récupération à partir d'un dépôt superficiel n'est pas pris en charge ! Pour vraiment supprimer tout l'historique, vous devez également supprimer toutes les références aux commits précédents avant de procéder à l'élagage.

12voto

Pop Catalin Points 25033

Convertir en peu profond depuis une date spécifique :

 git pull --shallow-since=YYYY-mm-dd
git gc --prune=all

Fonctionne aussi :

 git fetch --shallow-since=YYYY-mm-dd
git gc --prune=all

11voto

Vasya Novikov Points 1670

Créez un clone superficiel d'un dépôt local :

 git clone --depth 1 file:///full/path/to/original/dir destination

Notez que la première "adresse" doit être un file:// , c'est important. De plus, git supposera que votre adresse file:// locale d'origine est la "distante" ("origine"), vous devrez donc mettre à jour le nouveau référentiel en spécifiant le bon git remote .

8voto

Samuel Marks Points 21

En combinant la réponse de @fuzzyTew avec les commentaires sur cette réponse :

 git pull --depth 1
git tag -d $(git tag -l)
git reflog expire --expire=all --all
git gc --prune=all

Vous voulez économiser de l'espace en l'exécutant sur l'ensemble de votre disque ? - Ensuite, exécutez cette commande fd :

 fd -HIFt d '.git' -x bash -c 'pushd "$0" && ( git pull --depth 1; git tag -d $(git tag -l); git reflog expire --expire=all --all; git gc --prune=all ) && popd' {//}

Ou avec juste find normal :

 find -type d -name '.git' -exec bash -c 'pushd "${0%/*}" && ( git pull --depth 1; git tag -d $(git tag -l); git reflog expire --expire=all --all; git gc --prune=all ) && popd' {} \;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X