Recupera un ramo specifico usando git


19

Voglio scaricare il codice sorgente dal ramo master-next usando git come descritto nel wiki di Xilinx .

Ho provato questo:

#git clone git://github.com/Xilinx/u-boot-xlnx/tree/master-next.git

Initialized empty Git repository in /home/Hannan/master-next/.git/
fatal: remote error:
Xilinx/u-boot-xlnx/tree/master-next is not a valid repository name
Email support@github.com for help

Anche questo ha fallito:

# git clone git://github.com/Xilinx/tree/master-next/u-boot-xlnx.git
Initialized empty Git repository in /home/Hannan/u-boot-xlnx/.git/
fatal: remote error:
Xilinx/tree/master-next/u-boot-xlnx is not a valid repository name
Email support@github.com for help

Il comando che funziona è:

 git clone git://github.com/Xilinx/u-boot-xlnx.git

Ma come faccio a sapere che questo effettivamente recupererà il ramo master-next e non il ramo master ? Come posso recuperare correttamente un ramo specifico usando git?

Sto usando RHEL 6, accessibile tramite PuTTY.

Risposte:


16

Come ti dice il messaggio di errore, si git cloneaspetta un repository git. Non è possibile "aggiungere" il nome di un ramo nel percorso in questo modo. Vedi i rami in git .

Puoi clonare un singolo ramo (e la sua storia): git clone <url> --branch <branch> --single-branch

Vedere git help clone.

Ma il comando clone che hai eseguito ti ha dato una copia dell'intero repository, puoi vedere i rami esistenti con git branche più dettagli su di essi con git show-branch.

Passa al ramo che desideri git checkout branch-name.

I primi capitoli del libro Pro Git (disponibile online) forniscono maggiori dettagli sui comandi di base.


"comando clone che hai eseguito ti ha dato una copia dell'intero repository". l'intero repository significa che entrambi i rami sono stati uniti?
user2799508

No, non vengono uniti. Un ramo in git non è una copia dell'intera directory, come spiegato qui .
Leiaz,

Quello che ho fatto è questo: "git clone -b master-next github.com/Xilinx/u-boot-xlnx.git " non è corretto?
user2799508

Non hai più bisogno del clone. Il comando che hai mostrato nella tua domanda ti ha dato il repository con tutti i rami. Ma anche questo è corretto. È equivalente a fare git checkout master-nextdopo la clonazione.
Leiaz,

13

Questo comando dovrebbe funzionare:

$ git fetch origin [branch]

Il comando precedente recupera solo i metadati dal repository remoto, non unisce le origini.

Se vuoi recuperare e unire i sorgenti, il comando sarebbe:

$ git pull origin [branch]

Prestare attenzione al ramo in cui si sta eseguendo il comando di unione. Sarà dove le fonti vengono unite.


La tua risposta è tecnicamente corretta, ma penso che potrebbe trarre vantaggio da alcuni controlli / riscritture grammaticali.
Sami Laine,

funziona bene grazie
nwgat

4

i repository git contengono tutti i rami (ma compressi e solo differenze quindi raramente un problema di dimensioni).

Pertanto, puoi clonare l'intero progetto come hai fatto con successo. Questo è un modo standard per ottenere un repository, anche se sei interessato a un solo ramo.

La struttura .git includerà quindi tutti i rami eseguiti su quel repository.

Per utilizzare un ramo specifico fare git checkout [branch_name] Se il ramo esiste, i file saranno resi disponibili localmente (a parte questo, i file correnti nelle directory del progetto).

git status mostrerà quindi quale ramo è il ramo corrente, ad esempio:

Secondo Leiaz si può clonare un ramo specifico. In pratica non l'ho mai fatto né visto altri usarlo. Su ulteriori ricerche, vedo che è relativamente nuovo, aggiunto in git 1.7.10 (aprile 2012): l'opzione 'git clone imparato - ramo singolo' per limitare la clonazione a un singolo ramo (sorpresa!); i tag che non puntano alla cronologia del ramo non vengono recuperati. Per esempio:

git clone -b master-next --single-branch git://github.com/Xilinx/

inserisci qui la descrizione dell'immagine Qui, per la mia applicazione "linker", sto controllando il ramo v3.0.10


1
Nemmeno io l'ho mai fatto, mi sono ricordato di aver visto l'opzione. Immagino che sia usato raramente poiché i rami extra hanno dimensioni "economiche".
Leiaz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.