Comment cloner une seule branche dans Git?

j'ai un dépôt Git local appelé "skeleton" que j'utilise pour stocker des squelettes de 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 le faire

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

et tout est comme je le souhaite. Plus précisément, la nouvelle branche master pointe vers la branche skeleton master, et je peux pousser et tirer pour déplacer les changements dans la configuration de base du projet.

ce qui ne fonctionne pas, cependant, c'est si je veux cloner une autre branche. Je ne peux pas l'obtenir de sorte que je ne tire que la branche que je veux, par exemple la branche rails , et ensuite le nouveau dépôt a une branche master qui pousse et tire vers la branche rails du dépôt squelette, par défaut.

Est-il une bonne façon de faire? Ou, peut-être que ce n'est pas la façon dont Git veut que je structure les choses, et je suis certainement ouvert à que. Peut-être devrais-je avoir plusieurs dépôts, avec le dépôt de squelette Ruby on Rails qui suit le dépôt de squelette principal? Et tout projet de Clonage individuel du dépôt de squelettes de Ruby on Rails.

608
demandé sur Casey Rodarmor 2009-11-22 10:21:19

14 réponses

Note: the git1.7.10 (avril 2012) permet en fait 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 en t5500-fetch-pack.sh :

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

Tobu commentaires :

ceci est implicite lorsque l'on fait une clone.

Cela fait de git clone --depth 1 la façon la plus facile d'économiser de la bande passante.

et depuis Git 1.9.0 (février 2014), les clones superficiels supportent le transfert de données (push/pull), donc cette option est encore plus utile maintenant.

En savoir plus sur est-ce que git clone --depth 1 (clone superficiel) est plus utile qu'il n'y paraît? ".


"défaire" un clone superficiel est détaillé à " convertir clone peu profond en 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 magie de la ligne pour obtenir manquant branches à l'envers --single-branch est (git v2.1.4):

git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --unshallow  
650
répondu VonC 2017-05-23 12:02:47

une façon est d'exécuter ce qui suit.

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

branch_name est la branche de votre choix et" /your/folder " est le dossier de destination pour cette branche. Il est vrai que cela va apporter d'autres branches vous donnant l'occasion de fusionner en avant et en arrière. Maintenant, à partir de Git 1.7.10, vous pouvez maintenant faire ceci""

git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder
638
répondu Alex Nolasco 2018-09-13 19:53:29

en utilisant la version 1.7.3.1 de Git (sur Windows), voici ce que je fais ( $BRANCH est le nom de la branche que je veux vérifier et $REMOTE_REPO est L'URL du dépôt distant à partir duquel 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 les appels subséquents git pull (ou git fetch ) téléchargeront simplement la branche demandée.

102
répondu Frerich Raabe 2018-09-13 19:52:35

Vous pouvez essayer de longue haleine:

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

ce n'est:

  • crée et inite un dépôt Git vide.
  • ajoute le dépôt original comme une télécommande appelée origin .
  • ne récupère que la branche dont vous avez besoin à partir de la télécommande appelée origin .
  • Crée et vérifie une nouvelle branche qui est mis en place pour trace la branche source que tu viens de cloner.

J'espère que ce sera quelque chose comme ce que vous êtes après.

22
répondu jkp 2018-09-13 19:51:58

vous pouvez le faire en utilisant la commande suivante:

git clone -b branch_name --single-branch project_url local_folder_to_clone_in
15
répondu nosaiba darwish 2015-08-06 06:46:19

à Partir de git clone de l'homme page :

--single-branch est votre ami pendant le clone n'oubliez pas d'utiliser avec --branch <branch name> ou seule la tête primaire distante sera clonée (master par défaut)

rappelez-vous de Toujours faire Ctrl + F5 pour lire la nouvelle source, et non celle de cache :-) (Je ne savais pas trop à propos de cette option pendant longtemps.)

13
répondu Casey 2018-09-13 19:54:37
git clone <url> --branch <branch> --single-branch

vient de mettre L'URL et le nom de la branche.

5
répondu jsroyal 2018-09-13 19:56:30

peut être fait en 2 étapes

  1. Cloner le dépôt

    • git clone <http url>
  2. la Caisse de la branche que vous souhaitez

    • git checkout $BranchName
2
répondu Pramod Setlur 2015-09-21 02:55:32

après le clonage était complet, j'ai dû entrer git submodule update --init --recursive pour télécharger tous les sous-modules

1
répondu Jan 2017-03-13 00:08:15

ouvrez le cmd.

cd folder_name (entrer le chemin où cloner la branche)

une seule commande:

git clone url_of_projecturltoclone -b branch_name
1
répondu dhS 2018-09-13 19:57:20

pour cloner une branche de Git vous n'avez pas la clé publique, utilisez ceci:

git clone -b <branch> <Git repository URL or clone URL you get from Git repository>
1
répondu Prem S 2018-09-13 19:58:07

pour cloner une branche spécifique, vous pouvez faire:

git clone --branch yourBranchName git@yourRepository.git

0
répondu sony vizio 2018-05-23 16:27:27

Clone une seule branche. C'est la voie la plus facile:

$ git clone -b BRANCH_NAME --single-branch git@bitbucket.org:___/PROJECTNAME.git
0
répondu Cubiczx 2018-09-13 19:58:32
  1. Ouvrir Git Bash.
  2. Créer un répertoire dans votre système de fichiers où vous voulez extraire.
    • $ mkdir Feature_develop_branch
  3. changer le répertoire en Feature_develop_branch dossier.
    • $ cd Feature_develop_branch
  4. Clone le dépôt utilisant une URL de clone externe.
  5. après le clonage, changez le répertoire en created repositoryName.
    • $ cd /repositoryName
  6. Vérifiez la succursale.
    • $ git checkout <Branch Name>
-3
répondu Ajay 2018-09-13 19:55:51