Comment cloner toutes les branches de Git?
J'ai un master
et un development
de la branche, à la fois poussé à GitHub. J'ai clone
d, pull
ed, et fetch
ed, mais je reste incapable d'obtenir autre chose que la master
branche.
Je suis sûr que je suis absent quelque chose d'évident, mais j'ai lu le manuel et je me fais pas de joie à tous.
- La accepté de répondre ici (
git branch -a
) vous montre les branches dans la distance, mais si vous essayez de vérifier un de ces, vous serez dans un " détaché de la TÊTE de l'état. La réponse suivante vers le bas (deuxième plus upvotes) les réponses à une autre question (pour l'esprit: comment tirer toutes les branches, et, encore une fois, cela ne fonctionne que pour ceux que vous effectuez le suivi localement). Plusieurs commentaires souligner que vous avez pu analyser lagit branch -a
résultats avec un script shell qui serait localement à suivre toutes les branches distantes. Résumé: Il n'y a pas de git natif de chemin à faire ce que vous voulez et il pourrait ne pas être une grande idée de toute façon. - Peut-être juste de copier l'intégralité du dossier à l'ancienne?
scp [email protected]:/home/some_user/project_folder ~
Ne sais pas si cette solution fonctionne pour github si.. - Plutôt que de dire "j'ai cloné, tiré, et les cheveux," beaucoup mieux pour nous montrer les commandes exécutées.
- Ici Git 1.8.3.2, le checkouted branche ne pas être " détaché de la TÊTE de l'état, mais la checkouted tag sera.
- Vous serez en mesure à la caisse toutes les branches (en chemin différent) après le clonage d'une opération de pension avec la nouvelle
git checkout --to=<path>
commande à venir dans Git 2.5+ (Q2 2015): qui aurait l'appui de plusieurs direction de la caisse. Voir stackoverflow.com/a/30185564/6309. - Elle toujours me croit rêver pourquoi "clone" n'est pas dans le sens d'une copie exacte. Si c'est un clone exact, ne devrait pas toutes les branches de la partie du dépôt local? Je veux dire n'est-ce pas l'un des point d'être distribués? Alors, quand quelque chose référentiel est parti, vous avez toujours une copie complète de tout. Ou est-ce le soi-disant "à distance" sont vraiment une partie du référentiel local déjà?
- Voir toutes les upvotes, les réponses, les commentaires sur les réponses et le nombre sidérant de points de vue, je pense qu'il est temps git ajout d'une commande pour le faire. Et vous avez raison @huggie, mes pensées exactement.
- est-il moins les données envoyées sur le fil pour seulement une branche spécifique? Si vous êtes le clonage le noyau Linux ou quelque autre bête, c'est peut-être préférable par défaut (si je suis d'accord que si vous le voulez tous, qui devrait être facile aussi)
- stackoverflow.com/a/7216269/480982 devrait être la accepté de répondre à
- Maintenant qu'il a été un moment depuis que j'ai appris plus sur git, j'ai réalisé ma confusion découle du nom de "branches distantes" et "suivi à distance des branches." Git stocke des trucs dans un arbre. Branches (que ce soit à distance, suivi à distance ou local) sont des "étiquettes" de l'arbre. Lors du clonage, tout dans l'arbre n'est cloné. Et chaque
origin/XXXX
(branches distantes) sont étiquetés. (Ils sont vraiment local les étiquettes que vous gardez). Un maître de la branche est généralement fait pour être une "distance de suivi de branche" (Remarquez le tableau de bord j'ai ajouté afin de préciser.) Mais vous pouvez créer d'autres sections locales qui portent la capacité de suivi. - Ainsi, les branches sont des étiquettes. Il y a vraiment tous les locaux pour vous. Une "distance" (origine/XXX) est un label local pour correspondre à la distance (comme les dernières que vous avez connu depuis le dernier fetch). Une "section locale" est un label local. Et une branche locale peut avoir la possibilité de "suivre" et devient une "distance de suivi" de la branche. La capacité de suivre vraiment simplement vous sauver un peu de touche de clavier, pas besoin de spécifier quelle distance vous êtes en tirant ou en poussant. C'est tout. Pas plus, pas moins. Et lorsque vous clonez, arbre n'est cloné, et le local
origin/xxx
sont étiquetés.
Vous devez vous connecter pour publier un commentaire.
D'abord, clone une distance Git référentiel et cd en elle:
Ensuite, regardez les branches locales dans votre référentiel:
Mais il y a d'autres branches se cacher dans votre référentiel! Vous pouvez les consulter à l'aide de la
-a
drapeau:Si vous voulez juste prendre un coup d'oeil rapide à l'amont de la branche, vous pouvez le vérifier directement:
Mais si vous souhaitez travailler sur cette branche, vous aurez besoin de créer un local de suivi de la branche qui est fait automatiquement par:
et vous verrez
Que la dernière ligne des lancers certaines personnes: "Nouvelle direction" - hein?
Ce que cela signifie vraiment, c'est que la direction générale est prise à partir de l'index et créés localement pour vous. Le précédente ligne est en fait plus instructif qu'il vous indique que la direction est en train d'être mis en place pour suivre la branche distante, ce qui signifie généralement l'origine/branch_name branche
Maintenant, si vous regardez vos branches locales, c'est ce que vous allez voir:
Vous pouvez suivre en fait plus d'un dépôt distant à l'aide de
git remote
.À ce point, les choses deviennent assez fou, alors courez
gitk
pour voir ce qu'il se passe:$ git checkout -b experimental origin/experimental
différente de$ git branch --track experimental origin/experimental
? Je me rends compte de la caisse vais aussi passer à la branche.git checkout -b ...
de commande, vous devez ajouter le paramètre de piste? À partir de la documentation d'aide pourgit checkout [<branch]
il semble que vous ne...If -b is given, a new branch is created as if git-branch(1) were called and then checked out; in this case you can use the --track or --no-track options, which will be passed to git branch. As a convenience, --track without -b implies branch creation; see the description of --track below.
--track
lorsque vous êtes à partir d'une branche à distance et utilisez le paramètre par défaut pour labranch.autosetupmerge
config.git checkout experimental
est différente degit checkout origin/experimental
git branch -a
de sortie, en faisantgit branch -av
ou mêmegit branch -avv
. Avec l'augmentation de la verbosité, vous verrez chaque branche du dernier commit ainsi.origin/experimental
est la branche distante. Vous ne devriez pas faire les modifications directement dans la branche distante depuis quand vousgit pull
ougit fetch
, la distance devrait être en mesure de mettre à jour proprement afin de refléter les changements en amont.git checkout -b experimental origin/experimental
, vous pouvez écrire toutgit checkout experimental
, il va créer de la direction générale et de définir les informations de suivi pour vous (sauf avec de très vieilles versions Git)..git/refs
dossier dans l'explorateur de fichiers et les déplacer ou les copier toutes les entrées dans.git/refs/remotes/origin/*
à.git/refs/heads/
; les choses sont un peu moins pratique lorsque les fichiers ont été déplacés dans.git/packed-refs
, à ce point, le git en ligne de commande serait plus facile de multiplexgit branch
ne montre pas les branches distantes par défaut, vous devez utilisergit branch -a
de montrer toutes les branches.remotes/origin/experimental
tag souligne en fait une copie locale deorigin experimental
, mis à jour la dernière fois que vous avez exécutégit fetch
. Si vous vous déconnectez du réseau, vous devez pouvoir accéder à ses données, à l'aide degit checkout origin/experimental
. (Pour être précis, je n'ai pas vérifié ces derniers temps, mais c'est la façon dont il a toujours travaillé par le passé.)gitk --all &
et pasgitk --all
?Si vous avez beaucoup de distance branches que vous souhaitez récupérer à la fois, n':
Maintenant, vous pouvez extraire n'importe quel branche que vous avez besoin, sans toucher le dépôt distant.
git pull --all
va faire la même chose – il ne peut pas extraire deux fois. Et infosec812 est juste que cela ne répond pas à la question de toute façon. Je me demande comment cela a beaucoup de upvotes.git checkout -b <localbranch> <remotebranch>
, oùremotebranch
est le nom de la télécommande comme il apparaît dansgit branch -r
(ou aussigit branch -a
).git remote update
, ensuite essayégit branch
, je ne vois que des branches locales. Mais si je negit branch -a
je peux maintenant voir les branches distantes et je peux faire ungit pull <branchname>
pour obtenir la direction que je veux. -- J'ai atterri sur cette question à partir d'une recherche Google, et cette réponse résout mon problème.git pull <remotename>/<branchname>
va fusionner la branche dans quelque branche que vous avez actuellement sélectionnée. Ce que vous voulez estgit checkout --track <remotename>/<branchname>
. Et c'est ce que l'OP veut,git checkout --track
sur toutes distance (origine) des branchesgit pull --all
ougit fetch --all
ne vient tous les télécommandes, pas de branches.Ce Bash script m'a aidé:
Il va créer des branches pour toutes les branches, à l'exception de master (que vous avez probablement obtenu à partir de l'original clone de commande). Je pense que vous pourriez encore besoin de faire un
pour être sûr.
for branch in `git branch -a | sed -n '\=/HEAD$=d; \=/master$=d;s=<SPACE><SPACE>remotes/==p'`; do ...
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
Comme d'habitude: test de votre installation avant de copierrm -rf universe as we know it
git pull --all
à la fin, car il implicitement le chercher?remotes/origin/
de préserver des espaces de noms:for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
git branch -a | grep remotes
peut, au lieu d'êtregit branch -r
(avec des astuces pour les parties plus tard, parce que le "remotes/" partie de la succursale nom n'est pas dans cette sortie)git pull --all
ougit fetch --all
ne vient tous les télécommandes, pas de branches. Votrebash
script a fonctionné, cependant.git push --all origin
À l'aide de la
--mirror
option semble copier leremote
suivi des branches correctement.Cependant, il met en place le référentiel comme un dépôt nu, de sorte que vous avez à la remettre en normal référentiel par la suite.
Référence: Git FAQ: Comment puis-je cloner un dépôt avec tous suivi à distance des branches?
git checkout
comme dernière commande, enfin, l'extraction de la tête de la branche courante sur la cloné des pensions. C'est une excellente réponse, de loin le meilleur. Être courageux, éventuellement, nous allons vous faire le top 🙂git remote update
va le faire à nouveau. Le comportement de tire changement. Je suis de retour à croire la version complète nécessite un script d'une ligne.git clone --mirror
est très bon pour la sauvegarde de vos dépôts git ^_^git-bundle
cp path/to/original/.git/config path/to/dest/.git/config
Cela semble résoudre d'autres problèmes liés au démarrage avec un nu-pensions ainsi.[master]
à[GIT_DIR!]
, et de la finale de la caisse ne fonctionne pas. Mise à JOUR: j'ai fait une erreur. J'ai cloné dans/path/to/dest.git
- il doit avoir été/path/to/dest/.git
. Puis, quand je unconfig serais mode nu, mon CLI dit[master +0 ~0 -116 ~]
mais surgit checkout master
, il fait un tas de travail, mais est sorti de l'autre côté comme[master]
, de sorte qu'il ressemble le succès!path/to/dest/.git
partie gauche et il. Dûmkdir x; mv x.git x/.git; cd x; git config --bool core.bare false
à récupérer. Sinon, oui, c'est la solution. Merci.Vous pouvez facilement passer à une branche sans l'aide de la fantaisie "git checkout -b somebranch origine/somebranch de syntaxe". Il vous suffit de faire:
Git va automatiquement faire la bonne chose:
Git va vérifier si une branche avec le même nom existe dans exactement une distance, et si il ne, il suit de la même manière que si vous aviez spécifié explicitement que c'est une branche distante. Du git-caisse de la page de manuel de la commande Git 1.8.2.1:
checkout
est la même que le nom de la branche distante, tout ce qui est après le "/", puis git va créer une branche du même nom, tout ce qui est après le "/", "suivi" à distance? Et par le suivi, nous entendons:git push
,git pull
, etc. sera fait sur cette distance? Si cela est correct, puis développez votre réponse à la question avec plus d'informations, car je aggree avec @Daniel, cette réponse mérite plus d'rep.git checkout --track origin/somebranch
explicitement.Concernant,
à l'aide de
ou le plus verbeux, mais plus facile à retenir
peut-être mieux, en termes de suivi d'un dépôt distant.
Le chercher ce que vous faites doit obtenir toutes les branches distantes, mais il ne crée pas des branches locales pour eux. Si vous utilisez gitk, vous devriez voir les branches distantes décrit comme "remotes/origin/dev" ou quelque chose de similaire.
De créer une branche locale basée sur une branche distante, faire quelque chose comme:
Qui doit retourner quelque chose comme:
Maintenant, lorsque vous êtes sur la branche dev, "git pull" mise à jour de votre local dev au même point que la distance branche dev. Notez qu'il récupère toutes les branches, mais seulement tirer la une vous êtes sur le haut de l'arbre.
git checkout -b newlocaldev --track origin/dev
. Si vous voulez que la section locale a le même nom que la distance, et la distance n'est pas une délicate nom, vous pouvez omettre le-b newlocaldev
. Avec la valeur par défautbranch.autosetupmerge
paramètre de configuration, et en supposant que vous n'avez pas une branche locale nomméedev
, ces deux commandes peuvent faire la même chose:git checkout -b dev origin/dev
et simplegit checkout dev
. Enfin,git checkout origin/dev
ne pas créer une nouvelle branche, mais juste vous met dans décollement de la TÊTE de l'état.git branch -a
continue de listes comme une branche distante.Quand vous faites "git clone git://emplacement", toutes les branches et les tags sont récupérées.
Afin de travailler sur un distant spécifique de la branche, en supposant que c'est l'origine distance:
$ git branch -a
à apprendre, ce que les branches distantes sont déjà disponibles.Utiliser des alias. Si il n'y a pas natif Git one-liners, vous pouvez définir votre propre comme
et ensuite l'utiliser comme
Pourquoi vous ne voyez que "maître"
git clone
télécharge tous à distance de distance de branches, mais les considère encore "à distance", même si les fichiers sont situés dans le nouveau référentiel. Il y a une exception à cela, qui est que le processus de clonage crée une filiale locale appelé "maître" de la branche à distance appelé "maître". Par défaut,git branch
ne montre que les branches locales, qui est pourquoi vous ne voyez que "maître".git branch -a
montre toutes les branches, y compris les branches distantes.Comment obtenir des branches locales
Si vous avez réellement envie de travailler sur une branche, vous voudrez probablement un "local" version de celui-ci. Tout simplement la création de sections locales de branches distantes (sans vérification et, par conséquent, modifier le contenu de votre répertoire de travail), vous pouvez le faire comme ceci:
Dans cet exemple,
branchone
est le nom d'une branche locale, vous êtes en train de créer basée surorigin/branchone
; si, au contraire, vous voulez créer des branches locales avec des noms différents, vous pouvez faire ceci:Une fois que vous avez créé une branche locale, vous pouvez le voir avec
git branch
(rappelez-vous, vous n'avez pas besoin-a
pour voir les branches).Ce n'est pas trop compliqué, très simple et les étapes sont comme suit;
git fetch origin
Cette apportera toutes les branches distantes de votre local.git branch -a
Cela va vous montrer toutes les branches distantes.git checkout --track origin/<branch you want to checkout>
Vérifier si vous êtes dans la branche désirée par la commande suivante;
La sortie sera comme ceci;
Avis de l' * signe qui dénote de la branche courante.
Mieux vaut tard que jamais, mais ici, c'est la meilleure façon de le faire:
À ce stade, vous avez une copie complète de la télécommande repo avec toutes ses branches (à vérifier avec
git branch
). Vous pouvez utiliser--mirror
au lieu de--bare
si votre télécommande repo a télécommandes de sa propre.--bare
" mentionné à la dernière phrase n'existe pas dans la liste des commandes.error: key does not contain a section: unset
. Le Dave réponse fonctionne mieux.git config --unset core.bare
en fait... Pour moi, cela semble la solution la plus propre de tous présentés dans les réponses ici. Dommage que ça a si peu de upvotes...git config --bool core.bare false
au lieu degit config --unset core.bare
git config --bool core.bare false
. C'est pourquoi je conseille plutôt le Dave réponse. Que pensez-vous de la Dave réponse? CheersViens de le faire:
Vous voir, " git clone git://exemple.com/myprojectt' récupère tout, même les branches, vous avez juste à passer à la caisse, puis à votre succursale locale sera créé.
Vous avez seulement besoin d'utiliser le "git clone" pour obtenir toutes les branches.
Même si vous ne voyez branche master, vous pouvez utilisez "git branch -a" pour voir toutes les branches.
Et vous pouvez changer la direction que vous avez déjà.
Ne vous inquiétez pas, après avoir "git clone", vous n'avez pas besoin de se connecter avec la télécommande du repo, "git branch-a" et "git checkout" peut être exécuté avec succès lorsque vous fermez votre connexion wifi. Il est prouvé que, quand vous faites "git clone", il a déjà copié toutes les branches de la distance des pensions. Après cela, vous n'avez pas besoin de la télécommande repo, votre local possède déjà toutes les branches codes.
Un
git clone
est censé copier l'intégralité du référentiel. Essayez de clonage, puis l'exécutergit branch -a
. Elle devrait liste de toutes les branches. Si vous souhaitez ensuite passer à la branche "foo" au lieu de "maître", l'utilisationgit checkout foo
.git clone
ne télécharger toutes les branches distantes, mais il ne fait que la branche locale de maître. Depuisgit branch
ne montre que les branches locales, vous avez besoingit branch -a
afin de consulter les branches, trop.Utiliser mon outil de git_remote_branch (vous avez besoin de Ruby installé sur votre machine). Il est construit spécifiquement pour faciliter le branche à distance manipulations mort facile.
À chaque fois qu'il effectue une opération sur votre compte, qu'il imprime en rouge dans la console. Au fil du temps, ils ont enfin coller dans votre cerveau 🙂
Si vous ne voulez pas de bsg pour exécuter des commandes sur votre compte, il suffit d'utiliser la "expliquer" caractéristique. Les commandes seront imprimées sur votre console plutôt que exécutée pour vous.
Enfin, toutes les commandes ont des alias, pour faire de la mémorisation plus facile.
Noter que c'est logiciel alpha 😉
Ici de l'aide lorsque vous exécutez la bsg aider:
toutes les réponses que j'ai vu ici sont valables, mais il est beaucoup plus propre façon de cloner un dépôt, et de tirer toutes les branches à la fois.
Lorsque vous clonez un dépôt, toutes les informations de branches est effectivement téléchargé mais les branches sont cachés. Avec la commande
vous pouvez afficher toutes les branches du dépôt, et avec la commande
vous pouvez ensuite "télécharger" manuellement un à un.
Toutefois, lorsque vous voulez cloner un repo avec beaucoup de branches, tous les moyens sont illustrés ci-dessus sont longs et fastidieux à l'égard de beaucoup plus propre et plus rapide que je vais vous montrer, même si c'est un peu compliqué. Vous avez besoin de trois étapes à suivre:
créer un nouveau dossier vide sur votre machine et de cloner une copie miroir de l' .git dossier à partir du référentiel:
le référentiel local à l'intérieur du dossier my_repo_folder est toujours vide, il est juste caché .git dossier maintenant que vous pouvez le voir avec un "ls -alt" commande dans le terminal.
commutateur de ce référentiel à partir d'un vide (nu) dépôt régulier de dépôt par la commutation de la valeur booléenne "nu" de la git configurations de faux:
Saisir tout ce qui à l'intérieur du dossier et de créer toutes les branches sur la machine locale, donc ce qui en fait un normal des pensions.
Alors maintenant, vous pouvez tapez la commande "git branch" et vous pouvez voir que toutes les branches sont téléchargés.
C'est le moyen rapide dans lequel vous pouvez cloner un dépôt git avec toutes les branches à la fois, mais ce n'est pas quelque chose que vous voulez pour chaque projet de cette manière.
OK, lorsque vous clonez votre pension, vous avez toutes les branches là...
Si vous venez de le faire
git branch
, ils sont cachés...Donc, si vous voulez voir toutes les branches de nom, tout simplement ajouter
--all
drapeau comme ceci:git branch --all
ougit branch -a
Si vous venez de passer à la direction générale, vous obtenez tout ce dont vous avez besoin.
Mais que diriez-vous si la branche créé par quelqu'un d'autre après vous clone?
Dans ce cas, il suffit de faire:
git fetch
et de vérifier toutes les branches de nouveau...
Si vous voulez récupérer la caisse et dans le même temps, vous pouvez faire:
git fetch && git checkout your_branch_name
Également créé l'image ci-dessous pour vous, afin de simplifier ce que j'ai dit:
En regardant l'une des réponses à la question, j'ai remarqué qu'il est possible de le raccourcir:
Mais attention, si l'une des branches distantes est nommé comme, par exemple, admin_master il ne sera pas téléchargé!
Grâce à bigfish pour l'idée originale
grep
, pour améliorer le filtre pour éviter les faux positifs.Ces code va tirer toutes les branches distantes code local des pensions.
Clonage à partir d'un local de pensions ne fonctionnera pas avec git clone & git fetch: un grand nombre de branches/tags restera unfetched.
Pour obtenir un clone avec toutes les branches et les tags.
Pour obtenir un clone avec toutes les branches et les tags, mais aussi avec une copie de travail:
Pour copier-coller de la ligne de commande:
Pour plus de lisibilité:
Ce sera:
Basé sur réponse de VonC.
J'avais besoin de faire exactement la même chose. Voici mon Ruby script.
J'ai écrit ce petit Powershell fonctions pour être en mesure à la caisse tous mes branches git, qui sont à l'origine de la télécommande.
Plus git fonctions peuvent être trouvés sur mon git paramètres de repo
Aucune de ces réponses couper, à l'exception de l'utilisateur, personne n'est sur la bonne voie.
J'ai eu du mal avec le déplacement des pensions de titres à partir d'un serveur/système à l'autre. Quand j'ai cloné le dépôt, il créé une succursale locale pour le master, donc quand j'ai poussé à la nouvelle télécommande, seul maître de la branche a été poussé.
Donc j'ai trouvé ces deux méthodes TRÈS utiles. Espérons qu'ils aider quelqu'un d'autre.
Méthode 1:
Méthode 2:
Git généralement (lorsqu'il n'est pas spécifié) récupère toutes les branches et/ou des balises (refs, voir:
git ls-refs
) à partir d'un ou de plusieurs autres référentiels avec les objets nécessaires pour remplir leurs histoires. En d'autres termes, il récupère les objets qui sont accessibles par les objets qui sont déjà téléchargé. Voir: Ce n'git fetch
vraiment?Parfois vous pouvez avoir des branches/tags qui ne sont pas directement connectés à l'actuel, donc
git pull --all
/git fetch --all
ne va pas aider dans ce cas, mais vous pouvez en faire la liste par:et de les récupérer manuellement par la connaissance de la ref noms.
Donc à récupérer tous les, essayez:
Le
--depth=10000
paramètre peut aider si vous avez shallowed référentiel.Puis vérifiez l'ensemble des branches:
Si ci-dessus ne vous aide pas, vous devez ajouter manquant branches manuellement à la liste de suivi (comme ils se sont perdus en quelque sorte):
par
git remote set-branches
comme:ainsi, il peut apparaître sous
remotes/origin
après fetch:De dépannage
Si vous ne pouvez toujours pas obtenir quoi que ce soit d'autre que la branche master, vérifier les points suivants:
git remote -v
), par exemplegit config branch.master.remote
estorigin
.origin
points à droite de l'URL via:git remote show origin
(voir ce post).Utiliser les commandes que vous pouvez vous souvenir de
Je suis en utilisant Bitbucket, un Référentiel de Service d'Hébergement de Atlassian. J'ai donc essayer de suivre leurs docs. Et qui fonctionne parfaitement pour moi. Avec le suivant, facile et court commandes vous pouvez payer votre branche distante.
Au premier cloner votre dépôt, puis sur modifier dans le dossier de destination. Et le dernier mais non le moins, d'extraction et de départ:
Que c'est. Ici un litte plus l'exemple du monde réel:
Vous trouverez des informations détaillées sur les commandes dans les docs:
Clone De Commande, Commande Fetch, Commande Checkout
Dès le début de 2017, la réponse dans ce commentaire travaux:
git fetch <origin-name> <branch-name>
apporte la branche vers le bas pour vous. Alors que ce n'est pas tirer toutes les branches à la fois, vous pouvez singulièrement de signer la présente par branche.Voici un autre court une ligne de commande qui
crée des branches locales pour toutes les branches distantes:
Il fonctionne aussi correctement si le suivi de branches locales sont déjà créés.
Vous pouvez appeler après la première
git clone
ou à tout moment ultérieurement.Si vous n'avez pas besoin d'avoir
master
branche vérifié après le clonage, l'utilisationgit clone --mirror
sur l'origine des pensions de fonctionne bien pour cela.Cette variation permet de cloner une distance repo avec toutes les branches disponible sur place sans avoir à commander chaque branche, un par un. Pas de fantaisie, les scripts nécessaires.
Faire un dossier avec le même nom de l'opération que vous souhaitez cloner et cd en par exemple:
Maintenant faire ces commandes, mais avec une réelle repo usersname/reponame
Voiala! vous disposez de tous les branches il y!
git rev-parse --abbrev-ref --symbolic-full-name '@{u}'
montrefatal: no upstream configured for branch 'master'
. Devrait êtreorigin/master
.Je vais ajouter mes 2 cents ici parce que je suis ici pour essayer de trouver comment tirer vers le bas une branche distante j'avais supprimé localement. L'origine n'était pas le mien, et je ne voulais pas passer par les tracas de re-clonage tout
Cela a fonctionné pour moi:
en supposant que vous avez besoin de recréer la branche localement:
Donc, si j'ai forké gituser/maître de sjp et puis ramifiée à sjp/mynewbranch il devrait ressembler à ceci:
Voici une réponse qui utilise awk. Cette méthode devrait suffire si elle est utilisée sur un nouveau repo.
Branches existantes aurez simplement à être vérifié, ou déclarées comme déjà en elle, mais les filtres peuvent être ajoutés afin d'éviter les conflits.
Il peut également être modifiée de sorte qu'il appelle explicitement
git checkout -b <branch> -t <remote>/<branch>
commande.Cette réponse suit Nikos C.'s idée.
Sinon, nous pouvons spécifier la distance de la branche à la place. Ceci est basé sur murphytalk's réponse.
Il jette erreur fatale messages sur les conflits, mais je les vois inoffensif.
Les deux commandes peuvent être lissés.
À l'aide de personne ne's réponse comme référence, on peut avoir les commandes suivantes pour créer les alias:
Personnellement j'utiliserais
track-all
outrack-all-branches
.Un peu en retard à la fête, mais je pense que cela fait l'affaire:
Si ce n'est quelque chose d'indésirable, j'aimerais savoir. Cependant, jusqu'à présent, cela fonctionne pour moi.
git fetch
(kernel.org/pub/software/scm/git/docs/git-fetch.html), c'est probablement ce qui doit être ajusté.Voici un script bash pour la récupération de toutes les branches et les tags d'un projet git comme des instantanés dans des dossiers séparés.
https://gist.github.com/hfossli/7562257
Peut-être pas ce qui a été demandé directement, mais certaines personnes pourraient venir ici à la recherche de cette solution.
Si vous utilisez BitBucket,
vous pouvez utiliser importation Référentiel, cela va importer tous les historique de git ( toutes les branches et s'engage)