Question Comment cloner toutes les branches distantes de Git?


j'ai un master et un development branche, tous deux poussés à GitHub. J'ai cloneré, pulled, et fetched, mais je reste incapable d'obtenir autre chose que le master ramification.

Je suis sûr qu'il me manque quelque chose d'évident, mais j'ai lu le manuel et je ne reçois aucune joie du tout.


3555
2017-09-15 22:42


origine


Réponses:


Premièrement, cloner une télécommande Git référentiel et CD dans ça:

$ git clone git://example.com/myproject
$ cd myproject

Ensuite, regardez les branches locales dans votre dépôt:

$ git branch
* master

Mais il y a d'autres branches qui se cachent dans votre dépôt! Vous pouvez les voir en utilisant le -a drapeau:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

Si vous voulez juste jeter un coup d'œil rapide à une branche en amont, vous pouvez le vérifier directement:

$ git checkout origin/experimental

Mais si vous voulez travailler sur cette branche, vous devez créer une branche locale de suivi qui est faite automatiquement par:

$ git checkout experimental

et vous allez voir

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

Cette dernière ligne lance des gens: "Nouvelle branche" - hein? Ce que cela signifie vraiment, c'est que la branche est tirée de l'index et créée localement pour vous. le précédent line est en fait plus informatif car il vous indique que la branche est configurée pour suivre la branche distante, ce qui signifie généralement la branche origin / branch_name

Maintenant, si vous regardez vos branches locales, voici ce que vous verrez:

$ git branch
* experimental
  master

Vous pouvez réellement suivre plus d'un référentiel distant en utilisant git remote.

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

À ce stade, les choses deviennent assez folles, alors lancez gitk pour voir ce qui se passe:

$ gitk --all &

4020
2017-09-16 13:28



Si vous avez plusieurs branches distantes que vous voulez chercher à la fois, faites:

$ git pull --all

Vous pouvez désormais extraire n'importe quelle branche comme vous le souhaitez, sans toucher le référentiel distant.


743
2018-01-13 16:42



Ce Frapper script m'a aidé:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

Il créera des branches de suivi pour toutes les branches distantes, sauf master (que vous avez probablement obtenu à partir de la commande clone d'origine). Je pense que vous pourriez encore avoir besoin de faire un

git fetch --all
git pull --all

pour être sûr.

Bon mot: 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 dans votre configuration avant de copier l'univers rm -rf tel que nous le connaissons

Crédits pour one-liner aller à l'utilisateur cfi


379
2018-01-21 02:18



En utilisant le --mirror option semble copier le remote suivi des branches correctement. Cependant, il configure le référentiel comme un référentiel nu, vous devez donc le réintégrer dans un référentiel normal par la suite.

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

Référence: Git FAQ: Comment puis-je cloner un dépôt avec toutes les branches suivies à distance?


279
2017-08-27 17:49



Vous pouvez facilement passer à une branche sans utiliser la fantaisie "git checkout -b unbranch origine / somebranch" syntaxe. Vous pouvez juste faire:

git checkout somebranch

Git fera automatiquement la bonne chose:

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'

Git vérifiera si une branche avec le même nom existe dans exactement une télécommande, et si c'est le cas, elle le suivra de la même manière que si vous aviez spécifié explicitement qu'il s'agit d'une branche distante. De la page de manuel git-checkout de Git 1.8.2.1:

Si <branche> n'est pas trouvé mais qu'il existe une branche de suivi dans   exactement une télécommande (appelez-la <remote>) avec un nom correspondant, traiter comme   équivalent à

$ git checkout -b <branch> --track <remote>/<branch>

204
2018-05-12 12:11



En ce qui concerne,

$ git checkout -b origine expérimentale / expérimentale

en utilisant

$ git checkout -t origin/experimental

ou plus verbeux mais plus facile à retenir

$ git checkout --track origin/experimental

pourrait être mieux, en termes de suivi d'un dépôt distant.


88
2017-07-27 06:10



La récupération 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 "remotes / origin / dev" ou quelque chose de similaire.

Pour créer une branche locale basée sur une branche distante, faites quelque chose comme:

git checkout -b dev refs / télécommandes / origin / dev

Ce qui devrait renvoyer quelque chose comme:

Développement de branche pour suivre les références de branches distantes / distantes / origin / dev.
Passé à une nouvelle branche "dev"

Maintenant, lorsque vous êtes sur la branche dev, "git pull" mettra à jour votre dév local au même point que la branche de développement à distance. Notez qu'il va chercher toutes les branches, mais seulement tirer celui que vous êtes sur le dessus de l'arbre.


77
2017-09-15 22:52



Lorsque vous faites "git clone git: // location", toutes les branches et étiquettes sont récupérées.

Pour travailler au-dessus d'une branche distante spécifique, en supposant que c'est l'origine distante:

git checkout -b branch origin/branchname

57
2017-09-15 22:47



Utilisez des alias Bien qu'il n'y ait pas de Git one-liners natif, vous pouvez définir votre propre

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

et ensuite l'utiliser comme

git clone-branches

46
2018-05-15 11:02



Ce n'est pas trop compliqué, les étapes très simples et simples sont les suivantes;

git fetch origin Cela amènera toutes les branches 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;

git branch

La sortie va aimer ça;

*your current branch 
some branch2
some branch3 

Notez le signe * qui indique la branche actuelle.


43
2017-12-26 10:19