GitHub'da bir çatalı olduğum bir projede, yazarın henüz çekmediği çatalıma çekmek istediğim yeni bir çekme isteği var.
Çatalıma diğer çatallardan çekme isteği uygulamanın basit bir yolu var mı? Burada özlediğim başka bir şey var mı?
GitHub'da bir çatalı olduğum bir projede, yazarın henüz çekmediği çatalıma çekmek istediğim yeni bir çekme isteği var.
Çatalıma diğer çatallardan çekme isteği uygulamanın basit bir yolu var mı? Burada özlediğim başka bir şey var mı?
Yanıtlar:
Manuel olarak kolayca yapabilirsiniz:
diğer çatalı deponuzun uzaktan kumandası olarak ekleyin:
git remote add otherfork git://github.com/request-author/project.git
repo taahhütlerini getir
git fetch otherfork
Daha sonra çekme isteğini uygulamak için iki seçeneğiniz vardır (seçim 1'i seçmek istemiyorsanız).
Kökeni ve çekme isteği arasında eklenen nihai taahhütleri de uygulamak umursamıyorsanız, çekme talebinin oluşturulduğu şubeyi yeniden temellendirebilirsiniz.
git rebase master otherfork/pullrequest-branch
Taahhütleri yalnızca çekme isteğinde istiyorsanız, SHA1'lerini belirleyin ve
git cherry-pick <first-SHA1> <second-SHA1> <etc.>
git pull URL branchname
Bunu github web sayfası üzerinden de yapabilirsiniz.
Zaten ilgilendiğiniz bir çataldan ( ) bekleyen çekme isteğine sahip MyFork
ortak repo ( BaseRepo
) çatalına ( ) sahip olduğunuzu varsayalım OtherFork
.
OtherFork
almak istediğiniz çekme isteğini başlatan çatala ( ) gidin ( MyFork
)OtherFork
OtherFork
dalı da seçmeyi unutmayın . Sol tarafta çatalınızı ( MyFork
) ( ÖNEMLİ ) olarak sol taraftan seçin .View pull request
değişmelidir Create pull request
. Buna tıkla.Şimdi çatalınızda ( MyFork
) beklemede olan bir çekme isteğiniz olmalıdır .
OtherFork
sağdaki 'karşılaştırma' açılır listesinden yapılan çekme isteğine karşılık gelen dalı seçtim . Daha sonra, çekme isteğini oluşturabildiği gibi sol tarafı yukarıda açıklandığı gibi temel çatal olarak seçtim.
Tekkub'un daha önce söylediği gibi, şubeyi doğrudan çekebilirsiniz. GitHub ile çoğu zaman, şube, projenin talep eden Kullanıcı çatalında "usta" olur.
Misal: git pull https://github.com/USER/PROJECT/ BRANCH
Pratik bir örnek olarak:
Diyelim ki safaribooks adında bir github projesi çatalladınız ve kaynak projede çatalınıza koymak istediğiniz aşağıdaki çekme isteği var:
Ardından, çatalınızın klonlanmış proje klasöründe şunu çalıştırın:
git pull https://github.com/fermionic/safaribooks.git fix-str-decode
git pull https://github.com/{upstream/project} refs/pull/{id}/head
bunun yerine kullanmak daha iyidir .
Proje için çekme istekleri birçok farklı yazardan (çatal) gelebilir ve muhtemelen her çatal için ayrı bir uzaktan kumanda istemezsiniz. Ayrıca, yazarın çekme isteği gönderirken kullandığı dal veya yazarın ana dalında başka neler olabileceği hakkında varsayımlar yapmak istemezsiniz. Bu nedenle, çekme çatalını, diğer çatallarda göründüğü gibi, yukarı akış deposunda göründüğü gibi belirtmek daha iyidir.
Aşama 1:
git remote add upstream <url>
Muhtemelen bu adımı zaten yapmışsınızdır, ancak değilse, yukarı akış projesi için tanımlanmış bir uzaktan kumanda isteyeceksiniz. URL, çatalladığınız projenin klon URL'sidir. Daha fazla bilgi için Uzaktan kumandayı çatal için yapılandırma ve çatal senkronizasyonu . upstream
uzaktan kumandaya verdiğiniz addır ve herhangi bir şey olsa upstream
da geleneksel addır.
Adım 2:
git pull upstream refs/pull/{id}/head
... {id}
çekme talebi numarası nerede . upstream
uzaktan kumandanın adıdır, yani sadece 1. adımı tam olarak izlediyseniz "yukarı akış" tır. Ayrıca bir URL olabilir, bu durumda 1. adımı atlayabilirsiniz.
Aşama 3:
Birleştirme taahhüdü için bir taahhüt iletisi yazın. Çekme isteği numarası, giderdiği sorun ve kısa bir açıklama ile güzel bir tek satırlık özet vermenizi öneririm, ancak varsayılanı koruyabilirsiniz:
Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
git pull upstream refs/pull/{id}/head
Ardından, yerel repo içine kaydedilmesini almak için onları referans FETCH_HEAD
(örn git log ..FETCH_HEAD
sonra, içinde ne olduğunu görmek için git merge FETCH_HEAD
)
Benim için çalışan daha ayrıntılı bilgiler.
Çatallı repo için .git / config dosyam şöyle görünüyor:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = git@github.com:litzinger/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "source"]
url = git://github.com/revolunet/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/source/*
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
Daha sonra çatallı depodaki tüm çekme isteklerini listeleyen "git fetch source" komutunu çalıştırın.
* [new ref] refs/pull/54/head -> origin/pr/54
* [new ref] refs/pull/67/head -> origin/pr/67
* [new ref] refs/pull/69/head -> origin/pr/69
* [new ref] refs/pull/71/head -> origin/pr/71
Ve sonra belirli bir çekme isteğinde birleştirmek için "git merge master origin / pr / 67" komutunu çalıştırın
refs/pull/
ad alanında ipuçları içerir. .
smartgit.branch.otherRefs=notes;pull
gereğince smartgit.properties için syntevo.com/doc/display/SG/System+Properties - Ayrıca onları birleştirebilir orada .
Yapacağım şey şu;
git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#
Şimdi değişiklikleri adlı bir test dalında birleştirdim test_fork
. Böylece herhangi bir değişiklik ağacımı kirletmez.
İsteğe bağlı olarak, daha tercih edilirse belirli bir taahhüdü seçmek için yukarıda açıklandığı gibi kiraz toplama kullanabilirsiniz.
Mutlu yolculuklar :)
Bunun için kullanışlı bir züppe komut dosyası kullanıyorum. Ben komut dosyasını yazarak çalıştırın:
git prfetch upstream
ve tüm çekme taleplerini yukarı akış çatalından alır.
Komut dosyası oluşturmak için bir dosya oluşturun ~/bin/git-prfetch
.
Dosya aşağıdakileri içermelidir:
#!/bin/bash
if [ -z "$1" ]; then
echo "Please supply the name of a remote to get pull requests from."
exit 1
fi
git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*
Aşağıdakileri ayarlayarak yolunuzun komut dosyasını içerdiğinden emin olun:
export PATH="$HOME/bin:$PATH"
~/.bashrc
Değişikliği kalıcı yapmak için bu dosyayı ekleyebilirsiniz .
Şimdi, çekme isteklerini almak istediğiniz çatalı eklediğinizden emin olun:
git remote add upstream https://github.com/user/repo.git
Ve sonra
git prfetch upstream