Mercurial (hg) hanya melakukan file tertentu

119

Saya mencoba melakukan hanya file tertentu dengan Mercurial. Karena hg memiliki penambahan otomatis setiap kali saya mencoba melakukan perubahan, ia ingin memasukkan semua file. Tetapi saya tidak menginginkannya karena file tertentu belum "siap".

Ada

hg commit -I thefile.foo

tapi ini hanya untuk satu file. Cara yang lebih baik bagi saya adalah jika saya dapat mematikan penambahan otomatis seperti di Git. Apakah ini mungkin?

Praveen Kumar Purushothaman
sumber
5
menggunakan ekstensi rekaman? atau Anda dapat menentukan file pada baris perintahhg ci foo bar baz
tonfa
4
@tonfa, kirim ulang komentar Anda sebagai jawaban
Andrei Dziahel
Harap jangan merusak postingan Anda.
Glorfindel
Mengapa Anda merusak pertanyaan yang bagus, Bung?
Praveen Kumar Purushothaman

Jawaban:

155

Anda dapat menentukan file di baris perintah, seperti yang ditulis tonfa:

$ hg commit foo.c foo.h dir/

Itu berhasil dan itulah yang saya lakukan sepanjang waktu. Anda juga dapat menggunakan --includebendera yang Anda temukan, dan Anda dapat menggunakannya beberapa kali seperti ini:

$ hg commit -I foo.c -I "**/*.h"

Anda bahkan dapat menggunakan kumpulan file untuk memilih file yang ingin Anda komit:

$ hg commit "set:size(1k - 1MB) and not binary()"

Tidak ada pengaturan yang akan menonaktifkan perilaku penambahan otomatis dan membuat Mercurial berfungsi seperti yang dilakukan Git. Namun, ekstensi mq mungkin menarik. Itu ekstensi lanjutan, tetapi memungkinkan Anda melakukannya

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

Saya sendiri tidak benar-benar menggunakan MQ untuk tujuan ini, karena saya pikir itu cukup hanya dengan menentukan nama file pada baris perintah.

Martin Geisler
sumber
Apa perilaku "perilaku tambahkan otomatis"? Apakah hg biasa menambahkan file secara otomatis? Karena sekarang Anda harus melakukannya secara eksplisit atau mereka tidak akan terlacak.
mpen
1
@mpen Saya pikir maksudnya bagaimana gh secara otomatis menambahkan setiap file yang dimodifikasi ke komit, tidak seperti git di mana Anda harus menambahkan file yang dimodifikasi secara manual ke komit berikutnya, dan dapat membiarkan beberapa file yang dimodifikasi tidak terikat
simpleuser
24

Jika Anda ingin mengkomit beberapa file, dan mengecualikan banyak file lainnya, daftarkan secara eksplisit file yang ingin Anda komit. -Ihanya diperlukan jika Anda ingin menggunakan pola, bukan file.

Jika Anda ingin mengkomit banyak file, dan mengecualikan hanya beberapa file, menggunakan -Xlebih nyaman.

Misalnya, dalam repositori yang berisi "file_1", "file_2" dan "file_3", berikut ini adalah padanan, tetapi yang terakhir lebih mudah / lebih cepat untuk mengetik:

hg commit file_1 file_2
hg commit -X file_3
Rob W.
sumber
8

Mulai 3.8 Anda juga dapat menggunakan hg commit --interactiveuntuk memilih file (sebelum 3.8 Anda dapat menggunakan ekstensi crecord untuk fungsionalitas serupa). The --interactive(atau hanya -i) bendera akan menyebabkan hg untuk meminta Anda untuk file yang ingin Anda sertakan dalam komit. Sebagai bonus tambahan, Anda bahkan dapat menyertakan / mengecualikan potongan di dalam file.

Berikut adalah contoh tampilan antarmuka. Perhatikan ini adalah tangkapan layar lama (dari crecord sebenarnya) jadi antarmuka telah sedikit berubah (tetapi dasarnya sama). tangkapan layar crecord

Catatan untuk mendapatkan antarmuka itu Anda perlu mengaktifkan antarmuka kutukan. Anda dapat melakukannya untuk proses tunggal dengan hg commit --config ui.interface=curses --interactiveatau secara umum dengan menambahkan yang berikut ini ke .hgrc:

[ui]
interface = curses
studgeek
sumber