Çekme isteğinden GitHub klonu mu?


Yanıtlar:


87

-bSeçeneği kullanarak ve çekme isteği için istediğiniz dalı klonlayabilirsiniz :

git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name

Sizin durumunuzda, klonlamak istediğiniz dal, çekme isteğinin ( feature/mongoose-support) kaynak dalıdır :

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support

112

Bunu yapmanın en kolay yolu şudur:

git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD

Şimdi, çekme isteği durumunda olan yeni bir şubede olacaksınız.

Çalıştırarak bir takma ad ayarlamak isteyebilirsiniz

git config --global alias.pro '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'

Artık herhangi bir PR'yi çalıştırarak git pr <pr_number>veya git pr <pr_number> <remote>github uzaktan kumandanız adlandırılmamışsa kontrol edebilirsiniz origin.


49
Daha iyi: git fetch origin pull/<#>/head:<local_branch_name>( üzerinden )
schlamar

5
Benim içine bu sıkışmış yüzden kendim, sık sık bu SO cevabı başvuran bulundu .gitconfigaltında dosyaya [alias]: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f". Bu şekilde sadece yazıyorum git pr upstream 62ve bildiğim bir sonraki şey, yukarı akıştan yeni bir PR # 62 şubesindeyim! Her zaman kullanırsanız origin, yerine kod yazabilirsiniz $1, ancak bu benim için değişir.
matt -

@matt adlı ödeme için bir takma adınız olduğunu varsayarco
Michael McQuade

43
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

Örneğin:

$ git fetch origin pull/611/head:pull_611
$ git checkout pull_611

Değişiklikler yapın, uygulayın, PUSH yapın ve GitHub'daki çatalınızdan yeni PR açın


bu şubeleri yerel olarak nasıl birleştirebilirim? Yukarıda yaptığınız gibi birleştirilmiş olmayan bir çekme isteğini klonladım ve getirdim. ve kontrol şube adını denedim, ancak IDE / metin düzenleyicimde hiçbir değişiklik görünmüyor.
erginduran

17

Depolarını ve şubelerini anlamaya gerek kalmadan uzaktan kumandayı doğrudan kontrol edebilmek için bu özetteki talimatları takip edebilirsiniz.

Örnek kullanım

Projelerimden biri için (github3.py) aşağıdakiler var: 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

İlk satır, githubuzaktan kumandanın adıyla değiştirilen istisna dışında her uzaktan kumanda için standart olan şeydir . Bunun anlamı, uzak kafaların (veya o sunucudaki dalların başlarının) ön eki ile yerel uzaktan kumandalara "eşleştirilmesidir" github/. Ben yaptıysa git fetch githubve zaten benim makinede lokal olarak fark değildi GitHub üzerinde bir şube vardı, şube indirmek istiyorum ve ben şöyle kendisine geçiş olabilir: git checkout -t github/branch_name.

İkinci satır da aynı şeyi yapar, ancak bunu standart git dalları yerine çekme istekleri için yapar. Bu yüzden görüyorsun refs/pull/*/head. GitHub'daki her bir çekme isteğinin başını getirir ve onu ile eşler github/pr/#. Öyleyse birisi bir çekme isteği gönderirse ve numara 62 ise (örneğin), yaparsınız:

git fetch github
git checkout -t github/pr/62

Ve sonra adında yerel bir şubede olurdunuz pr/62(zaten mevcut olmadığını varsayarak). Bu güzel ve diğer insanların uzaktan kumandalarını veya şubelerini takip etmek zorunda olmadığınız anlamına gelir.


2
Neden olmasın? Bunun uygun ve verimli bir şekilde nasıl yapılacağını tam olarak açıklar.
Ian Stapleton Cordasco

Çünkü ben bir çaylakım ve bu belgeyi anlamak zor. Asla git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clonebelgeden " alamamaktan " asla anlamazdım.
Fresheyeball

6
Temel belgenin yaptığı şey, GitHub'dan alınacak fazladan bir bilgi kümesi (referanslar veya referanslar) eklemektir. Ne zaman yaparsan git fetch githubo zaman yapabilirsin git co -t github/pr/#. Bu, uzak URL'yi kopyalayıp yapıştırma, şube adını bulma vb. Zorunda kalmanızı önler. Daha sonra ekstra güçlük çekmeden iyi adlandırılmış, kısa ve doğru şube adlarını alırsınız. Ama bunun ezici görünebileceğini anlıyorum.
Ian Stapleton Cordasco

Oh iyi. Bu + 1'i bilmiyordum! Bana tam nitelikli bir örnek verebilir misiniz?
Fresheyeball

@ sigmavirus24 bilgiler için çok teşekkürler; Acaba bitbucket için benzer bir numara var mı?
Petr Kozelka

8
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

Sahibi olmadığım bir şube için birleştirilmemiş bir çekme talebini nasıl getirebilirim?


1
Not git pull, geçerli dalda bir birleştirme oluşturur; genellikle bir PR için sadece git fetchorijinal yazarın kodunu almak istersiniz (daha sonra FETCH_HEAD olarak erişilebilir). Bir birleştirme istiyorsanız, bundan bahsetmeye değer pull/2/merge(yerine pull/2/head) - bu, GitHub'ın size şimdi [Birleştir] düğmesine tıklarsanız gerçekleşecek tam birleştirme işlemini vermesini sağlar.
Beni Cherniavsky-Paskin

6

Bir kullanıcı bir çekme isteği gönderdiğinde, bazı değişikliklerin bir çatal klonundaki bir daldan başka bir kullanıcının deposuna birleştirilmesini ister.

İstediğiniz değişiklikler, çekme talebinin kaynağından alınabilir. Bunu yapmak için, kullanıcının deposunu ( git://github.com/berstend/frappe.git) klonlayın ve sonra ( feature/mongoose-support) dan çekme isteğini oluşturduğu dalı teslim alın .


1

Git ekstralarını yükledikten sonra

(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)

Sadece kullanabilirsin git pr

$ git pr 62 [remote]


0

Bu çekme talebi, o kişinin çatalından yapılan taahhütleri gösterir, böylece değişikliklerini feature/mongoose-supportdaldan ittiğini görebilirsiniz .

Deposunu klonlayabilir ve o şubeyi kontrol edebilirsiniz.


0

Benim için bu kadar basitti

git fetch origin pull/4/head

Burada nerede 4bulundu:

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.