J'ai un master
et une development
branche, tous deux poussés vers GitHub . J'ai clone
d, pull
ed et fetch
ed, mais je ne peux rien récupérer d'autre que la master
branche.
Je suis sûr que je manque quelque chose d'évident, mais j'ai lu le manuel et je n'ai aucune joie.
git
github
git-branch
git-clone
remote-branch
Peter Coulton
la source
la source
git branch -a
) vous montre les branches de la télécommande, mais si vous essayez de vérifier l'une de celles-ci, vous serez dans un état de «tête détachée». La réponse suivante vers le bas (deuxième plus de votes positifs) répond à une question différente (à savoir: comment tirer toutes les branches, et, encore une fois, cela ne fonctionne que pour celles que vous suivez localement). Plusieurs commentaires soulignent que vous pouvez analyser lesgit branch -a
résultats avec un script shell qui suivrait localement toutes les branches distantes. Résumé: Il n'y a pas de façon native de faire ce que vous voulez et ce n'est peut-être pas une si bonne idée de toute façon.scp [email protected]:/home/some_user/project_folder ~
Je ne sais pas si cette solution fonctionne pour github si ..Réponses:
Tout d'abord, clonez un référentiel Git distant et un CD dedans:
Ensuite, regardez les branches locales dans votre référentiel:
Mais il y a d'autres branches qui se cachent dans votre référentiel! Vous pouvez les voir en utilisant le
-a
drapeau:Si vous voulez simplement jeter un coup d'œil à une succursale en amont, vous pouvez le vérifier directement:
Mais si vous souhaitez travailler sur cette branche, vous devrez créer une branche de suivi locale qui se fait automatiquement en:
et vous allez voir
Cette dernière ligne jette quelques personnes: "Nouvelle branche" - hein? Ce que cela signifie vraiment, c'est que la branche est extraite de l'index et créée localement pour vous. La ligne précédente est en fait plus informative car elle vous indique que la branche est en cours de configuration pour suivre la branche distante, ce qui signifie généralement la branche origine / nom_branche
Maintenant, si vous regardez vos succursales locales, voici ce que vous verrez:
Vous pouvez effectivement suivre plusieurs référentiels distants à l'aide de
git remote
.À ce stade, les choses deviennent assez folles, alors courez
gitk
pour voir ce qui se passe:la source
Si vous souhaitez récupérer simultanément plusieurs branches distantes, procédez comme suit:
Vous pouvez maintenant extraire n'importe quelle branche selon vos besoins, sans toucher au référentiel distant.
la source
git pull --all
fera simplement de même - il ne sera pas récupéré deux fois. Et infosec812 a raison de dire que cela ne répond pas de toute façon à la question. Je me demande comment cela a obtenu autant de votes positifs.git remote update
, puis essayégit branch
, je ne vois que des succursales locales. Mais si je le fais,git branch -a
je peux maintenant voir les branches distantes et je peux faire ungit pull <branchname>
pour obtenir la branche que je veux. - J'ai atterri sur cette question à partir d'une recherche Google, et cette réponse résout mon problème.Ce script Bash m'a aidé:
Il créera des branches de suivi pour toutes les branches distantes, à l'exception de master (que vous avez probablement obtenu à partir de la commande de clonage d'origine). Je pense que vous devrez peut-être encore
être sûr.
la source
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: testez votre configuration avant de copierrm -rf universe as we know it
remotes/origin/
pour préserver les 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
L'utilisation de l'
--mirror
option semble copierremote
correctement les branches de suivi. Cependant, il définit le référentiel comme un référentiel nu, vous devez donc le reconvertir en référentiel normal par la suite.Référence: FAQ Git: Comment cloner un référentiel avec toutes les branches suivies à distance?
la source
git checkout
comme dernière commande pour enfin extraire le chef de la branche actuelle sur le référentiel cloné. C'est une excellente réponse, de loin la meilleure. Soyez courageux, nousgit remote update
feront à nouveau. Le comportement des pulls change. Je suis de retour à croire que la copie complète nécessite un script d'une ligne.git clone --mirror
est très bon pour sauvegarder vos dépôts git ^ _ ^Vous pouvez facilement passer à une branche sans utiliser la syntaxe fantaisie "git checkout -b somebranch origin / somebranch". Vous pouvez simplement faire:
Git fera automatiquement la bonne chose:
Git vérifiera si une branche avec le même nom existe dans exactement une télécommande, et si c'est le cas, il la suit de la même manière que si vous aviez explicitement spécifié qu'il s'agit d'une branche distante. Depuis la page de manuel git-checkout de Git 1.8.2.1:
la source
checkout
est identique au nom de la branche distante, tout après le "/", puis git créera une branche du même nom, tout après le "/", "traçant" cette télécommande ? Et par le suivi, nous entendons:git push
,git pull
, etc. sera fait sur cette distance? Si cela est correct, développez votre réponse avec plus d'informations, car je suis d'accord avec @Daniel, cette réponse mérite plus de réponses.git checkout --track origin/somebranch
explicitement.En ce qui concerne,
en utilisant
ou le plus verbeux mais plus facile à retenir
pourrait être mieux, en termes de suivi d'un référentiel distant.
la source
L'extraction que vous faites devrait obtenir toutes les branches distantes, mais elle ne créera pas de branches locales pour elles. Si vous utilisez gitk, vous devriez voir les branches distantes décrites comme "télécommandes / origine / dev" ou quelque chose de similaire.
Pour créer une branche locale basée sur une branche distante, faites quelque chose comme:
Qui devrait renvoyer quelque chose comme:
Maintenant, lorsque vous êtes sur la branche de développement, "git pull" mettra à jour votre développeur local au même point que la branche de développement distante. Notez qu'il récupérera toutes les branches, mais tirez uniquement celle sur laquelle vous vous trouvez au sommet de l'arbre.
la source
git checkout -b newlocaldev --track origin/dev
. Si vous voulez que la branche locale ait le même nom que celle distante et que la branche distante n'ait pas de nom délicat, vous pouvez omettre le-b newlocaldev
. Avec lebranch.autosetupmerge
paramètre de configuration par défaut , et en supposant que vous n'avez pas de branche locale nomméedev
, ces deux commandes peuvent faire la même chose:git checkout -b dev origin/dev
et tout simplementgit checkout dev
. Enfin,git checkout origin/dev
ne crée pas de nouvelle branche, mais vous met simplement dans un état HEAD détaché.git branch -a
continue de le répertorier en tant que branche distante.Lorsque vous faites "git clone git: // location", toutes les branches et balises sont récupérées.
Afin de travailler au-dessus d'une branche distante spécifique, en supposant que c'est la télécommande d'origine:
la source
$ git branch -a
d'apprendre, quelles branches distantes sont déjà disponibles.git checkout -b master origin/master
etgit checkout --track origin/master
s'il vous plaît?Utilisez des alias. Bien qu'il n'y ait pas de lignes natives Git, vous pouvez définir les vôtres comme
puis l'utiliser comme
la source
Pourquoi vous ne voyez que "maître"
git clone
télécharge toutes les branches distantes mais les considère toujours comme "distantes", même si les fichiers se trouvent dans votre nouveau référentiel. Il y a une exception à cela, c'est que le processus de clonage crée une branche locale appelée "master" à partir de la branche distante appelée "master". Par défaut,git branch
ne montre que les branches locales, c'est pourquoi vous ne voyez que "master".git branch -a
affiche toutes les branches, y compris les branches distantes .Comment obtenir des succursales locales
Si vous voulez réellement travailler sur une branche, vous en voudrez probablement une version "locale". Pour créer simplement des branches locales à partir de branches distantes (sans les extraire et donc changer 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 sur laquelle vous créezorigin/branchone
; si vous souhaitez plutôt créer des branches locales avec des noms différents, vous pouvez le faire:Une fois que vous avez créé une branche locale, vous pouvez la voir avec
git branch
(rappelez-vous, vous n'avez pas besoin-a
de voir les branches locales).la source
origin/branchone
existe, vous pouvez également simplement utilisergit checkout branchone
pour créer une branche locale avec le même nom et la définir pour suivre à distance.Ce n'est pas trop compliqué, les étapes très simples et directes sont les suivantes;
git fetch origin
Cela apportera toutes les succursales distantes à votre section locale.git branch -a
Cela vous montrera toutes les branches distantes.git checkout --track origin/<branch you want to checkout>
Vérifiez si vous êtes dans la branche souhaitée par la commande suivante;
La sortie sera comme ça;
Remarquez le signe * qui indique la branche actuelle.
la source
Mieux vaut tard que jamais, mais voici la meilleure façon de procéder:
À ce stade, vous avez une copie complète du référentiel distant avec toutes ses branches (vérifiez avec
git branch
). Vous pouvez utiliser--mirror
au lieu de--bare
si votre dépôt à distance a ses propres télécommandes.la source
--bare
" mentionné dans la dernière phrase n'existe pas dans la liste de commandes donnée.error: key does not contain a section: unset
. La réponse de Dave fonctionne mieux.git config --unset core.bare
fait ... Pour moi, cela semble la solution la plus propre de toutes présentée dans les réponses ici. Dommage qu'il y ait si peu de votes positifs ...git config --bool core.bare false
. C'est pourquoi je recommande plutôt la réponse de Dave . Que pensez-vous de la réponse de Dave ? ViveFaites juste ceci:
Vous voyez, 'git clone git: //example.com/myprojectt' récupère tout, même les branches, il vous suffit de les extraire, puis votre branche locale sera créée.
la source
Il vous suffit d'utiliser "git clone" pour obtenir toutes les branches.
Même si vous ne voyez que la branche principale, vous pouvez utiliser "git branch -a" pour voir toutes les branches.
Et vous pouvez passer à n'importe quelle branche que vous avez déjà.
Ne vous inquiétez pas qu'après avoir "git clone", vous n'avez pas besoin de vous connecter avec le dépôt à distance, "git branch -a" et "git checkout" peuvent être exécutés avec succès lorsque vous fermez votre wifi. Il est donc prouvé que lorsque vous faites "git clone", il a déjà copié toutes les branches du dépôt distant. Après cela, vous n'avez plus besoin du dépôt à distance, votre section locale a déjà tous les codes des succursales.
la source
A
git clone
est censé copier l'intégralité du référentiel. Essayez de le cloner, puis exécutezgit branch -a
. Il doit répertorier toutes les branches. Si vous souhaitez ensuite passer à la branche "foo" au lieu de "master", utilisezgit checkout foo
.la source
git clone
télécharge toutes les branches distantes, mais ne crée qu'une branche locale de maître. Étant donnégit branch
que seules les branches locales sont affichées, vous devez égalementgit branch -a
voir les branches distantes.Utilisez mon outil git_remote_branch (vous devez installer Ruby sur votre machine). Il est spécialement conçu pour simplifier les manipulations de succursales à distance.
Chaque fois qu'il effectue une opération en votre nom, il l'imprime en rouge sur la console. Au fil du temps, ils restent finalement dans votre cerveau :-)
Si vous ne voulez pas que grb exécute des commandes en votre nom, utilisez simplement la fonction 'expliquer'. Les commandes seront imprimées sur votre console au lieu d'être exécutées pour vous.
Enfin, toutes les commandes ont des alias, pour faciliter la mémorisation.
Notez qu'il s'agit d' un logiciel alpha ;-)
Voici l'aide lorsque vous exécutez l'aide grb:
la source
toutes les réponses que j'ai vues ici sont valables mais il existe un moyen beaucoup plus propre de cloner un référentiel et de tirer toutes les branches à la fois.
Lorsque vous clonez un référentiel, toutes les informations des branches sont réellement téléchargées mais les branches sont masquées. Avec la commande
vous pouvez afficher toutes les branches du référentiel, et avec la commande
vous pouvez ensuite les "télécharger" manuellement un par un.
Cependant, lorsque vous voulez cloner un dépôt avec beaucoup de branches, toutes les façons illustrées ci-dessus sont longues et fastidieuses en ce qui concerne une manière beaucoup plus propre et plus rapide que je vais montrer, bien que ce soit un peu compliqué. Pour ce faire, vous avez besoin de trois étapes:
créez un nouveau dossier vide sur votre ordinateur et clonez une copie miroir du dossier .git à partir du référentiel:
le dépôt local à l'intérieur du dossier my_repo_folder est toujours vide, il y a juste un dossier .git caché que vous pouvez voir avec une commande "ls -alt" du terminal.
basculez ce référentiel d'un référentiel vide (nu) vers un référentiel normal en basculant la valeur booléenne "bare" des configurations git sur false:
Saisissez tout ce qui se trouve dans le dossier actuel et créez toutes les branches sur la machine locale, ce qui en fait un repo normal.
Alors maintenant, vous pouvez simplement taper la commande "git branch" et vous pouvez voir que toutes les branches sont téléchargées.
C'est la manière rapide dont vous pouvez cloner un référentiel git avec toutes les branches à la fois, mais ce n'est pas quelque chose que vous voulez faire pour chaque projet de cette façon.
la source
Le clonage à partir d'un référentiel local ne fonctionnera pas avec git clone & git fetch: de nombreuses branches / balises resteront non récupérées.
Pour obtenir un clone avec toutes les branches et balises.
Pour obtenir un clone avec toutes les branches et balises mais aussi avec une copie de travail:
la source
OK, quand vous clonez votre repo, vous avez toutes les succursales là-bas ...
Si vous le faites
git branch
, ils sont un peu cachés ...Donc, si vous souhaitez voir le nom de toutes les branches, ajoutez simplement un
--all
indicateur comme celui-ci:git branch --all
ougit branch -a
Si vous venez de commander à la succursale, vous obtenez tout ce dont vous avez besoin.
Mais que diriez-vous si la branche créée par quelqu'un d'autre après votre clonage?
Dans ce cas, faites simplement:
git fetch
et vérifiez à nouveau toutes les branches ...
Si vous aimez aller chercher et commander en même temps, vous pouvez faire:
git fetch && git checkout your_branch_name
J'ai également créé l'image ci-dessous pour simplifier ce que j'ai dit:
la source
En regardant l'une des réponses à la question, j'ai remarqué qu'il est possible de la raccourcir:
Mais attention, si l'une des branches distantes est nommée par exemple admin_master, elle ne sera pas téléchargée!
Merci à bigfish pour l'idée originale
la source
grep
, pour améliorer le filtre afin d'éviter les faux positifs.Ce code tirera tous les codes de succursales distantes vers le référentiel local.
la source
Pour copier-coller en ligne de commande:
Pour plus de lisibilité:
Cette volonté:
Basé sur la réponse de VonC .
la source
J'ai écrit ces petites fonctions Powershell pour pouvoir vérifier toutes mes branches git, qui sont à distance d'origine.
Plus de fonctions git peuvent être trouvées sur mon dépôt de paramètres git
la source
Voici une réponse qui utilise awk. Cette méthode devrait suffire si elle est utilisée sur un nouveau dépôt.
Les branches existantes seront simplement extraites ou déclarées comme déjà présentes, mais des filtres peuvent être ajoutés pour éviter les conflits.
Il peut également être modifié pour appeler une
git checkout -b <branch> -t <remote>/<branch>
commande explicite .Cette réponse fait suite à Nikos C. l » idée .
Alternativement, nous pouvons spécifier la branche distante à la place. Ceci est basé sur la réponse de murphytalk .
Il lance des messages d'erreur fatals sur les conflits mais je les vois inoffensifs.
Les deux commandes peuvent être aliasées.
L' utilisation personne de » réponse comme référence, nous pouvons avoir les commandes suivantes pour créer les alias:
Personnellement, j'utiliserais
track-all
outrack-all-branches
.la source
J'avais besoin de faire exactement la même chose. Voici mon script Ruby .
la source
Aucune de ces réponses ne l'a coupé, sauf que l'utilisateur n'est sur la bonne voie.
J'avais du mal à déplacer un dépôt d'un serveur / système à un autre. Lorsque j'ai cloné le référentiel, cela n'a créé qu'une branche locale pour le maître, donc lorsque j'ai poussé vers la nouvelle télécommande, seule la branche principale a été poussée.
J'ai donc trouvé ces deux méthodes TRÈS utiles. J'espère qu'ils aident quelqu'un d'autre.
Méthode 1:
Méthode 2:
la source
git clone --mirror
sur le dépôt d'origine fonctionne bien pour cela.la source
Git récupère généralement (lorsqu'il n'est pas spécifié) toutes les branches et / ou balises (réfs, voir:)
git ls-refs
d'un ou plusieurs autres référentiels avec les objets nécessaires pour compléter leurs historiques. En d'autres termes, il récupère les objets accessibles par les objets déjà téléchargés. Voir: Que faitgit fetch
vraiment?Parfois, vous pouvez avoir des branches / balises qui ne sont pas directement connectées à la branche actuelle, donc
git pull --all
/git fetch --all
n'aidera pas dans ce cas, mais vous pouvez les répertorier en:et les récupérer manuellement en connaissant les noms de référence.
Donc, pour les récupérer tous , essayez:
Le
--depth=10000
paramètre peut aider si vous avez un référentiel superficiel.Vérifiez à nouveau toutes vos succursales:
Si ci-dessus ne vous aide pas, vous devez ajouter manuellement les branches manquantes à la liste de suivi (car elles se sont perdues d'une manière ou d'une autre):
par
git remote set-branches
comme:il peut donc apparaître sous
remotes/origin
après la récupération:Dépannage
Si vous ne pouvez toujours pas obtenir autre chose que la branche principale, vérifiez les points suivants:
git remote -v
), par exemplegit config branch.master.remote
estorigin
.origin
pointe vers la bonne URL via:git remote show origin
(voir cet article ).la source
Au début de 2017, la réponse dans ce commentaire fonctionne:
git fetch <origin-name> <branch-name>
fait descendre la branche pour vous. Bien que cela ne tire pas toutes les branches à la fois, vous pouvez exécuter cette branche par branche.la source
Voici une autre commande courte à une ligne qui crée des branches locales pour toutes les branches distantes:
Cela fonctionne également correctement si le suivi des branches locales est déjà créé. Vous pouvez l'appeler après la première fois
git clone
ou à tout moment plus tard.Si vous n'avez pas besoin de
master
vérifier la branche après le clonage, utilisezla source