Question Comment cloner une seule branche dans git?


J'ai un référentiel git local appelé «skeleton» que j'utilise pour stocker les squelettes du projet. Il a quelques branches, pour différents types de projets:

casey@agave [~/Projects/skeleton] git branch
* master
  rails
  c
  c++

Si je veux vérifier la branche principale pour un nouveau projet, je peux faire

casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/

et tout est comme je le veux. Plus précisément, la nouvelle branche principale pointe vers la branche maître squelette, et je peux pousser et tirer pour déplacer les modifications de la configuration de base du projet.

Ce qui ne marche pas, cependant, c'est si je veux cloner une autre branche. Je ne peux pas l'obtenir de sorte que je tire seulement la branche que je veux, par exemple la branche de rails, et alors le nouveau repo a une branche «maîtresse» qui pousse et tire de la branche «rails» du repo squelette, par défaut.

Y a-t-il un bon moyen de s'y prendre? Ou, peut-être que ce n'est pas la façon dont git veut que je structure les choses, et je suis certainement ouvert à cela. Peut-être que je devrais avoir plusieurs repos, avec les rails squelette repo suivi du repo maître squelette? Et tout projet individuel clonage des rails squelette repo.

Toutes les pensées et suggestions sont appréciées!


589
2017-11-22 07:21


origine


Réponses:


Noter la git1.7.10 (Avril 2012) vous permet réellement de cloner une seule branche:

# clone only the remote primary HEAD (default: origin/master)
git clone --single-branch

as in:
git clone <url> --branch <branch> --single-branch [<folder>]

Vous pouvez le voir dans t5500-fetch-pack.sh:

test_expect_success 'single branch clone' '
  git clone --single-branch "file://$(pwd)/." singlebranch
'

Tobu  commentaires cette:

C'est implicite quand on fait un clone peu profond.
  Cela fait git clone --depth 1 le moyen le plus simple d'économiser de la bande passante.

Et depuis Git 1.9.0 (février 2014), les clones peu profonds supportent le transfert de données (push / pull), de sorte que cette option est encore plus utile maintenant.
Voir plus à "Est git clone --depth 1 (clone peu profond) plus utile que cela le rend?".


"Undoing" un clone peu profond est détaillé à ""Convertir un clone peu profond en un clone complet"(git 1.8.3+)

# unshallow the current branch
git fetch --unshallow

# for getting back all the branches (see Peter Cordes' comment)
git config remote.origin.fetch refs/heads/*:refs/remotes/origin/*
git fetch --unshallow

Comme Chris commentaires:

la ligne magique pour faire disparaître les branches manquantes --single-branch est (git v2.1.4):

git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --unshallow  

629
2018-03-29 07:34



L'one-way est d'exécuter le suivant

git clone user@git-server:project_name.git -b branch_name /your/folder

Où branch_name est la branche de votre choix et "/ your / folder" est le dossier de destination de cette branche. C'est vrai que cela amènera d'autres branches qui vous donneront l'opportunité de fusionner d'avant en arrière. Maintenant, à partir de GIT 1.7.10, vous pouvez maintenant le faire

git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder

632
2017-08-12 02:02



En utilisant git version 1.7.3.1 (sous Windows), voici ce que je fais ($BRANCH est le nom de la succursale que je veux commander et $REMOTE_REPO est l'URL du référentiel distant dont je veux cloner):

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH

L'avantage de cette approche est que git pull (ou git fetch) les appels seront également télécharger la branche demandée.


102
2017-11-10 16:44



Vous pouvez essayer la manière longue et sinueuse:

mkdir newrepo.git
cd newrepo.git
git init
git remote add origin file:///path/to/original 
git fetch origin branchiwant:refs/remotes/origin/branchiwant
git checkout -b branchiwant --track origin/branchiwant

Qu'est-ce que cela fait est:

  • Créez et initez un dépôt git vide.
  • Ajoute le référentiel d'origine en tant qu'origine appelée distante.
  • Extrait uniquement la branche dont vous avez besoin depuis l'origine appelée distante.
  • Crée et extrait un nouveau brach qui est configuré pour suivre la branche source que vous venez de cloner.

Espérons que ce sera quelque chose comme ce que vous recherchez.


22
2017-11-22 08:10



de git-clone man page

--single-branch est ton ami pendant le clone
souvenez-vous d'utiliser avec --branch <branch name> ou seul HEAD primaire distant sera cloné (maître par défaut)

souvenez-vous toujours de faire CTRL + F5 pour lire la source fraîche, pas celle du cache :-)
(Je ne savais pas à propos de cette option depuis longtemps)


14
2018-02-25 13:10



Vous pouvez le faire en utilisant la commande ci-dessous:

git clone -b branch_name --single-branch project_url local_folder_to_clone_in

13
2017-08-06 06:21



git clone <url> --branch <branch> --single-branch

Il suffit de mettre le nom de l'URL et de la branche


4
2018-03-01 10:32



Peut être fait en 2 étapes

  1. Cloner le référentiel

    • git clone <http url>
  2. Commander la succursale que vous voulez

    • git checkout $BranchName

2
2017-09-12 18:10