Domanda Come clonare tutte le filiali remote in Git?


Ho un master e a development ramo, entrambi spinti a GitHub. Io ho cloned, pulled, e fetchndr, ma non riesco a ottenere altro che il master ramo indietro.

Sono sicuro che mi manca qualcosa di ovvio, ma ho letto il manuale e non mi sembra affatto una gioia.


3554
2017-09-15 22:42


origine


risposte:


In primo luogo, clonare un telecomando Idiota repository e CD dentro:

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

Quindi, guarda le filiali locali nel tuo repository:

$ git branch
* master

Ma ci sono altri rami nascosti nel tuo repository! Puoi vederli usando il -a bandiera:

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

Se vuoi dare una rapida occhiata a un ramo upstream, puoi verificarlo direttamente:

$ git checkout origin/experimental

Ma se vuoi lavorare su quel ramo, dovrai creare un ramo di localizzazione locale che viene eseguito automaticamente da:

$ git checkout experimental

e vedrai

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

Quest'ultima riga lancia alcune persone: "Nuovo ramo" - eh? Ciò che significa in realtà è che il ramo è preso dall'indice e creato localmente per te. Il precedente la linea è in realtà più informativa in quanto ti dice che il ramo è stato impostato per tracciare il ramo remoto, che di solito significa il ramo origine / ramo_name

Ora, se guardi le tue filiali locali, questo è ciò che vedrai:

$ git branch
* experimental
  master

È possibile tenere traccia di più di un repository remoto utilizzando 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

A questo punto, le cose stanno diventando piuttosto pazze, quindi corri gitk per vedere cosa sta succedendo:

$ gitk --all &

4019
2017-09-16 13:28



Se hai molte filiali remote che vuoi recuperare subito, fai:

$ git pull --all

Ora è possibile effettuare il checkout di qualsiasi filiale in base alle necessità, senza colpire il repository remoto.


743
2018-01-13 16:42



Questo bash la sceneggiatura mi ha aiutato:

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

Creerà rami di rilevamento per tutti i rami remoti, ad eccezione del master (che probabilmente hai ottenuto dal comando clone originale). Penso che potresti ancora aver bisogno di fare un

git fetch --all
git pull --all

per essere sicuro.

Una fodera: 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 Come al solito: prova nel tuo setup prima di copiare l'universo rm -rf come lo conosciamo

Crediti per one-liner vai a utente cfi


379
2018-01-21 02:18



Usando il --mirror l'opzione sembra copiare il file remote seguire correttamente i rami. Tuttavia, imposta il repository come un repository nuda, quindi è necessario ripristinarlo in un repository normale in seguito.

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

Riferimento: FAQ Git: Come posso clonare un repository con tutte le filiali tracciate in remoto?


279
2017-08-27 17:49



È possibile passare facilmente a un ramo senza utilizzare la sintassi di "git checkout -b somebranch origin / somebranch". Puoi solo fare:

git checkout somebranch

Git farà automaticamente la cosa giusta:

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

Git controllerà se un ramo con lo stesso nome esiste esattamente in un remoto, e se lo fa, lo tiene traccia nello stesso modo in cui lo hai specificato esplicitamente che si tratta di un ramo remoto. Dalla pagina man di Git-checkout di Git 1.8.2.1:

Se <branch> non viene trovato ma esiste un ramo di tracciamento in   esattamente un telecomando (chiamatelo <remote>) con un nome corrispondente, trattate come   equivalente a

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

204
2018-05-12 12:11



Per quanto riguarda,

$ git checkout -b origine sperimentale / sperimentale

utilizzando

$ git checkout -t origin/experimental

o il più verboso ma più facile da ricordare

$ git checkout --track origin/experimental

potrebbe essere migliore, in termini di monitoraggio di un repository remoto.


88
2017-07-27 06:10



Il recupero che stai facendo dovrebbe ottenere tutti i rami remoti, ma non creerà per loro rami locali. Se usi gitk, dovresti vedere i rami remoti descritti come "remotes / origin / dev" o qualcosa di simile.

Per creare un ramo locale basato su un ramo remoto, fai qualcosa come:

git checkout -b dev refs / remotes / origin / dev

Quale dovrebbe restituire qualcosa come:

Branch dev set up per tracciare remote branch refs / remotes / origin / dev.
Passato a un nuovo ramo "dev"

Ora, quando sei sul ramo dev, "git pull" aggiornerà il tuo dev locale allo stesso punto del ramo dev remoto. Nota che recupererà tutti i rami, ma tirerà solo quello che sei in cima all'albero.


77
2017-09-15 22:52



Quando esegui "git clone git: // location", vengono recuperati tutti i rami e i tag.

Per lavorare su uno specifico ramo remoto, supponendo che sia il telecomando di origine:

git checkout -b branch origin/branchname

57
2017-09-15 22:47



Usa alias. Sebbene non ci siano one-liner Git nativi, puoi definire il tuo come

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

e quindi usarlo come

git clone-branches

46
2018-05-15 11:02



Questo non è troppo complicato, molto semplice e semplici passi sono i seguenti;

git fetch origin Questo porterà tutte le filiali remote al tuo locale.

git branch -a Questo ti mostrerà tutte le filiali remote.

git checkout --track origin/<branch you want to checkout>

Verificare se ci si trova nella diramazione desiderata con il seguente comando;

git branch

L'output piacerà a questo;

*your current branch 
some branch2
some branch3 

Si noti il ​​segno * che indica il ramo corrente.


43
2017-12-26 10:19



Perché vedi solo "maestro"

git clone scarica tutte le filiali remote remote ma le considera comunque "remote", anche se i file si trovano nel nuovo repository. C'è un'eccezione a questa, che è che il processo di clonazione crea un ramo locale chiamato "master" dal ramo remoto chiamato "master". Di default, git branch mostra solo i rami locali, ecco perché vedi solo "master".

git branch -a mostra tutti i rami, compresi i rami remoti.


Come ottenere filiali locali

Se in realtà vuoi lavorare su un ramo, probabilmente vorrai una versione "locale" di esso. Per creare semplicemente filiali locali da filiali remote (senza verificarli e quindi modificare il contenuto della directory di lavoro), puoi farlo in questo modo:

git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree

In questo esempio, branchone è il nome di un ramo locale su cui stai creando origin/branchone; se invece vuoi creare filiali locali con nomi diversi, puoi farlo:

git branch localbranchname origin/branchone

Una volta creato un ramo locale, puoi vederlo con git branch (ricorda, non hai bisogno -a vedere le filiali locali).


41
2018-03-05 13:47