Mercurial'de bir dosyanın belirli bir sürümünü nasıl elde edebilirim?


114

Mercurial'da yeniyim. Doğru komutu bulamıyorum. Şanssız güncelleme / ödeme denendi. Yerel depoyu kullanıyorum. Teşekkürler


@Omnifarious: Bir dosyanın kararlı bir sürümünü işledim. Sonra dosya üzerinde çalışmaya devam etti ama kısa süre sonra son "iyi" sürüme ihtiyacım olduğunu anladım. Bu,
svn'de

Yanıtlar:


153

Sanırım istiyorsun hg revert -r<rev> <file>(bu, dosyayı verilen revizyondaki gibi değiştirecek).


Evet, tam da istediği şey bu. :-)
Omnifarious

9
veya mevcut değişikliklerinizi iptal etmek ve en son
yapılanı

@BlackTigerX Revizyon olmadan, değiştirilmemiş bir dosya, en son kaydedilmiş sürüm olmasa bile hiçbir şeye geri döndürülmeyecektir. Bunu bazen revizyonlar arasında dosyaları 'kiraz seçmek' için kullanırım, bu yüzden bu önemlidir.
user2864740

83

Djc'nin dediği gibi revert, önceki revizyona uyacak şekilde yerinde bir dosyayı değiştirir. Yerinde olmamasını istiyorsanız hg cat -r revisionid filename, dosyayı stdout'a çıkaracak, istediğiniz herhangi bir yere yeniden yönlendirmek için uygun olan (revisionid ve dosya adını değiştirerek) kullanabilirsiniz .


4
purrrfect, tam olarak ne dilediğimi.
yota

Harika, böyle bir şey duymak her zaman güzeldir.
Ry4an Brase

24

hg revertgerçekten de bu sorunu çözüyor. Ama bence, sorunun cevabından çok daha geniş bir yelpazede kafanız karıştı ve daha eksiksiz cevap vermeye çalışmak istiyorsunuz.

hg updatetam bir depo komutudur ve tek tek dosyalar üzerinde çalışmayacaktır. svn updateBu şekilde yıkıma benzemiyor . Bunu yaparsanız hg --help update, komutun dosya argümanı almadığı için durumun böyle olduğunu görebilirsiniz. Tüm deponuzu belirli bir anlık görüntüye taşımak için kullanılabilir, ancak bunu tek bir dosyaya yapmak için kullanılamaz.

Eğer yazarsanız hg --helpsize komutların bir listesini görebilirsiniz. Oldukça geniş ve biraz ürkütücü bir liste, ancak onu okursanız, şu satırı bulacaksınız:

revert       restore individual files or directories to an earlier state

Şimdi, karşılaştırma amacıyla sadece son durumu istiyorsanız, ilgilenebileceğiniz başka bir komut var ve bu hg cat. Bu, belirli bir revizyonda bir dosyanın içeriğini yazdırmanıza olanak tanır. Daha sonra çıktısını başka bir dosyaya yönlendirebilirsiniz. Ardından, yan yana karşılaştırmak için dosyanızın önceki bilinen iyi sürümüne ve eski sürümüne sahip olabilirsiniz.

Mercurial'in ayrı bir updatekomuta sahip olmasının nedeni, Mercurial'de Subversion'da imkansız olan bir şeyi yapmanın mümkün olmasıdır. Daha updateönceki bir sürüme geçebilir , değişiklikler yapabilir ve ardından taahhüt edebilirsiniz. Bu bir dal yaratacaktır. updateKomut ayrıca geçerli çalışma dizininin ana revizyon değişen yanı sıra söz konusu ebeveyn revize edilen versiyonlarına o dizindeki tüm dosyaların içeriğini değiştirme etkisine sahiptir.

Bu revert, bir dosyanın içeriğini (hatta komuta doğru argümanlar verirseniz tüm depoyu) değiştirir, ancak mevcut çalışan kopyanın üst revizyonunu aynı şekilde bırakır.

hg parentsKomutu kullanarak mevcut çalışma kopyasının üst revizyonunu (veya birleştirme durumunda revizyonları) öğrenebilirsiniz .

Subversion'da revizyonlar kesinlikle doğrusal bir ilerlemedir. Mercurial, bir şapkanın damlasında dallar oluşturur ve neredeyse birleştirilmesi kadar kolaydır. Revizyonlar, kesinlikle doğrusal bir ilerleme değil, bir DAG oluşturur.


13

Belirli bir dosyanın belirli bir revizyonunu çıkarmak için bunu Windows'ta yapabilirsiniz:

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

Burada 9 revizyon numarasıdır.

Ya da daha iyisi:

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

1

Buraya önceki sürümü almaya çalışırken geldim, işte tam komut:

hg revert -r .~1 <file>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.