Bagaimana Anda melampirkan permintaan tarikan baru ke masalah yang ada di github?

409

Saya tidak yakin, tetapi saya memiliki memori samar-samar untuk membuat permintaan tarik github dengan "Masalah 4" atau sesuatu dalam judul, dan secara otomatis melekat pada Masalah 4 dalam proyek yang saya kirimkan. Saya mencobanya lagi baru-baru ini dan tidak berhasil - itu malah menciptakan masalah baru. Saya tidak melihat opsi seperti "Lampirkan ke masalah" di halaman permintaan tarik baru, atau "Buka permintaan tarik baru untuk masalah ini" di halaman masalah. Apakah ada cara untuk melakukan ini, untuk membantu pemilik proyek menjaga halaman Isu mereka bersih dan menghindari duplikasi?

Sunting : Untuk memperjelas, saya tahu bahwa membuat permintaan tarik selalu menciptakan masalah baru . Saya ingin melampirkan permintaan tarik ke masalah yang ada .

MatrixFrog
sumber
1
Saya percaya jawaban saya mengungkapkan fakta bahwa fitur yang Anda inginkan ("lampirkan permintaan tarik untuk masalah yang ada ") mungkin belum ada di sana.
VonC
Memang (dan itu sebenarnya dikonfirmasi oleh tweet ini ), tetapi juga membuat saya menyadari pertanyaan saya bisa lebih jelas.
MatrixFrog
Saya harap fitur itu tinggi pada daftar prioritas github, karena kode yang disandang di luar sana akan menyukainya!
flq
2
Jawaban yang benar harus diubah menjadi masukomi's, sekarang metode "perbaikan # 1" tersedia. Tidak perlu melalui API.
Edward Anderson
Saya masih tidak dapat menemukan cara untuk melampirkan permintaan tarik ke masalah yang ada. Apakah saya melewatkan sesuatu? Jawaban di utas ini tampaknya menunjukkan kemampuan ini memang ada, tetapi saya tidak dapat menemukannya (selalu membuat masalah baru).
Kevin Jalbert

Jawaban:

245

Proyek "hub" dapat melakukan ini:

https://github.com/defunkt/hub

Di repositori dan cabang tempat Anda ingin mengirim permintaan tarik dari:

$ hub pull-request -i 4

Ini menggunakan API GitHub, dan melampirkan permintaan tarik untuk cabang saat ini ke nomor edisi 4 yang ada.


EDIT: Komentar oleh @atomicules: Untuk memperluas jawaban dengan @MichaelMior contoh lengkapnya adalah:

$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
Christian Oudard
sumber
12
brew install hubmenginstal dengan homebrew
gcamp
11
Ini tidak berhasil untuk saya. Mengatakan Kesalahan saat membuat permintaan tarik: Entitas yang tidak dapat diproses (HTTP 422)
Rubycut
11
@Rubycut saya punya masalah yang sama. Sebaliknya saya lakukan hub pull-request URL_TO_ISSUE, maka itu berhasil bagi saya. Saya ingin tahu apakah -i ISSUE_NUMBERhanya berfungsi jika masalahnya ada di repositori yang sama (yaitu, bukan garpu)
Michael Mior
30
Untuk memperluas jawaban oleh @MichaelMior contoh lengkapnya adalah:hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
atomik
4
Perhatikan ini hanya berfungsi pada masalah yang Anda buat: github.com/defunkt/hub/issues/189#issuecomment-6353354
Zach
237

Menambahkan permintaan tarik ke masalah hulu yang ada adalah mudah dengan asumsi Anda melakukan forked menggunakan cara github normal .

Cukup referensi masalah dalam pesan komit Anda menggunakan salah satu kata kunci yang didukung :

  • Menutup
  • menutup
  • Tutup
  • memperbaiki
  • perbaikan
  • tetap
  • menyelesaikan
  • menyelesaikan
  • terselesaikan

Misalnya: "komit ini memperbaiki # 116"

Teks yang merujuk masalah tidak perlu muncul di baris subjek komit Anda.

Dorong komit Anda ke repo github Anda dan permintaan tarik akan ditambahkan secara otomatis ke masalah ini.

Catatan: Meskipun tidak diperlukan, Anda sangat disarankan untuk melakukan apa pun yang akan menjadi bagian dari permintaan tarikan ke cabang terpisah khusus untuk masalah itu, karena komitmen di masa depan pada cabang itu akan ditambahkan ke permintaan tarikan (otomatis oleh github ). Jadi, jika Anda tidak membuat cabang terpisah, meninggalkannya di master, dan kemudian terus berkembang, maka semua komitmen Anda yang tidak terkait untuk menguasai akan ditambahkan ke permintaan tarik Anda.

masukomi
sumber
31
"sangat disarankan agar Anda melakukan apa pun yang akan menjadi bagian dari permintaan tarik ke cabang terpisah khusus untuk masalah itu, karena komitmen di masa depan pada cabang itu akan ditambahkan ke permintaan tarik" - poin yang sangat bagus. Itu terjadi pada saya sekali dan itu cukup mengejutkan.
MatrixFrog
9
Sayangnya, ini tidak memecahkan masalah mengubah masalah menjadi permintaan tarik. Setiap diskusi yang ada dalam masalah ini tidak dapat ditransfer ke permintaan tarik ... yang sangat disayangkan untuk beberapa kasus penggunaan. Saya berharap Github hanya akan memberikan kontrol granular atas bagaimana pull-reqs bekerja di pengaturan repo.
Alex Waters
1
@masukomi Permintaan tarik lebih mudah diselesaikan oleh pengelola proyek - mereka dapat menerima dan menggabungkan perubahan dengan mengklik tombol. Untuk menarik perubahan pada garpu tanpa menggunakan permintaan tarik, Anda harus menambahkan garpu itu sebagai remote, mengambil perubahannya, dan menggabungkannya sendiri.
Rory O'Kane
2
Saya pikir Anda melewatkan poin saya Rory. Jika Anda membuat permintaan tarik dan menyebutkannya dalam masalah (seperti yang saya sarankan), maka keduanya terhubung, dan Anda masih dapat mengklik tombol untuk mendapatkan perubahan.
masukomi
2
Ini tidak membantu ketika permintaan tarik adalah hal yang sedang berlangsung. Alur kerja kami adalah membuat masalah untuk ide, dan kemudian menarik permintaan dari cabang fitur setelah kami mulai mengerjakan ide-ide itu. Menutup masalah menggunakan komit dalam permintaan tarikan berarti kita kehilangan diskusi sebelumnya yang berisi masalah tersebut, yang sering kali mencakup menghilangkan fitur apa pun / memperbaiki / memperbaiki alamat masalah. Apa yang benar-benar dibutuhkan adalah cara untuk langsung mengubah masalah menjadi permintaan tarik begitu pekerjaan pada masalah telah dimulai.
Daniel Bingham
144

Anda dapat membuat Permintaan Tarik dari Masalah yang ada dengan API Permintaan Tarik :

$ curl --user "smparkes" \
       --request POST \
       --data '{"issue": 15, "head": "smparkes:synchrony", "base": "master"}' \
       https://api.github.com/repos/technoweenie/faraday/pulls

Ini menciptakan permintaan tarik:

  • meminta technoweeniedi proyek faraday(https://api.github.com/repos/ technoweenie / Faraday / tarikan)
  • untuk tarik dari synchronycabang di smparkes'fork ( 'kepala': ' smparkes : sinkron ')
  • ke mastercabang dalam technoweeniegarpu ("base": " master ")
  • dan lampirkan permintaan tarik ke edisi 15 ("masalah": 15 )
  • dengan penulis permintaan tarik smparkes( --user " smparkes ")
  • Anda akan dimintai kata sandi GitHub Anda
Rory O'Kane
sumber
1
Saya menyalin beberapa kode contoh dari tautan itu. Semoga Anda tidak keberatan, dan tolong beri tahu saya jika saya salah menerjemahkannya!
MatrixFrog
3
Anda juga perlu otentikasi, tambahkan ini ke perintah di atas: -u "login: password"
morgoth
2
Saya hanya ingin menambahkan bahwa metode ini masih berfungsi, tetapi mungkin memiliki efek samping dari daftar komit Anda dua kali di halaman diskusi, jika GitHub telah mengambilnya secara implisit dari masalah # dalam pesannya ( contoh ). Komit hanya muncul sekali pada permintaan tarik resmi.
Greg Haskins
3
Bisakah ini diperbarui ke API v3? GitHub baru saja mematikan API v2.
Michael Best
1
@rsanchezsaez Seperti yang saya katakan dalam jawaban saya , ubah --user "smparkes:password"untuk --user "smparkes"diminta kata sandi Anda secara interaktif.
Rory O'Kane
10

Jawaban lain ini menjelaskan cara menggunakan cURL ( curl) untuk membuat Permintaan Tarik dari Masalah melalui API GitHub . Berikut cara melakukannya menggunakan HTTPie ( http), yang menghasilkan perintah yang lebih mudah dibaca dan lebih mudah diedit:

$ http --auth "<your-GitHub-username>" \
       POST \
       https://api.github.com/repos/<issue-repo-owner>/<issue-repo-name>/pulls \
       issue=<issue-number> head=<your-GitHub-username>:<your-fork-branch-name> base=<issue-repo-branch-name>

Kemudian ketikkan kata sandi GitHub Anda saat diminta.

Contoh yang dijelaskan

Anda telah masuk ke GitHub dengan nama pengguna smparkes dan pemburu kata sandi2 . Anda melihat technoweenie ‘s repo faraday , memikirkan sesuatu yang harus diubah, dan membuat Isu repo yang untuk itu, Issue # 15 . Kemudian, Anda menemukan bahwa tidak ada orang lain yang membuat perubahan yang Anda usulkan, dan Anda juga punya waktu untuk melakukannya sendiri. Anda membayar faraday ke akun Anda sendiri , lalu menulis perubahan Anda dan mendorongnya ke garpu Anda di bawah cabang bernama syncy . Anda pikir technoweenie harus menarik perubahan itu ke tuancabang dari repo-nya. Ini adalah perintah yang akan Anda tulis untuk mengubah Masalah Anda sebelumnya menjadi Permintaan Tarik untuk situasi ini:

$ http --auth "smparkes" \
       POST \
       https://api.github.com/repos/technoweenie/faraday/pulls \
       issue=15 head=smparkes:synchrony base=master
http: password for [email protected]: hunter2

Sekarang Masalah # 15 adalah Permintaan Tarik.

Rory O'Kane
sumber
3

jika Anda menggunakan 2-faktor-auth dengan github Anda harus memberikan tajuk authtoken sebagai permintaan:

curl -u "<your_username>:<your_pw>" \
     --header 'X-GitHub-OTP: <your_authtoken>' \
     --request POST \
     --data '{"issue":"<issue_nr>", "head":"<your_username>:<your_forks_branchname>", "base":"<upstream_branch>"}' \
     https://api.github.com/repos/<upstream_user>/<upstream_repo>/pulls
Jörn Hees
sumber
1
Ya, 2FA mencegah banyak jawaban di sini dari bekerja. Dalam kasus saya, saya membuat token akses pribadi dan menggunakannya daripada kata sandi saya, yang berfungsi.
berto
1

Anda juga dapat menggunakan Gub untuk mengirim permintaan tarik untuk masalah Anda.

Ini juga membantu Anda menggunakan gaya fork / pull-request yang tepat.

Edit: 10/5/2013

Untuk meminta Gub mengirimkan permintaan tarik untuk masalah # 123, Anda harus menjalankan yang berikut:

$ gub start 123

Ini akan membuat masalah cabang baru-123. Setelah Anda selesai menangani masalah ini, jalankan:

$ gub finish

Voila!

Catatan: Saya adalah penulis permata Gub.

Omar Ali
sumber
1

Alih-alih melakukan itu di sisi klien (dengan hub, seperti pada jawaban Christian Oudard ), Anda sekarang (Februari 2020) dapat melakukannya di sisi server (github.com)

Lihat " Lihat dan tautkan masalah dan tarik permintaan dari bilah samping "

Anda sekarang dapat menautkan masalah dan menarik permintaan melalui bilah sisi di halaman masing-masing. Koneksi yang dibuat di sini akan secara otomatis menutup masalah setelah permintaan tarik yang terhubung digabungkan.

Dokumentasi :https://help.github.com/assets/images/help/pull_requests/link-issue-drop-down.png

Dan ada API pencarian dengan fitur itu.

Temukan semua masalah terbuka di repositori yang memiliki referensi permintaan tarik penutup dengan linked:prkualifikasi pencarian.
Demikian pula, cari semua permintaan tarik dalam repositori yang tidak memiliki masalah pendukung -linked:issue.

VONC
sumber
0

Menggunakan alat git-hub , Anda bisa melakukan ini dengan:

$> git hub pull attach 123

Ini akan mengubah masalah # 123 menjadi permintaan tarik # 123, sehingga mempertahankan semua diskusi tentang masalah ini di satu lokasi.

Gautam
sumber
0

Jika Anda telah mengaktifkan 2FA, Anda dapat menggunakan pass token dengan HTTPie:

http POST \
    https://api.github.com/repos/<repo-owner>/<repo-name>/pulls \
    issue=2 head=issue_2 base=master
    "Authorization:token PUTAUTHTOKENHERE"

Ini akan menggunakan cabang issue_2untuk mengubah masalah # 2 menjadi permintaan tarik.

Kyle Gibson
sumber