Le site git clone --depth
L'option de commande dit
--depth <depth>
Create a shallow clone with a history truncated to the specified number of revisions.
A shallow repository has a number of limitations
(you cannot clone or fetch from it, nor push from nor into it),
but is adequate if you are only interested in the recent history of a large project with a long history,
and would want to send in fixes as patches.
Pourquoi les clones peu profonds ont-ils cette limitation ? Pourquoi s'agit-il d'un flux de travail uniquement basé sur des patchs ?
Pour certains flux de travail de projet, j'ai besoin de transmettre uniquement le dernier commit d'une branche unique à un codeur, puis de faire en sorte qu'il soit en mesure de push
leurs développements (en avance rapide) sur le serveur principal. Ceci en partie pour la sécurité, la protection de la propriété intellectuelle et la taille du repo, et en partie pour réduire la confusion qu'un gros repo apporterait à un codeur naïf. Existe-t-il un workflow git qui permette cela ?
Mise à jour : Sur la base de la réponse de Karl Bielefeldt, l'équipe d'experts de la Commission européenne a décidé de mettre en place un système d'alerte précoce. git checkout --orphan
devrait être la bonne réponse. Mais il faut encore "cloner" cette branche seule pour le nouvel utilisateur, et être capable de la pousser efficacement.
La page de manuel indique :
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>] --orphan
Créer une nouvelle branche orpheline, nommée
<new_branch>
à partir de<start_point>
et passer dessus. Le premier commit effectué sur cette nouvelle branche n'aura pas de parents et sera la racine d'un nouvel historique totalement déconnectée de toutes les autres branches et commits.L'index et l'arbre de travail sont ajustés comme si vous aviez précédemment exécuté
git checkout <start_point>
. Cela vous permet de commencer un nouvel historique qui enregistre un ensemble de chemins similaires à<start_point>
par facilementgit commit -a
pour faire le commit Root.Cela peut être utile lorsque vous souhaitez publier l'arbre d'un commit sans exposer son historique complet. Vous pouvez le faire pour publier une branche open source d'un projet dont l'arborescence actuelle est "propre", mais dont l'historique complet contient des morceaux de code propriétaires ou autrement de code propriétaire ou encombré.
Si vous voulez commencer un historique déconnecté qui enregistre un ensemble de chemins qui est totalement différent de celui de
<start_point>
alors vous devez effacer l'index et l'arbre de travail juste après avoir créé la branche orpheline en exécutantgit rm -rf .
du niveau supérieur de l'arbre de l'arbre de travail. Ensuite, vous serez prêt à préparer vos nouveaux fichiers, en repeuplant l'arbre de travail, en les copiant d'ailleurs, en extrayant une archive, etc.
Le lien de VonC vers les commentaires de Junio est intéressant. Je pense que le manuel devrait fournir des conseils dans ce cas, et permettre la bonne commande [ex. clone <branch> --options
] pour extraire uniquement la partie pertinente du repo. De toute évidence, la probabilité de push
Le succès est accru par la présence de quelques commits liés et de SHA1s au bas de l'historique qui verrouilleront la correspondance du repo.
Mise à jour de Git 1.9.0 : notes de mise à jour 14 février 14.
"Récupérer d'un dépôt cloné peu profond était interdit, principalement parce que les chemins de code impliqués n'étaient pas soigneusement vérifiés et nous n'avons pas pris la peine de supporter un tel usage. Cette version tente d'autoriser le transfert d'objets à partir d'un dépôt cloné peu profond de manière d'une manière plus contrôlée (c'est-à-dire que le récepteur devient un référentiel peu profond avec un historique tronqué).".
C'est une bonne nouvelle pour les cloneurs peu profonds. Suivant - Clones étroits éventuellement.
12 votes
"réduire la confusion qu'un gros repo apporterait à un codeur naïf" Je pense que vous avez besoin de nouveaux développeurs :)
3 votes
Ces nouveaux développeurs commencent comme des codeurs naïfs ;-) Et une partie de cette confusion consiste à s'habituer à git lui-même, ce qui peut être un défi, donc nous allons commencer simplement...
4 votes
L'idée d'avoir une liste de commits est probablement le concept le plus fondamental de Git. Si j'avais été introduit à Git avec des dépôts qui ne contenaient toujours qu'un seul commit, je pense que j'aurais été encore plus confus.
0 votes
@Josh, c'était plus qu'initialement un nouveau développeur (ou une équipe) qui commence juste à utiliser git, peut seulement commencer avec une profondeur superficielle (une demi-douzaine de commits ?) - cela se compare à certaines pratiques existantes où tout ce qu'ils voient est le dernier check-in ! Lorsque les cycles de produits sont pluriannuels, le style historique de gestion de contenu est lent, ce qui représente un changement de culture important.
0 votes
Git 2.5 (Q2 2015) supporte un commit fetch unique ! J'ai modifié ma réponse ci-dessous, en faisant maintenant référence à " Extraire un commit spécifique d'un dépôt git distant ".
1 votes
Il semble que vous puissiez actuellement : vérifier stackoverflow.com/a/21217267/4398050
0 votes
Indépendamment de la différence d'opinion ici dans les commentaires, merci pour la solution car je ne pouvais pas cloner un repo d'une très grande taille et j'ai dû utiliser l'option de profondeur comme mentionné ici pour cloner.