web-dev-qa-db-fra.com

git ciągnie wszystkie gałęzie ze zdalnego repozytorium

Jak wyciągnąć wszystkie zdalne oddziały do ​​mojego repozytorium?

jeśli napiszę:

git branch -a

Dostaję długą listę oddziałów, ale jeśli wpiszesz:

git branch 

Widzę tylko 2 z nich.

Jak wyciągnąć gałęzie TOUS na moją lokalną listę?

En savoir plus sur le zrobić:

git checkout --track Origin/branch-name

ale to ciągnie i sprawdza tylko jedną gałąź na raz. Jakikolwiek sposób, aby zrobić à wszystko od razu, bez tej całej żmudnej pracy bieganiagit checkout --track Origin/branch-namew kółko?


ps. Cliquez sur le lien suivant pour afficher les notes d'un ami, cliquez pour le téléchargergit branchlista:

git fetch --all
git remote update
git pull --all
24
MarcinWolny

La commande que j'utilise habituellement pour rendre toutes les branches visibles en amont , et les suivre est détaillée dans " Suivre toutes les branches git distantes en tant que branches locales ":

remote=Origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/[^\/]+\//,"",$1); print $1}'`; do git branch --set-upstream-to $remote/$brname $brname ; done

Ou:

remote=Origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/[^\/]+\//,"",$1); print $1}'`; do git branch --track $brname $remote/$brname  ; done

Pour plus de lisibilité:

remote=Origin ; // put here the name of the remote you want
for brname in `
  git branch -r | grep $remote | grep -v master | grep -v HEAD 
  | awk '{gsub(/[^\/]+\//,"",$1); print $1}'
`; do 
  git branch --set-upstream-to $remote/$brname $brname; 
  # or
  git branch --track $brname  $remote/$brname ; 
done

Le second est destiné à la création de nouvelles branches locales de suivi des branches distantes.

15
VonC

Lire par exemple cette explication http://git-scm.com/book/fr/Git-Branching-Remote-Branches

Commençons par clarifier la terminologie git:

  • fetch: obtenir le contenu (ou les mises à jour) d'un dépôt distant
  • pull: va chercher (comme ci-dessus) et fusionne en une étape

L’affiche originale ne mentionnait pas la fusion, alors je suppose qu’il aurait peut-être voulu demander à "git chercher toutes les branches du dépôt distant".

Si vous voyez les branches dans git branch -a alors vous les avez déjà récupérées . Vous pouvez le vérifier en donnant la commande git show remotes/Origin/some-branch:some-file

Ou peut faire par exemple git diff remotes/Origin/some-branch master

Vous pouvez même les vérifier git checkout remotes/Origin/some-branch

(Pour être sûr, vous pouvez retirer le câble réseau et vous verrez que les commandes fonctionnent sans contacter le référentiel distant.)

Les branches nommées remotes/... sont appelées branches distantes, mais elles sont déjà récupérées dans votre référentiel. Ils sont en lecture seule, vous ne pouvez pas les modifier (c’est pourquoi un message s’affiche lors de la validation de votre commande). Bien qu'ils reflètent l'état d'un dépôt distant au moment de la dernière opération d'extraction ou d'extraction, ils sont en fait stockés localement.

Si vous utilisez git checkout some-branch et que certaines branches n'existent pas encore, mais que les télécommandes/Origine/certaines-branches existent, git créera une branche de suivi appelée une branche pour vous (1). Là encore, il s’agit d’une opération locale; toutes les données ont déjà été extraites (ou, si vous n’avez pas été extraites récemment, vous commencerez à travailler sur une version obsolète). À l'origine, le contenu de la branche de suivi est identique à celui de sa branche distante. Cependant, la branche de suivi peut être modifiée par vous localement.

La zone de travail git contient l'état d'une branche à la fois. Votre question sur la vérification simultanée de toutes les branches distantes n’a donc aucun sens dans le contexte de git. Vous pouvez les vérifier les uns après les autres. Mais chaque fois que vous extrayez le suivant, le précédent disparaît de la zone de travail. Bien sûr, cette opération peut être scriptée comme indiqué dans Suivre toutes les branches git distantes en tant que branches locales Mais à quoi sert-il de scripter une opération de masse si seulement sa dernière étape est ce qui reste? 

La question pourrait donc être causée par un malentendu, en supposant que les succursales distantes seraient uniquement stockées à distance, mais pas localement et que vous vouliez simplement vous assurer que tout était local? Si vous voulez vraiment que plusieurs branches soient extraites à la fois, vous pouvez cloner votre référentiel localement et extraire différentes branches dans différents domaines de travail. (2)

Shortly: si vous voulez vous assurer que toutes les données disponibles localement se trouvent dans le référentiel Distant, utilisez simplement git fetch [repo]. À moins que vous n'ayez peaufiné votre configuration, toutes les branches seront récupérées, c'est-à-dire mettre à jour les branches distantes existantes et en créer de nouvelles, le cas échéant.

(1) Ceci est vrai dans les cas simples et standards. Dans des cas plus complexes comportant plusieurs télécommandes distantes ou configurées manuellement, vous aurez peut-être besoin de l'option --track pour spécifier exactement ce que vous voulez. 

(2) Il existe une nouvelle fonctionnalité git worktree pour ce cas d'utilisation. Cependant, à partir de début 2018, il est encore marqué expérimental

17
Uwe Geuder

Vous devriez essayer quelque chose comme: -

$ git fetch --all
$ for branch in `git branch -r | cut -d '/' -f2-` ; do git checkout $branch && git pull Origin $branch ; done
2
Mr. Pundir

J'ai toujours utilisé ça et ça marche parfaitement 

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#Origin/}" "$remote"; done
git fetch --all
git pull --all
1
pixel 67