Bagaimana mencegah Magit bertanya ke mana harus mendorong cabang?

10

Saat menelepon magit-push-currentdengan P Pdari buffer status, Magit 2.1.0tanyakan kepada saya di mana harus mendorong cabang saat pertama kali, ketika upstream tidak diatur.

Bagaimana ia bisa secara otomatis menghasilkan nama seperti dulu?

z1naOK9nu8iY5A
sumber
2
Jika Anda tidak tahu, nama yang dibuat secara otomatis adalah salah satu opsi penyelesaian. Jadi, saat pertama kali Anda mendorong some-branch-nameke originremote, Anda mungkin bisa mengetik o TAB s TABdan Anda akan mendapatkan nama yang Anda inginkan.
Malabarba
Oh ok saya tidak tahu, terima kasih. Masalahnya adalah bahwa saya memiliki banyak cabang dimulai dengan awalan yang sama, yang tidak terlalu berguna, juga saya selalu memakai cabang yang jauh dengan nama yang sama dengan cabang lokal.
z1naOK9nu8iY5A

Jawaban:

8

Pembaruan: "cabang push" yang disebutkan di bawah ini telah dilaksanakan sekarang. Lihat dokumentasi tentang percabangan untuk informasi lebih lanjut.

Anda harus mengatur cabang hulu sekali. Setelah Anda melakukan itu P Pdorongan itu dan Anda akan mendapatkan daftar perubahan unpulled dan unpushed di buffer Status (disediakan ada).

Ada berbagai cara untuk mengatur cabang hulu. Anda bisa menggunakan --set-upstreamberalih dari dorongan popup: P -u P. Atau menggunakan perintah yang menetapkan hulu dan tidak ada yang lain: b u.

Juga Magit sekarang secara otomatis mengatur cabang hulu ketika membuat cabang baru, asalkan "titik awal" adalah nama cabang. Ini berfungsi untuk "upstreams" lokal dan jarak jauh. Tetapi perhatikan bahwa jika Anda memilih cabang lokal sebagai titik awal, maka itu tidak akan membantu Anda mendorong. Mendorong dari repositori saat ini ke repositori saat ini jelas tidak masuk akal, dan tidak diizinkan.

Jadi ketika cabang "hulu" sebenarnya merupakan cabang lokal lain, maka P Pberperilaku seolah-olah tidak ada cabang hulu yang dikonfigurasi, dan berperilaku persis seperti P e. Hal yang sama terjadi jika tidak ada hulu yang dikonfigurasi sama sekali.

Ini karena keterbatasan dalam Git: seseorang hanya dapat mengaitkan satu cabang lain dengan beberapa cabang, dan cabang itu kemudian disebut "cabang hulu". Akan lebih baik jika setidaknya ada cabang "hulu" dan "terbitkan". Saya bermaksud mengimplementasikannya di Magit pada akhirnya. Lihat edisi # 1485 .

Jadi, jika Anda ingin dapat mendorong dengan tepat P Pmaka cabang "hulu" harus mis. "Asal / master", bukan "master".


Saya sedang mempertimbangkan untuk menambahkan varian push yang selalu berjalan git pushtanpa ada argumen. Apa yang dilakukan kemudian akan bergantung secara eksklusif pada konfigurasi Git.

tarsius
sumber
Saya bercabang dari masterdan itu tidak mengatur hulu, haruskah saya bercabang dari origin/masteruntuk memiliki hulu otomatis diatur?
z1naOK9nu8iY5A
Lihat jawaban yang diperbarui.
tarsius
1
Bercabang dari origin/masterditetapkan origin/mastersebagai hulu, tetapi saya diharapkan memiliki origin/branch-namehulu.
z1naOK9nu8iY5A
Jika itu yang Anda inginkan maka yang terbaik adalah melakukannya saat push. P -p P <... completion ...> RETCatatan yang origin/branch-nameditawarkan sebagai kandidat penyelesaian, jadi Anda tidak perlu mengetiknya.
tarsius
2
Ini menyakitkan ketika Anda menggunakan gitflow dan menarik permintaan untuk tinjauan kode, dengan cabang per fitur, karena Anda biasanya hanya sekali menekan, dan selalu membuat cabang jauh dengan nama yang sama dengan cabang lokal. Mendorong ke cabang bernama berbeda akan berakhir menjalankan review kode.
Barry Kelly
3

Saya menggunakan saran berikut yang secara otomatis memungkinkan --set-upstreamketika cabang saat ini belum memiliki upstream:

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

Dikombinasikan dengan penyelesaian ido ini memungkinkan mendorong cabang baru dengan P P RET:

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)
npostavs
sumber
Ini sangat keren! Terima kasih banyak!
z1naOK9nu8iY5A
0

Saya baru saja membuat cabang baru dengan b cdan kemudian mengedit .git/configfile untuk menunjuk origin/branchdaripada melihat-lihat dengan semua hal 2 magit, yang sepertinya tidak berhasil.

Perubahan:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

Untuk

[branch "fix_something"]
  remote = origin
  merge = refs/heads/fix_something

Ini berfungsi, sedangkan saya masih belum menemukan kombinasi kunci di magit2 yang mencapai hal yang sama. Mencoba mengatur jarak jauh tidak berfungsi karena belum ada di tempat asalnya.

David N. Welton
sumber
1
Hulu dapat diatur menggunakan bu. Tapi itu menggunakan git branch --set-upstream-todan seperti yang Anda ketahui, Git tidak dapat menetapkan cabang yang tidak ada sebagai upstream dan Magit juga tidak bisa.
tarsius
@tarsius magit 1 sepertinya melakukan apa yang saya butuhkan. Saya hanya mencoba untuk mendapatkan kembali kemiripan alur kerja itu.
David N. Welton