2017-09-08 4 views
1

J'ai trouvé beaucoup de questions/réponses sur le clonage d'un dépôt et l'extraction immédiate d'un ID de validation donné. approche Trivial:git: identifiant de validation spécifique à un clone sur un clone peu profond

git clone <URL> working-copy 
cd working-copy; git checkout <COMMIT-ID> 

Avec branches vous pouvez juste git clone -b <BRANCH> <URL>

Avec branches vous pouvez aussi faire un clone peu profond ce qui rend le clonage beaucoup plus rapide, mais vous pouvez pas commander une carte d'identité plus arbitraire. Donc, ma question est: est-il possible de faire un clone superficiel d'une URL/ID de commit sans avoir à créer une branche sur la télécommande? Y a-t-il des différences entre les différents types de référentiels distants? (par exemple, système de fichiers local, BitBucket, GitHub, GitLab, etc.)

+0

Cela tombe bien dans le camp 'ça dépend', est-ce que vous utilisez votre propre serveur? Ou utilisez-vous un service comme GitHub ou BitBucket? – LightBender

+0

Non. Vous devez créer une branche ou une balise sur ce commit dans le référentiel distant. Voir https://stackoverflow.com/questions/26135216/why- isnt-there-a-git-clone-specific-commit-option. – ElpieKay

+0

@LightBender: dans mon cas, je suis intéressé par les dépôts locaux et BitBucket (via http/ssh) – frans

Répondre

2

Si vous n'avez pas le contrôle du serveur, vous ne pourrez pas le faire. Il existe un paramètre de sécurité que vous pouvez désactiver sur un serveur privé pour que cela fonctionne, mais c'est et non recommandé. Comme les clones peu profonds sont incomplets, beaucoup de caractéristiques ne sont pas disponibles (ou du moins ne fonctionneront pas tout à fait correctement) dans un repo peu profond. Habituellement, cette technique est utilisée pour le traitement du déploiement où le repo est de très courte durée. Cela étant dit, dans la plupart des situations où vous voudriez cloner un seul commit, une balise pourrait être ce que vous cherchez. git clone -b acceptera également un tag, et comme ils sont immuables, ils seront toujours résolus au même commit.

La plupart des systèmes CI que j'ai construits au cours des deux dernières années utilisent des branches pour les environnements transitoires et des tags uniquement pour les systèmes permanents. Ce système a bien fonctionné pour moi, mais n'est qu'une des nombreuses options solides.

+0

Je viens de trouver https://stackoverflow.com/a/43136160/1668622 - cette approche nécessite de modifier le paramètre de sécurité que vous avez mentionné ? Et de quel cadre parlez-vous exactement? – frans

+0

@frans Cette approche est la modification du réglage que j'ai mentionné. :) Voir [la documentation git] (https://github.com/git/git/blob/565301e41670825ceedf75220f2918ae76831240/Documentation/git-upload-archive.txt#L23-L53) pour une explication détaillée. – LightBender