Bagaimana saya bisa menjaga garpu saya tetap sinkron tanpa menambahkan remote yang terpisah?

302

Mari kita asumsikan ada repositori someone/foobardi GitHub, yang saya inginkan me/foobar.

Bagaimana cara menarik komit baru dari repositori induk langsung ke garpu saya , tanpa harus menambahkan remote yang terpisah dan ingat untuk menarik secara teratur dari sana ?

Tujuannya adalah untuk:

  • git pull untuk mengambil dari repositori induk
  • git push untuk mengirim semuanya ke garpu saya
1ace
sumber
26
Jawaban mengejutkan oleh @Olufemi tampaknya melakukan apa yang Anda inginkan, kecuali bahwa ketika ChristianGosch mencatat dalam komentar, Anda berakhir dengan "menggabungkan komitmen" di atas cabang Anda, dan "tidak ada yang bisa dibandingkan" tidak akan muncul. Hal itu tampaknya tidak dapat diterima oleh banyak proyek yang ingin Anda cabut. Jadi apakah benar-benar tidak ada cara untuk melakukan alur kerja kontributor paling dasar ini di github tanpa menjalankan perintah arcane git di komputer pribadi? Atau mungkin saya harus membuang seluruh repo dan bercabang ulang setiap kali saya ingin berkontribusi ??
nealmcb
Kemungkinan duplikat github, perbarui proyek bercabang
mpromonet
Kemungkinan duplikat dari Bagaimana cara memperbarui repositori bercabang GitHub?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
@nealmcb Bukankah masalah dengan "komit gabungan" di atas cabang Anda dihindari jika Anda rebase?
Marko

Jawaban:

586

Buka repositori Git bercabang saya / foobar .

Klik Bandingkan :

Berikut adalah contoh gambar halaman tersebut

Anda akan mendapatkan notifikasi:

Tidak ada yang bisa dibandingkan.
seseorang: master terkini dengan semua komitmen dari saya: master . Coba ganti pangkalan untuk perbandingan Anda.

Klik untuk beralih basis di halaman ini:

Berikut ini adalah contoh di halaman

Kemudian Anda bisa melihat semua komit dibuat untuk seseorang / foobar setelah hari Anda bercabang itu.

Klik pada Buat permintaan tarik :

Ini adalah halaman contoh

Berikan judul permintaan tarik dan mungkin deskripsi dan klik Buat permintaan tarik .

Di halaman berikutnya, gulir ke bagian bawah halaman dan klik Gabungkan permintaan tarik dan Konfirmasi penggabungan .

Git Anda repositori saya / foobar akan diperbarui.

Sunting: opsi rebase ditampilkan di sini:

masukkan deskripsi gambar di sini

Olufemi Israel Olanipekun
sumber
50
Ini membingungkan karena ketika Anda mengganti basis, github akan melempar Anda ke halaman untuk repo asli, jadi sepertinya Anda membuka permintaan tarik di garpu hulu. Tapi itu benar-benar berhasil.
Eduardo
8
Untuk menghindari situasi membingungkan yang disebutkan di atas, lebih baik klik Edittombol dan secara manual beralih base forkke me/foobardan head forkke someone/foobar. Dengan cara ini jauh lebih jelas
macemers
26
Yang lain: Ini berfungsi dengan baik jika Anda belum melakukannya sebelumnya, tetapi setelah itu ada "gabungan komit" di atas sejarah komit Anda. Jadi "tidak ada yang bisa dibandingkan" tidak akan muncul. Sebagai gantinya, seseorang harus menggunakan tombol "Edit" dan secara manual menukar basis dan garpu agar ini berfungsi.
Christian Gosch
26
Apakah tidak ada cara untuk menyingkirkan komit gabungan konyol itu?
kumarharsh
17
@kumar_harsh sejak September 2016 , sekarang ada opsi "rebase dan gabungan" untuk permintaan tarik yang menghindari komit gabungan.
waldyrious
41
git remote set-url origin [email protected]:someone/foobar
git remote set-url origin --push [email protected]:me/foobar

Namun ada satu peringatan:
Ini sempurna jika Anda adalah satu-satunya yang melakukan perubahan pada garpu Anda.
Namun, jika dibagikan dengan orang lain, Anda mungkin harus menarik dari garpu Anda, dalam hal ini remote yang terpisah adalah satu-satunya solusi.

Sunting:
Sebenarnya, Anda bisa git pull [email protected]:me/foobar , yang menghilangkan peringatan.
Pilihan ada di tangan Anda yang lebih mudah diingat.

1ace
sumber
8

Saya menggunakan metode yang cukup sederhana menggunakan GitHub Web UI untuk melakukan itu:

  1. Buka repositori Git asli (bukan repositori Git bercabang dua me/foobar)
  2. Langsung ke folder src, dan buka file yang ingin Anda ubah
  3. Klik ikon pena. Ini akan secara otomatis membuat label di garpu pribadi Anda bernama "patch-1" berdasarkan versi repositori master saat ini: Masukkan deskripsi gambar di sini
  4. Nikmati! Masukkan deskripsi gambar di sini
Nadir
sumber
3
Mencoba ini, pada dasarnya membuka editor pada file dalam repo git asli. Saya tidak punya hak istimewa menulis (dengan desain) ke git repo asli. Tampaknya untuk metode ini Anda harus mengubah file, jika tidak, tidak ada cara untuk "menyimpan" file. Tanpa menyimpan file, saya tidak bisa mendapatkan yang setara dengan cabang "patch-1" untuk muncul di repositori bercabang saya. Apa yang kulewatkan di sini?
Electro-Bunny
5

Aplikasi "Tarik" adalah solusi pengaturan-dan-lupa otomatis. Ini akan menyinkronkan cabang default dari garpu Anda dengan repositori hulu.

Kunjungi URL, klik tombol hijau "Instal" dan pilih repositori tempat Anda ingin mengaktifkan sinkronisasi otomatis.

Cabang diperbarui sekali per jam langsung di GitHub, pada mesin lokal Anda, Anda perlu menarik cabang master untuk memastikan bahwa salinan lokal Anda sinkron.

Juga dijawab di https://stackoverflow.com/a/58965171/946850 .

krlmlr
sumber
1

Pilihan lain adalah menggunakan Update from upstreamRepoName/mastertombol di GitHub untuk Mac (dan saya berasumsi GitHub untuk Windows).

Masukkan deskripsi gambar di sini

Steve Moser
sumber
TIL: bahwa ada aplikasi untuk GitHub di luar antarmuka web :-) [dan itu memalukan bahwa pengalaman di antara mereka tidak disatukan]
Tom Goodfellow
Saya tidak melihat ini di Windows
Denis
1
@Denis ini adalah aplikasi lama mereka. Saya tidak yakin aplikasi baru mereka memilikinya.
Steve Moser
Aha. Ini bekerja di "GitHub Desktop" (untuk Mac, tidak yakin tentang Windows).
michaelok
0

Saya tidak tahu bagaimana hal itu dapat dilakukan tanpa menambahkan remote lain, namun saya selalu menambahkan repo yang saya gunakan sebagai upstreamremote sehingga saya bisa melakukannya:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

Ini akan menyinkronkan semua cabang termasuk membuat yang baru (hapus refs/heads/untuk hanya memperbarui cabang yang ada). Jika ada cabang Anda yang menyimpang maka akan menimbulkan kesalahan untuk cabang itu.

Thomas Guyot-Sionnest
sumber