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.
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 degit 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
Une façon consiste à exécuter ce qui suit.
git clone user@git-server:project_name.git -b branch_name /your/folder
Où 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
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.
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:
Espérons que cela ressemblera à ce que vous recherchez.
Vous pouvez le faire en utilisant la commande ci-dessous:
git clone -b branch_name --single-branch project_url local_folder_to_clone_in
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.)
git clone <url> --branch <branch> --single-branch
Il suffit de mettre dans l'URL et le nom de la branche.
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>
Cloner une seule branche. C'est le moyen le plus simple:
$ git clone -b BRANCH_NAME --single-branch [email protected]:___/PROJECTNAME.git
Ouvrez le cmd.
cd folder_name
(entrez le chemin où cloner la branche)
Juste une commande:
git clone url_of_projecturltoclone -b branch_name
Peut être fait en 2 étapes
Cloner le référentiel
git clone <http url>
Commander la branche que vous voulez
git checkout $BranchName
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.
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.
Pour cloner une branche spécifique, vous pouvez faire:
git clone --branch yourBranchName [email protected]