Vorrei clonare un repository da GitHub. Il problema è che non voglio il ramo principale; Voglio la versione in questa richiesta pull non approvata .
È possibile clonare la versione della richiesta pull invece del repository principale?
Vorrei clonare un repository da GitHub. Il problema è che non voglio il ramo principale; Voglio la versione in questa richiesta pull non approvata .
È possibile clonare la versione della richiesta pull invece del repository principale?
Risposte:
Puoi clonare il ramo che desideri utilizzando l' -b
opzione e per la richiesta pull:
git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name
Nel tuo caso, il ramo che vuoi clonare è il ramo sorgente della richiesta pull ( feature/mongoose-support
):
git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support
Il modo più semplice per farlo è così:
git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD
Ti troverai ora su un nuovo ramo che si trova nello stato della richiesta pull.
Potresti voler impostare un alias eseguendo
git config --global alias.pro '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'
Ora puoi eseguire il checkout di qualsiasi PR eseguendolo git pr <pr_number>
o git pr <pr_number> <remote>
se il tuo telecomando GitHub non è denominato origin
.
.gitconfig
file in [alias]
: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f"
. In questo modo digito git pr upstream 62
e la prossima cosa che so, sono su un nuovo ramo di PR # 62 da monte! Se lo usi sempre origin
puoi codificarlo come hardcoded invece di $1
, ma per me cambia.
co
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH
per esempio:
$ git fetch origin pull/611/head:pull_611
$ git checkout pull_611
Apporta modifiche, esegui il commit, PUSH e apri un nuovo PR dal fork su GitHub
È possibile seguire le indicazioni in questa sintesi per poter controllare direttamente il telecomando senza dover capire il loro repository e ramo.
Utilizzo di esempio
Per uno dei miei progetti (github3.py) ho quanto segue nel mio file github3.py/.git/config
[remote "github"]
fetch = +refs/heads/*:refs/remotes/github/*
fetch = +refs/pull/*/head:refs/remotes/github/pr/*
url = git@github.com:sigmavirus24/github3.py
La prima riga è ciò che è standard per ogni telecomando con l'eccezione che github
viene sostituita dal nome del telecomando. Ciò significa che le testine remote (o le testate dei rami su quel server) sono "mappate" su telecomandi locali preceduti da github/
. Quindi, se ho fatto git fetch github
e ha avuto un ramo su GitHub che non è stato già notato a livello locale sulla mia macchina, sarebbe scaricare il ramo e ho potuto passare ad esso in questo modo: git checkout -t github/branch_name
.
La seconda riga fa la stessa cosa, ma lo fa per le richieste pull invece che per i rami git standard. Ecco perché vedi refs/pull/*/head
. Recupera l'intestazione di ogni richiesta pull su GitHub e la mappa a github/pr/#
. Quindi, se qualcuno invia una richiesta di pull ed è numerata 62 (ad esempio), faresti:
git fetch github
git checkout -t github/pr/62
E poi saresti su un ramo locale chiamato pr/62
(supponendo che non esistesse già). È carino e significa che non devi tenere traccia dei telecomandi o dei rami di altre persone.
git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clone
dal documento essenziale.
git fetch github
, puoi farlo git co -t github/pr/#
. Questo ti impedisce di dover copiare e incollare l'URL remoto, capire il nome del ramo, ecc. Quindi ottieni nomi di ramo ben denominati, concisi e accurati senza problemi aggiuntivi. Ma capisco che possa sembrare opprimente.
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head
Come posso recuperare una richiesta pull non unita per un ramo che non possiedo?
git pull
crea una fusione nel ramo corrente; di solito per un PR vorresti solo git fetch
ottenere il codice dell'autore originale (è quindi accessibile come FETCH_HEAD). Se vuoi un'unione, vale anche la pena menzionarla pull/2/merge
(invece di pull/2/head
) - questo fa sì che GitHub ti dia l'esatto commit di unione che avverrebbe se facessi clic sul pulsante [Unisci] ora.
Quando un utente invia una richiesta pull, chiede che alcune modifiche vengano unite da un ramo sul proprio clone di un fork al repository di un altro utente.
Le modifiche desiderate possono essere ottenute dall'origine della richiesta pull. Per fare ciò, clona il repository dell'utente ( git://github.com/berstend/frappe.git
), quindi controlla il ramo da cui ha creato la richiesta pull ( feature/mongoose-support
).
Dopo aver installato git-extras
(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)
Puoi semplicemente usare git pr
$ git pr 62 [remote]
Con la nuova interfaccia a riga di comando ufficiale di Github :
gh repo clone org/repo
cd repo
gh pr checkout 44
dove 44
è il numero PR, ma può anche essere il nome della filiale.
Vedere ulteriori dettagli e opzioni e istruzioni di installazione .
clone
, ma perfetch
vedere: stackoverflow.com/questions/6743514/...