İzlenmeyen tüm dosyaları Mercurial'taki çalışma dizinimden nasıl silebilirim?


207

İzlenmeyen tüm dosyaları çalışma dizinimden silmek mümkün müdür? Diyelim ki çalışma dizinime bir sürü dosya ekledim, 'hg add' ile eklemedim ve şimdi bu yeni dosyalardan tamamen kurtulmak mı istiyorsunuz?

Windows'tayım, ancak PowerShell kullanıyorum, bu yüzden burada birleşik bir çözüm de mümkün.

Yanıtlar:


286

Mercurial Uzatma denilen ekle tasfiye . Mercurial tarafından dağıtılır.

Bu uzantı, Mercurial tarafından bilinmeyen dosyaları kaldıran “hg” dosyasına bir “temizleme” komutu ekler. yani izlenmeyen Dosyalar. Yani emriniz,

hg purge

Varsayılan olarak etkin değildir, belki de eklemeyi unuttuğunuz dosyaları yanlışlıkla kaldırmamak için.

Bu uzantıyı yüklemek için bunu mercurial settings dosyanıza ekleyin (Unix'te .hgrc, Windows'ta Mercurial.ini)

[extensions]
purge = 

Bu uzantıyı geçici olarak etkinleştirmek için

hg purge --config extensions.purge= 

26
hg purge --allizlenmeyen ve yoksayılan tüm dosyaları silecektir. Bu, kaynak yapılarını temizlemek için kullanışlıdır
tacaswell

22
hg purge --config extensions.purge=
ext'i

121

Tasfiyesiz uygun yol:

hg st -un0 | xargs -0 rm

1
@simplyharsh bu şekilde daha iyi mi yoksa uzantı eklemekten daha az iş buldunuz mu?
Yaakov Kuperman

3
@YaakovKuperman Uzantı eklemenin bu komuttan daha az iş olduğunu tahmin ediyorum (bir kez etkinleştirme). Boşaltma uzantısını etkinleştirmiyorum çünkü iki haftada bir kereden daha azına ihtiyacım var. Ayrıca bana saçma da diyebilirsin, ama bu komutu yazmak bana 'tasfiye' kadar yıkıcı bir şey yapmadan önce tekrar düşünmek için yeterli zaman veriyor.
simplyharsh

2
@simplyharsh, bu mantıklı, ama tamamen tasfiye etmek için iki nedenim var. İlk olarak, hg tasfiye - baskı yapabilir ve tasfiyeyi yapmadan önce neyin kurtulacağının bir listesini görebilirsiniz. İkincisi, bu şekilde yaparsanız, çalışabilmesi için repo'nun kökünde olmanız gerekir.
Yaakov Kuperman

1
@javawizard: Bu, hg'nin nasıl çalıştığını yeniden düşünmemi sağlayan hoş bir şey. Ancak, yalnızca rm -rf *nokta dosyalarını ve nokta dizinlerini atladığı için çalışır .hg/. Aynı şekilde, diğer herhangi bir nokta dosyası da (örneğin .evil-settings) hayatta kalacak ve temizleme daha iyi olacaktır.
dirkjot

2
'Hg st -u' ve 'hg tasfiye' ile buldukları arasında davranış farkı olduğunu unutmayın. 'hg st -u' izlenmemiş boş dizinler bulamaz, 'hg tasfiyesi' bunları bulur (ve kaldırır). Bu sizin için önemli olabilir veya olmayabilir.
Michael Kent

19

Teşekkürler! Bu benim için Powershell'de de işe yaradı:

hg st -un | rm

2
xargs powershell çalışmıyor - bu "windows dostu" kutunun dışında tek cevap
Nikos Athanasiou

kabul edildi ... ikincisi powershell çalışmıyor ... temizleme hala geçerli bir seçenek olsa
beauXjames

Work for for :)
Naveen Kumar V

4
rm $(hg st -u)

... burada -u "izlenmemiş" anlamına gelir, başka bir durum da seçebilirsiniz.


4

Kullanabilirsiniz

hg purge --all

yok sayılan ve izlenmeyen dosyaları kaldırmak için

(önce bazı cevaplarda açıklandığı gibi temizleme uzantısını yüklemeniz gerekir)



2

Bu hile yapmalı:

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf

2

tasfiye kullanmak istemiyorsanız:

rm $(hg st | grep ^? | awk '{print $2}')

0

Bir * nix sistemi kullandığınızı varsayarsak, şöyle bir şey çalıştırabilirsiniz:

rm `hg st | awk '/\?/ {print $2}'`

cıva deposunun kökünden.

Aynı şeyi elde etmek için standart bir mercurial komut bilmiyorum ama bunu yapmak için çok daha fazla komut satırı seçeneği olduğuna inanıyorum. Eminim "daha iyi" çözümler vardır ve diğer önerileri duymak isteriz.

Lütfen bu komutu dikkatli bir şekilde test edilmediğinden dikkatli kullanın.

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.