Mercurial (hg) yalnızca belirli dosyaları işler


119

Mercurial ile sadece belirli dosyaları işlemeye çalışıyorum. Hg otomatik eklemeye sahip olduğu için, ne zaman bir değişiklik yapmaya çalışsam tüm dosyaları uygulamak istiyor. Ama bunu istemiyorum çünkü bazı dosyalar henüz "hazır" değil.

Var

hg commit -I thefile.foo

ancak bu yalnızca bir dosya içindir. Benim için daha iyi bir yol, Git'teki gibi otomatik eklemeyi kapatabilmem olabilir. Mümkün mü?


5
kayıt uzantısını kullanıyor musunuz? veya dosyaları komut satırında belirtebilirsinizhg ci foo bar baz
tonfa

4
@tonfa, yorumunuzu yanıt olarak yeniden yayınlayın
Andrei Dziahel

Lütfen gönderilerinize zarar vermeyin.
Glorfindel

Neden bu kadar güzel bir soruyu kırıyorsun ahbap?
Praveen Kumar Purushothaman

Yanıtlar:


155

Tonfa'nın yazdığı gibi, dosyaları komut satırında belirtebilirsiniz:

$ hg commit foo.c foo.h dir/

Bu işe yarıyor ve her zaman yaptığım şey bu. Ayrıca --includebulduğunuz bayrağı da kullanabilir ve aşağıdaki gibi birkaç kez kullanabilirsiniz:

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

İşlemek istediğiniz dosyaları seçmek için bir dosya grubu bile kullanabilirsiniz :

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

Otomatik ekleme davranışını kapatacak ve Mercurial'ın Git gibi çalışmasını sağlayacak bir ayar yoktur. Ancak, mq uzantısı ilgi çekici olabilir. Bu gelişmiş bir uzantıdır, ancak şunları yapmanızı sağlar:

$ 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

Ben de MQ'yu bu amaç için kullanmıyorum, çünkü sadece komut satırında dosya adlarını belirtmenin yeterli olduğunu düşünüyorum.


Hangi "otomatik ekleme davranışı" davranışı? Dosyaları otomatik eklemek için hg kullanıldı mı? Çünkü şimdi bunu açıkça yapmak zorundasın, yoksa izlenmeyecekler.
mpen

1
@mpen Sanırım o, gh'in bir sonraki işlemeye manuel olarak değiştirilmiş dosyaları eklemeniz gereken ve bazı değiştirilmiş dosyaları taahhüt
edilmeden

24

Birkaç dosyayı yürütmek ve diğerlerini dışlamak istiyorsanız, uygulamak istediğiniz dosyaları açıkça listeleyin. -Iyalnızca dosyalar yerine desenler kullanmak istiyorsanız gereklidir.

Çok sayıda dosyayı işlemek ve yalnızca birkaç dosyayı dışlamak istiyorsanız, kullanmak -Xdaha uygundur.

Örneğin, "dosya_1", "dosya_2" ve "dosya_3" içeren bir havuz verildiğinde, aşağıdakiler eşdeğerdir, ancak ikincisi yazmak daha kolay / daha hızlıdır:

hg commit file_1 file_2
hg commit -X file_3

8

3.8'denhg commit --interactive itibaren dosyaları seçmek için de kullanabilirsiniz ( 3.8'den önce benzer işlevler için crecord uzantısını kullanabilirsiniz ). --interactive(Ya da sadece -i) bayrağı size taahhüt eklemek istediğiniz dosyalar için soracak şekilde hg neden olacaktır. Ek bir bonus olarak dosyalara parçaları dahil edebilir / hariç tutabilirsiniz.

İşte arayüzün neye benzediğine dair bir örnek. Bunun eski bir ekran görüntüsü olduğuna dikkat edin (aslında crecord'un), bu nedenle arayüz biraz değişti (ancak temel bilgiler aynıdır). crecord ekran görüntüsü

Bu arayüzü elde etmek için curses arayüzünün etkinleştirilmesi gerektiğini unutmayın. Bunu tek seferde hg commit --config ui.interface=curses --interactiveveya genel olarak aşağıdakileri ekleyerek yapabilirsiniz .hgrc:

[ui]
interface = curses
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.