2011-01-20 34 views
5

ile anahtar kelime değiştirme Anahtar kelime genişletme uzantısı ile Mercurial hakkında bir sorum olurdu: gerçek taahhüt mesajını bir anahtar kelime ile genişletmek mümkün mü, kaynaklarda ne olduğu hızlı başvuru için kaynaklarda görünmesi mümkün mü? o CVS muadili iddia yaptığı gibi,Mercurial

Repo en hgrc

Log={desc} 

yılında Ama yığını değildir:

Düzenleme: Bu iş gibi görünüyor.

Kullanım Kaynak Luke:

CVS' $ Log $ gibi birden fazla hattı ve artan açılımları, kapsayan

Açılımları, desteklenmez. Bir anahtar kelime şablon haritası "Günlük = {desc}", değişiklik kümesi açıklamasının ilk satırına genişler.

+3

Sadece bunu belirtmek için: Mercurial Anahtar Kelime Genişletme wiki sayfası bunu kullanmayı engeller, ve aslında bu bir ücret değil, desteklenmeyen bir uzantının parçası değildir. Tüm kontrolün her zaman aynı revizyonda olduğu bir DVCS ile (kısmi bir ödeme yapabildiğiniz zaman svn'den farklı olarak), onu kullanmamanın pek çok sebebi vardır ('hg diff' sert/yanlış). –

+0

@ Ry4an: Yorum yap cevap ver, bunu oylaıcak :) – neuro

+2

Naw, "Gerçekten istemiyorsun" cevabı değil. Doğru, ama istediği bu değil. –

cevap

6

Anahtar kelimeler yalnızca tek bir satırda genişletilebilir, bu nedenle log messages keep accumulating adresinde CVS benzeri davranışlar elde edemezsiniz. Bu, uzantı etkinleştirildikten sonra hg help keyword belgelenmiştir.

işlemek mesajlar Mercurial içinde {desc} template keyword ile erişilebilir, böylece tüm .c dosyalarında

[keywordmaps] 
Log = {desc} 

[keyword] 
**.c = 

$Log$ genişletilmiş hattı bu olması ekleyebilir.

Anahtar kelime uzantısının, dosya bazında çalıştığı şekilde CVS benzeri bir görünüm verdiğini unutmayın. Mercurial normalde bir depo çapında çalışır. Eğer

$ hg commit -m "Fixed bug 123" foo.c # create changeset 10:84e0d0dc9ce5 
$ hg commit -m "Fixed bug 234" bar.c # create changeset 11:2e85d7f2f93e 

yaparsanız o zaman foo.c revizyon 10'da son değiştirildiği bu doğru, ancak 11 sadece bar.c içerdiğini revizyon söylemek yanlış. foo.c dosyası ayrıca revizyon 11'in bir parçasıdır - bar.c'daki değişikliğin foo.c'a olan önceki değişikliğe bağlı olduğu ve böylece revizyon 11'deki anlık görüntüsünün her ikisi de foo.c ve bar.c'un durumunu yakalar.

dosya başına temelinde keyword extension eserler o kelimeleri genişlediğinde: Eğer 2e85d7f2f93e changeset güncellemek yazmasa bile bar.c içine foo.c ve $Log: Fixed bug 234 $ içine $Log: Fixed bug 123 $ yazacak.

Neden ve her dosyanın en son ne zaman dokunduğunu görmek isterseniz, istediğinizi yapın. Eğer deponuzun global durumunu bilmek istiyorsanız - örneğin bir versiyon dizesi olarak kullanmak için! - o zaman bu yanlış. Sorun şu ki, geliştirdiğinizde version.h dosyanız uzun süreler değişmeyecek ve bu nedenle bu dosyadaki anahtar kelimeler aynı kalmayacaktır.

Bu durumda, Makefile ürününüzün bir parçası olarak gerçekten hg id'u çalıştırmanız gerekir. Sen gibi bir şey ile daha süslü yapabilirsiniz:

$ hg parents --template '{latesttag}+{latesttagdistance}-{node|short}\n' 

hangi çıktısı 2.1+117-eed1e5bba9a8 gibi bir dize. Bu, geçerli sürümünüzün (eed1e5bba9a8), son etiketin (2.1) ardından 117 işlem olduğu anlamına gelir.Bu, kullanıcıların aynı merkezi depodan yapılan derlemeleri karşılaştırmasını kolaylaştırır ve ihtiyacınız olduğunda benzersiz bir şekilde yeniden üretebilirsiniz.