web-dev-qa-db-fra.com

Comment cloner une seule branche dans Git?

J'ai un référentiel Git local appelé "squelette" que j'utilise pour stocker les 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 consulter 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 veux. Plus précisément, la nouvelle branche principale pointe vers la branche principale squelette, et je peux appuyer sur et tirer pour modifier les paramètres de 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 manière à extraire uniquement la branche souhaitée, par exemple la branche Rails, puis le nouveau référentiel a une branche master qui envoie et extrait de la branche Rails du référentiel squelette par défaut.

Y a-t-il un bon moyen de s'y prendre? Ou peut-être que ce n'est pas ainsi que Git veut que je structure les choses, et je suis certainement ouvert à cela. Peut-être devrais-je avoir plusieurs référentiels, le référentiel squelette Ruby on Rails assurant le suivi du référentiel maître? Et tout projet individuel clonant le référentiel squelette Ruby on Rails.

660
Casey Rodarmor

Remarque: le git1.7.10 (avril 2012) vous 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 dans t5500-fetch-pack.sh :

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

Tobucommentaires ça:

Ceci est implicite lorsque vous faites un clone peu profond.
Ceci fait de 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 superficiels prennent en charge le transfert de données (Push/Pull), de sorte que cette option est encore plus utile maintenant.
Voir plus à " Est-ce que git clone --depth 1 (clonage superficiel) est plus utile qu'il ne le dit? ".


"Annuler" un clone peu profond est détaillé dans " Convertir un 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

As Chris commentaires:

la ligne magique pour inverser --single-branch des branches manquantes est la suivante (git v2.1.4):

git config remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*
git fetch --unshallow  
700
VonC

Une façon consiste à 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 "/ votre/dossier" est le dossier de destination de cette branche. Il est vrai que cela amènera d'autres branches, ce qui vous permettra de fusionner. 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
648
Alex Nolasco

Dans Git version 1.7.3.1 (sous Windows), voici ce que je fais ($BRANCH est le nom de la branche que je souhaite extraire et $REMOTE_REPO est l'URL du référentiel 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 ultérieurs git pull (ou git fetch) téléchargent également simplement la branche demandée.

105
Frerich Raabe

Vous pouvez essayer la voie à long terme:

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 que cela fait est:

  • Créez et initiez un référentiel Git vide.
  • Ajoute le référentiel d'origine en tant que distant appelé Origin .
  • Récupère uniquement la branche dont vous avez besoin à partir de la télécommande appelée Origin .
  • Crée et vérifie une nouvelle branche configurée pour suivre la branche source que vous venez de cloner.

Espérons que cela ressemblera à ce que vous recherchez.

26
jkp

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

git clone -b branch_name --single-branch project_url local_folder_to_clone_in
18
nosaiba darwish

De page de manuel de git-clone :

--single-branch est votre ami pendant le clone. N'oubliez pas de l'utiliser avec --branch <branch name> ou uniquement le HEADprimaire principal distant sera cloné (maître par défaut).

Rappelez-vous toujours de faire Ctrl + F5 pour lire la source fraîche, pas celle de la mémoire cache :-) (je ne connaissais pas cette option depuis longtemps.)

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

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

7
jsroyal

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

git clone -b <branch> <Git repository URL or clone URL you get from Git repository>
2
Prem S

Cloner une seule branche. C'est le moyen le plus simple:

$ git clone -b BRANCH_NAME --single-branch [email protected]:___/PROJECTNAME.git
2
Cubiczx

Ouvrez le cmd.

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

Juste une commande:

git clone url_of_projecturltoclone -b branch_name
1
dhS

Peut être fait en 2 étapes

  1. Cloner le référentiel

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

    • git checkout $BranchName
1
Pramod Setlur

Un peu tard mais je voulais ajouter la solution que j'avais utilisée pour résoudre ce problème. J'ai trouvé la solution ici .

Quoi qu'il en soit, la question semble être de savoir "comment démarrer un nouveau projet à partir d'une branche d'un autre repo?"

Pour cela, la solution que j'ai utilisée serait tout d’abord de créer un nouveau dépôt dans github ou ailleurs. Cela servira de repo à votre nouveau projet.

Sur votre ordinateur local, accédez au projet contenant la branche que vous souhaitez utiliser comme modèle pour votre nouveau projet.

Exécutez la commande:

git Push https://github.com/accountname/new-repo.git +old_branch:master

Cela va pousser Push old_branch vers new-repo et en faire la branche master du nouveau repo.

Il vous suffit ensuite de cloner le nouveau référentiel dans le répertoire local de votre nouveau projet et de lancer un nouveau projet dans l'ancienne branche.

1
Aaron Pennington

Prenons l'exemple de flask repo. Il a 3 branches en plus de maîtriser. Laissez-nous commander la branche distante 1.1.x

cloner le repo git

git clone https://github.com/pallets/flask

cd dans le repo.

cd flask

chercher la branche distante 1.1.x

git fetch Origin 1.1.x

la caisse de la branche

git checkout 1.1.x

Vous basculerez vers la branche 1.1.x et suivra la branche distante 1.1.x.

0
Chaitanya Vardhan

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

git clone --branch yourBranchName [email protected]

0
nPcomp