Ketika saya git merge cabang di cabang lain, saya suka meneruskan opsi --edit --log. Saya ingin membuatnya otomatis, tetapi tidak bisa mendapatkan caranya.

Apa yang saya coba:

Setel bagian [merge] dari .gitconfig global saya

[merge]
    edit = true
    log = 20

Git merge tidak mengubah perilaku defaultnya.

Catatan: Saya yakin opsi tersebut tidak tersedia untuk file konfigurasi karena saya tidak dapat melihatnya di output git help -c | grep merge

Buat alias merge

Jika saya mendefinisikan alias saya dengan cara pertama:

[alias]
    merge = merge --edit --log

Atau yang kedua:

[alias]
    merge = "! git merge $* --edit --log #"

Maka saya tidak dapat melihat perubahan apa pun dalam perilaku git.

Jika saya memanggil alias saya apa pun yang merge, maka itu berfungsi seperti yang diharapkan (menambahkan opsi edit dan log).


Jadi, apakah ada solusi untuk membuat git merge menggunakan --edit --log secara default?

0
Simpom 11 Mei 2021, 13:40

1 menjawab

Jawaban Terbaik

Seperti yang disebutkan orang lain dalam komentar, jika Anda memberi nama alias merge, Git sepenuhnya mengabaikannya. Yaitu, diberikan:

[alias]
    merge = foo
    marge = foo

Menjalankan git merge menjalankan git merge standar, tetapi menjalankan git marge memberi Anda kesalahan tentang git foo bukan merupakan perintah Git (dengan asumsi Anda belum menjadikan diri Anda sendiri git-foo perintah, tentu saja).

Ini berlaku untuk semua perintah Git standar.


Tidak ada setelan merge.edit. Atau—secara setara—Anda dapat menyetel merge.edit ke apa pun yang Anda suka,1 tetapi git merge tidak pernah memeriksa setelan sehingga tidak ada bedanya.

ada setelan merge.log. Ini default ke false, yaitu, jika Anda belum menyetelnya, atau jika Anda menyetelnya ke false, git merge berperilaku seperti yang dilakukannya secara default. Menyetelnya ke true memiliki efek yang sama seperti menyetelnya ke angka 20.

Default untuk git merge adalah --edit kecuali jika pesan gabungan ditentukan dengan -m atau -F. Jika Anda menggunakan penggabungan yang dijalankan oleh git pull, tindakan --edit juga merupakan default.

Satu kasus khusus di mana merge.log tidak berpengaruh adalah maju cepat, yang sama sekali bukan gabungan.2 Karena tidak ada komit baru yang dibuat oleh tindakan maju cepat, tidak ada tempat untuk meletakkan pesan apa pun, jadi merge.log juga diabaikan.

Semua ini khusus untuk baris perintah seperti yang diterapkan oleh Git itu sendiri. Jika Anda menggunakan perangkat lunak lain (mis., Eclipse), perangkat lunak lain itu mungkin memiliki implementasinya sendiri dan mungkin mengabaikan cara Git melakukan sesuatu.


1

Dokumentasi git config seharusnya memiliki daftar utama semua setelan yang bermakna untuk semua perintah Git. Perhatikan bahwa terkadang hal-hal tergelincir: misalnya, log.decorate dapat diatur ke auto, dan ini berlaku untuk waktu yang lama tetapi tidak didokumentasikan hingga Git 2.9.0.

2Saya pikir agak disayangkan bahwa Git menyebut ini sebagai gabungan maju cepat di beberapa tempat.

1
torek 12 Mei 2021, 00:48