Nous avons essayé d'accélérer la construction continue (CI) d'un de nos projets logiciels au travail. Quelqu'un a commis des fichiers binaires énormes (selon les normes de git) au début de la vie du projet. Réécrire l'historique de git juste pour s'en débarrasser semble trop compliqué, donc nous avons pensé qu'une clonage peu profond évitant ces gros commits initiaux serait suffisant.
J'ai fait quelques expériences avec le paramètre --depth
pour le clonage et j'ai rencontré un comportement étrange. Voici ce que dit l'aide de git clone à ce sujet:
--depth
Crée un clonage peu profond avec un historique tronqué au nombre spécifié de commits. Implique
--single-branch sauf si --no-single-branch est donné pour récupérer les historiques près des extrémités de toutes
les branches. Si vous voulez cloner des sous-modules de manière peu profonde, passez aussi --shallow-submodules.
Cela indiquerait que équivaudra au nombre de commits qui seront récupérés lors du clonage, mais ce n'est pas le cas. Voici ce que j'ai obtenu quand j'ai essayé différentes valeurs pour depth:
| depth | nombre de commits repo linux | nombre de commits repo git |
|---------|-------------------------|-----------------------|
| 1 | 1 | 1 |
| 5 | 15 | 13 |
| 10 | 80 | 46 |
| 100 | 93133 | 39552 |
| 1000 | 788718 | 53880 |
Pour le clonage, j'ai utilisé cette commande git clone --depth 10 https://github.com/torvalds/linux.git
, git clone --depth 100 https://github.com/git/git.git
, et pour compter les commits j'ai utilisé ceci git log --oneline | wc -l
. (Au travail j'ai observé la même chose avec un serveur GitLab, donc cela ne peut pas être un artefact de la façon dont fonctionne GitHub.)
Est-ce que quelqu'un sait ce qui se passe? Comment la valeur de depth correspond-elle à la quantité réelle de données téléchargées? Est-ce que je comprends mal la documentation, ou y a-t-il un bug?
EDIT: J'ai ajouté les résultats pour un deuxième repo