Apa perbedaan antara hg lupa dan hg hapus?

313

Saya ingin mercurial menghapus beberapa file dari kondisi repositori saat ini. Namun, saya ingin file ada di riwayat sebelumnya.

Bagaimana forgetdan removeberbeda, dan dapatkah mereka melakukan apa yang saya inginkan?

Paul Nathan
sumber
27
Jangan khawatir, Anda tidak dapat menghapus file dari riwayat sebelumnya di Mercurial - riwayat umumnya tidak dapat diubah kecuali Anda mulai menggunakan ekstensi.
Martin Geisler

Jawaban:

348

' hg forget' hanya singkatan untuk ' hg remove -Af'. Dari bantuan ' hg remove':

... dan -Af dapat digunakan untuk menghapus file dari revisi berikutnya tanpa menghapusnya dari direktori kerja.

Intinya: ' remove' menghapus file dari copy pekerjaan Anda pada disk (kecuali Anda menggunakan -Af) dan ' forget' tidak.

Ry4an Brase
sumber
7
"hg forget" diperkenalkan kembali di Mercurial 1.3 sebagai cara yang lebih mudah untuk melakukan "hg remove -Af". Ini menjadwalkan file untuk dihapus tanpa menghapusnya dari copy pekerjaan.
Martin Geisler
5
Senang mendengarnya. 'remove -Af' (dan seluruh tabel opsi pada halaman bantuan 'hapus') adalah / kegilaan.
Ry4an Brase
32
@ Ry4an: Serius, itu konyol. Saya berkontribusi tambalan yang diperkenalkan kembali 'lupa'. Ketika saya membuatnya saya menyadari bahwa -Af masuk akal dalam kode tetapi dari pandangan pengguna itu benar-benar konyol.
Steve Losh
10
Heh, itulah yang hebat tentang lincah - orang-orang aktif dan berulang memikirkan apa yang masuk akal dari sudut pandang pengguna. Terima kasih telah memperbaikinya.
Ry4an Brase
9
File konfigurasi pembuatan lokal atau sejenisnya? Jalur ke alat lokal yang berbeda dari sistem ke sistem? Sengaja menambahkan file log yang tidak Anda inginkan dalam kontrol sumber, tetapi ingin menyimpan? Saya kira itu terjadi.
Ry4an Brase
42

Cara terbaik untuk menempatkan adalah bahwa hg forgetadalah identik untuk hg remove kecuali bahwa ia meninggalkan file di belakang dalam Anda copy pekerjaan. File-file tersebut ditinggalkan sebagai file yang tidak terlacak dan sekarang dapat secara opsional diabaikan dengan pola masuk .hgignore.

Dengan kata lain, saya tidak tahu apakah Anda menggunakan hg forgetatau hg removekapan saya menarik dari Anda. Sebuah file yang Anda berlari hg forgetpada akan dihapus ketika saya update ke changeset itu - sama seperti jika Anda telah menggunakan hg removesebagai gantinya.

Martin Geisler
sumber
27

Dari dokumentasi, Anda dapat menggunakan perintah untuk menyimpan file dalam sejarah proyek. Sepertinya Anda ingin menghapus, karena itu juga menghapus file dari direktori kerja.

Dari buku Mercurial di http://hgbook.red-bean.com/read/ :

Menghapus file tidak memengaruhi riwayatnya. Penting untuk dipahami bahwa menghapus file hanya memiliki dua efek. Ini menghapus versi file saat ini dari direktori kerja. Itu berhenti Mercurial dari melacak perubahan ke file, dari saat komit berikutnya. Menghapus file tidak mengubah riwayat file dengan cara apa pun.

Halaman manual hg (1) mengatakan ini tentang lupa:

Tandai file yang ditentukan sehingga tidak akan lagi dilacak setelah komit berikutnya. Ini hanya menghapus file dari cabang saat ini, bukan dari seluruh sejarah proyek, dan itu tidak menghapusnya dari direktori kerja.

Dan ini tentang hapus:

Jadwalkan file yang ditunjukkan untuk dihapus dari repositori. Ini hanya menghapus file dari cabang saat ini, bukan dari seluruh sejarah proyek.

Jason Catena
sumber
3

Jika Anda menggunakan "hg remove b"terhadap file dengan status "A", yang berarti telah ditambahkan tetapi tidak dilakukan, Mercurial akan merespons:

  not removing b: file has been marked for add (use forget to undo)

Tanggapan ini adalah penjelasan yang sangat jelas tentang perbedaan antara menghapus dan melupakan.

Pemahaman saya adalah bahwa "hg forget"untuk membatalkan file yang ditambahkan tetapi tidak dilakukan sehingga tidak dilacak oleh kontrol versi; sementara"hg remove" untuk mengambil file yang berkomitmen dari kontrol versi.

Utas ini memiliki contoh untuk digunakan hg removemelawan file dengan 7 jenis status berbeda.

gm2008
sumber
2

Sebuah file dapat dilacak atau tidak, Anda menggunakan hg add untuk melacak file dan hg menghapus atau hg lupa untuk tidak melacaknya. Menggunakan hg menghapus tanpa flag akan menghapus file dan menghapusnya, hg lupa hanya akan menghapusnya tanpa menghapusnya.

Tao
sumber
3
Saya tidak tahu mengapa Anda merasa perlu menambahkan kutipan ini ketika pria itu sendiri sudah ikut, tapi hei, apa pun yang mengapung perahu Anda.
Nathan Tuggy