2010-03-09 21 views
99

Mercurial ile sadece belirli dosyaları işlemeye çalışıyorum. Değişiklik yapmayı denediğimde otomatik ekleme eklendiğinden, tüm dosyaları işlemek istiyor. Ama bunu istemiyorum çünkü bazı dosyalar henüz "hazır" değil.Mercurial (hg) sadece belirli dosyaları işliyor

Orada

hg commit -I thefile.foo 

ama bu sadece bir dosya içindir. Git'te olduğu gibi otomatik ekle'yi kapatabilirsem, benim için daha iyi bir yol olurdu. Mümkün mü?

+5

kayıt uzantısını kullanın: Eğer .hgrc aşağıdakileri ekleyerek hg commit --config ui.interface=curses --interactive veya genellikle ile bir tekrarın yapabilir? ya da komut satırındaki dosyaları belirtebilirsiniz 'hg ci foo bar baz' – tonfa

+3

@tonfa, yorumunuzu bir cevap olarak belirtin – develop7

+0

Lütfen mesajlarınızı saldırıya uğratmayın. – Glorfindel

cevap

133

Sen, komut satırında dosya belirtebilirsiniz.

$ hg commit -I foo.c -I "**/*.h" 

Hatta işlemek istediğiniz dosyaları seçmek için bir fileset kullanabilirsiniz:: Ayrıca buldum --include bayrağı kullanabilir ve bunun gibi birkaç kez kullanabilirsiniz

$ hg commit "set:size(1k - 1MB) and not binary()" 

Otomatik ekleme davranışını kapatacak ve Git gibi Mercurial çalışmalarını yapacak hiçbir ayar yoktur. Bununla birlikte, mq extension ilgi alanı olabilir. Yani gelişmiş bir uzantısı, ama bu sadece komut satırında dosya belirtmek için yeterli olduğunu düşünüyorum çünkü, sen de, ben gerçekten bu amaç için MQ kullanmayan

$ hg qnew feature-x  # create new patch 
$ hg qrefresh -s foo.c # add a file to the current patch 
$ hg qrefresh -s bar.c # add another file to the patch 
$ hg qfinish -a   # convert applied patches to normal changesets 

için kendim yapmak verir.

0

this Stack Overflow question'da önerildiği gibi, bunu yapmanın en kolay yolu hg shelve. Sadece çalışır

$ hg commit foo.c foo.h dir/ 

ve ben her zaman böyle yapar: tonfa yazdığı gibi

+1

Raflar bunun için nasıl yardımcı olur? Şube geçişine veya olağanüstü değişikliklerden şikayetçi olan herhangi bir şeye, yani seçici işlem için sakladığınıza karar verirseniz, sadece ne yapmanız gerektiğini seçersiniz. – amertkara

+0

Kesinlikle en basit ** yol değil, ama çalışıyor. Bu 'git stash' ile benzer: Mevcut çalışma dizininizden istediğiniz her şeyi kaldırır, sadece kalanları işlemenize izin verir. – marcelocra

20

Birkaç dosya işlemek ve başkalarını hariç tutmak istiyorsanız, işlemek istediğiniz dosyaları açıkça listeleyin. -I sadece dosya yerine kalıp kullanmak istiyorsanız gereklidir.

Çok sayıda dosya işlemek istiyorsanız ve yalnızca birkaç dosyayı dışlamak istiyorsanız, -X'u kullanmak daha uygundur.

E.g. "File_1", "file_2" ve "file_3", aşağıdaki eşdeğerdir ancak ikincisi daha kolaydır içeren bir depo verilen/hızlı yazmak için:

hg commit file_1 file_2 
hg commit -X file_3 
1

3.8 olarak da dosyaları seçmek için hg commit --interactive kullanabilirsiniz (3.8'den önce benzer işlevler için crecord extension'u kullanabilirsiniz). --interactive (veya sadece -i) bayrağının, işleme dahil edilmek istediğiniz dosyalarda sizi uyaracağı hg. Ek bir bonus olarak, dosyalar içindeki parçaları bile ekleyebilir/hariç tutabilirsiniz.

Arayüzün nasıl göründüğüne dair bir örnek. Not Bu eski bir ekran görüntüsü (aslında crecord) böylece arayüz biraz değişti (ama temelleri aynı). crecord screenshot

Bu arabirimi almayı unutmayın, curses arabirimi etkinleştirilmiş olmalıdır.

[ui] 
interface = curses 
İlgili konular