Bagaimana cara mendapatkan versi file tertentu di Mercurial?

114

Saya baru mengenal Mercurial. Tidak dapat menemukan perintah yang benar. Mencoba update / checkout tidak berhasil. Saya menggunakan repositori lokal. Terima kasih

Kodisme
sumber
@Omnifarious: Saya menggunakan versi file yang stabil. Kemudian terus mengerjakan file tersebut tetapi segera saya menyadari bahwa saya memerlukan versi "bagus" terakhir. Ini dapat dilakukan dengan memperbarui di svn tetapi ketika saya mencoba pembaruan hg, dikatakan "0 file ..."
Codism

Jawaban:

153

Saya pikir Anda mau hg revert -r<rev> <file>(ini akan mengubah file itu menjadi seperti pada revisi yang diberikan).

djc
sumber
Ya, itulah yang dia inginkan. :-)
Omnifarious
9
atau cukup hg kembalikan <filename> jika Anda ingin membuang perubahan Anda saat ini, dan dapatkan yang terbaru yang telah berkomitmen
BlackTigerX
@BlackTigerX Tanpa revisi, file yang tidak dimodifikasi tidak akan dikembalikan ke apa pun, meskipun itu bukan versi terakhir yang dikomit. Saya terkadang menggunakan ini untuk 'memilih ceri' file di antara revisi, jadi itu penting.
pengguna2864740
83

Seperti yang dikatakan djc, revertmengubah file di tempat agar cocok dengan revisi sebelumnya. Jika Anda ingin tidak ada, Anda dapat menggunakan hg cat -r revisionid filename(mengganti revisionid dan nama file tentunya) yang akan menampilkan file ke stdout, cocok untuk mengarahkan ke mana pun Anda mau.

Ry4an Brase
sumber
4
mendengkur, persis seperti yang kuinginkan.
yota
Hebat, selalu menyenangkan mendengar hal seperti itu.
Ry4an Brase
24

hg revertmemang memecahkan masalah ini. Tetapi saya pikir Anda bingung tentang hal-hal yang lebih luas daripada sekadar jawaban atas pertanyaan Anda dan ingin mencoba menjawab dengan lebih lengkap.

hg updateadalah seluruh perintah repositori dan tidak akan berfungsi pada file individual. Ini tidak seperti subversi svn updatedengan cara ini. Jika Anda melakukannya, hg --help updateAnda dapat melihat bahwa hal ini terjadi karena perintah tidak memerlukan argumen file. Ini dapat digunakan untuk memindahkan seluruh repositori Anda ke snapshot tertentu, tetapi tidak dapat digunakan untuk melakukannya hanya ke satu file.

Jika Anda mengetik, hg --helpAnda akan melihat daftar perintah. Ini adalah daftar yang agak besar dan agak menakutkan, tetapi jika Anda membacanya, Anda akan menemukan baris ini:

revert       restore individual files or directories to an earlier state

Sekarang, jika Anda hanya menginginkan status terakhir untuk tujuan perbandingan, ada perintah lain yang mungkin Anda minati, dan itu hg cat. Itu akan memungkinkan Anda untuk mencetak konten file pada revisi tertentu. Anda kemudian dapat mengarahkan outputnya ke beberapa file lain. Kemudian Anda dapat memiliki versi baik yang diketahui sebelumnya dari file Anda dan versi lama untuk dibandingkan secara berdampingan.

Alasan mengapa Mercurial memiliki updateperintah terpisah adalah dimungkinkan untuk melakukan sesuatu di Mercurial yang tidak mungkin dilakukan di Subversion. Anda bisa updateke versi sebelumnya, membuat perubahan, lalu melakukan. Ini akan membuat cabang. The updateperintah memiliki efek juga berubah revisi induk dari direktori kerja saat ini serta mengubah isi dari semua file dalam direktori untuk versi yang orang tua revisi ini.

Itu berarti revertmengubah konten file (atau bahkan seluruh repositori jika Anda memberikan perintah argumen yang benar) tetapi membiarkan revisi induk dari copy pekerjaan saat ini tetap sama.

Anda dapat mengetahui revisi induk (atau revisi dalam kasus penggabungan) dari copy pekerjaan saat ini dengan menggunakan hg parentsperintah.

Dalam revisi Subversion adalah perkembangan yang sangat linier. Mercurial menciptakan cabang dengan mudah, dan mereka hampir mudah untuk digabungkan. Revisi membentuk DAG, bukan progresi linier ketat.

Beraneka ragam
sumber
13

Untuk mengekstrak revisi tertentu dari file tertentu, Anda dapat melakukan ini di Windows:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

Di sini, 9 adalah nomor revisi.

Atau bahkan lebih baik:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"
pengguna2173353
sumber
1

Datang ke sini mencoba mendapatkan versi sebelumnya, jadi inilah perintah yang tepat:

hg revert -r .~1 <file>
cmcginty.dll
sumber