Saya ingin mercurial menghapus beberapa file dari kondisi repositori saat ini. Namun, saya ingin file ada di riwayat sebelumnya.
Bagaimana forget
dan remove
berbeda, dan dapatkah mereka melakukan apa yang saya inginkan?
Saya ingin mercurial menghapus beberapa file dari kondisi repositori saat ini. Namun, saya ingin file ada di riwayat sebelumnya.
Bagaimana forget
dan remove
berbeda, dan dapatkah mereka melakukan apa yang saya inginkan?
Jawaban:
' 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.
Cara terbaik untuk menempatkan adalah bahwa hg forget
adalah 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 forget
atau hg remove
kapan saya menarik dari Anda. Sebuah file yang Anda berlari hg forget
pada akan dihapus ketika saya update ke changeset itu - sama seperti jika Anda telah menggunakan hg remove
sebagai gantinya.
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.
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 remove
melawan file dengan 7 jenis status berbeda.
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.