Tümünü sil ve en son revizyonun temiz kopyasını al?


159

Mercurial kullanmak ve çalışma dizini ipucu revizyon durumuna geri almak istiyorum bir oluşturma işlemi taşıyorum. Derleme işleminin önceki çalışmalarında bazı dosyaları değiştirmiş ve işlem yapmak istemediğim bazı dosyalar ekledim, bu nedenle depoya eklenmeyen yerel değişiklikler ve dosyalar var.

Tüm bunları atmanın ve en son revizyona sahip temiz bir çalışma dizini almanın en kolay yolu nedir?

Şu anda bunu yapıyorum:

hg revert --all
<build command here to delete the contents of the working directory, except the .hg folder.>
hg pull
hg update -r MY_BRANCH

ama daha basit bir yol olmalı gibi görünüyor.

Repoyu silmeye, yeni bir klon yapmaya ve bir güncellemeye eşdeğer yapmak istiyorum. Fakat repo bunun yeterince hızlı olamayacağı kadar büyük.


1
"(İçindekileri sil ...)", "geri al" komutunun açıklaması mı yoksa gerçekleştirdiğiniz bir adım mı? Soruyorum çünkü "hg update" sadece değişen dosyaları güncelleyecek. Güncellemeden önce diğer dosyaları kaldırırsanız, null-revizyona ( hg update 00) geri dönüp ipucuna yedekleme yapmadığınız sürece bunları geri alamazsınız . hg revert --allÇekmeden ve güncellemeden önce neden tutarlı bir çalışma klasörü durumuna geri dönmek için yeterli değil ?
Lasse V. Karlsen

Bu, derleme yazılımımla yapılan ayrı bir adım. (Komut satırı silme işlemini sadece kullanabilirdim, ancak kullanmadım.)
Rory

1
Sen bulabilir archivekomut gelecekte yararlı olduğu. Örneğin hg archive ../newbuild, en son deponuzun anlık görüntüsü hg updateburaya yerleştirilir. Tipik olarak gece inşaları için bunu yaparım, bu yüzden repo'yu karmakarışık edemem. Artık ihtiyacınız olmadığında derleme dizinini silmeniz yeterlidir.
Tim Post

Yanıtlar:


212

Bu adımlar olmalıdır aşağı kısaltılabilir muktedir:

hg pull
hg update -r MY_BRANCH -C

-CBayrak güncellenmesi önce tüm yerel değişiklikleri atmak için güncelleme komutu söyler.

Ancak, yine de izlenmemiş dosyaları deponuzda bırakabilir. Bunlardan da kurtulmak istediğiniz gibi geliyor, bu yüzden bunun için purgeuzantıyı kullanırdım :

hg pull
hg update -r MY_BRANCH -C
hg purge

Her durumda, Mercurial'dan burada istediğiniz her şeyi yapacak olan tek bir komut yoktur, ancak işlemi yapamayacağınızı söylediğiniz "tam klon" yöntemiyle değiştirirseniz.


6
Teşekkürler, ihtiyacım olan 'tasfiye' oldu. Güncelleme -C, uğraştığım ana şey olan izlenmeyen dosyalardan kurtulmaz.
Rory

4
TortoiseHg'yi temizlemek için de kullanabilirsiniz. Uzantıyı tezgahın ayarlarından açmanız (veya mercurial.ini dosyasını düzenlemeniz) yeterlidir.
Dave

18
Temizleme uzantısı etkinleştirilmezse, komutu şu şekilde de kullanabilirsiniz: hg --config "extensions.purge=" purge --all
Samuel Delisle

5
@ csharptest.net hg purge --all, yerel yapılandırmalarımı da sildiğinden bana iyi bir baş ağrısı verdi, yani: veritabanı kullanıcı / şifre vb. :)
VMC

@SamuelDelisle teşekkür ederim efendim, betiğimdeki bu tek seferlik komut için herhangi bir yapılandırma değişikliği yapmak istemedim!
joonas.fi

113
hg up -C

Bu, tüm değişiklikleri kaldıracak ve geçerli daldaki en son kafaya güncellenecektir.

Ayrıca tüm sürümlendirilmemiş dosyaları da kaldırmak için temizleme uzantısını açabilirsiniz .


İzlenmemiş dosyalar içerir mi? Denediğim diğer komutlardakilerle bazı problemlerim vardı. Şimdi deneyeceğim ...
Rory

7
@Rory: hayır, hg purgesürüm bilgisi olmayan dosyalar içindir.
zerkms

10

* Nix'teki izlemeyi temizleme uzantısı olmadan silmek için şunları kullanabilirsiniz:

hg pull
hg update -r MY_BRANCH -C
hg status -un|xargs rm

Hangisini kullanıyor

güncelleme -r --rev REV revizyonu

update -C - taahhüt edilmemiş değişiklikleri sil (yedek yok)

status -u --unknown yalnızca bilinmeyen (izlenmeyen) dosyaları göster

status -n - durum yok durum önekini gizle


4

Kolay bir yöntem arıyorsanız , bunu denemek isteyebilirsiniz.

Ben kendim için tüm araçlarım için komut satırlarını hatırlayamıyorum, bu yüzden UI kullanarak yapmaya meyilli:


1. İlk olarak, "kesin" i seçin

işlemek

2. Ardından, yok sayılan dosyaları görüntüleyin. Taahhüt edilmemiş değişiklikleriniz varsa bunları gizleyin.

Yok sayılan dosyaları göster

3. Şimdi hepsini seçin ve "Sürümsüz Sil" i tıklayın.

Onları sil

Bitti. Bu, hatırlanması komut satırı öğelerinden çok daha kolay bir prosedürdür.


Emin değilim (SourceTree'yi kendim kullanıyorum), ancak bu ekran görüntüleri TortoiseHg Workbench'ten geliyor. Genel olarak, UI tabanlı çözümlerin yararlı olduğunu düşünüyorum, ancak bu cevabın daha iyi etiketlemeye ihtiyacı var. Ayrıca, "onları sakla" bana biraz belirsiz geliyor.
Jon Coombs

3

hg durumu size tüm yeni dosyaları gösterecek ve sonra onları rm yapabilirsiniz .

Normalde yok sayılan ve sürümleri kaldırılmış dosyalardan kurtulmak istiyorum, bu yüzden:

hg status -iu                          # to show 
hg status -iun0 | xargs -r0 rm         # to destroy

Ve ardından şunu takip et:

hg update -C -r xxxxx

bu sürüm tüm sürümleri xxxx revizyonu için doğru duruma getirir


Size bunu yapmak istemediğinizi söyleyen Stack Overflow geleneğini takip etmek için, sık sık bu "Nükleer Seçenek" in önem verdiğim şeyleri yok ettiğini görüyorum.

Bunu yapmanın doğru yolu, oluşturma işleminizde 'temizle' seçeneğine ve belki de 'gerçekten temizle' ve 'belirsiz hale getir' seçeneğine sahip olmaktır.

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.