Bir exe veya dll dosyası oluşturan bazı C++ projem var. Proje bir SVN deposunda kontrol edilir. SVN'den revizyonu otomatik olarak exe/dll dosyamda gömülü olan sürüm kaynağı ile senkronize etmek istiyorum, yani sürüm $ major. $ Minor. $ Svn_revision.
Bunu nasıl gerçekleştireceğinizle ilgili herhangi bir fikir var mı? Mevcut herhangi bir çözüm mevcut mu?EXE/DLL dosyalarının SVN düzeltme ve sürüm ressources'i nasıl eşitlenir?
cevap
Eğer TortoiseSVN kurulu ise, o zaman yüklü bir program var, SubWCRev
.
, dosyanıza, Bu değeri varsa: Böyle bir şey yürütmek eğer
Sonra$WCREV$
en yüksek taahhüt revizyon numarası ile değiştirilir edeceğiz: Bu irade
SubWCRev .\ yourfile.txt.template yourfile.txt
yourfile.txt.template
'dan kopyalayın, ikameleri yapın ve yourfile.txt
'a yazın.
Not: SubWCRev
'u herhangi bir argüman olmadan çalıştırırsanız, bunların tümünü konsolda listeleyebilirsiniz, ayrıca kullanabileceğiniz başka birçok makro da vardır.
Subversion Properties ve Subversion Keywords'a bakmak isteyebilirsiniz. Onlar her zaman bu lanetlenmiş $KeywordName: ...$
parçası içeren bu sorunu çözmezler. Özel özellikler, toplu iş dosyalarında meta verileri oluşturmak için güzel bir yöntem sunar ve ne değildir. Her neyse, birkaç yıl önce kaynak sorununa bir çözüm aradım ve bir tane bulamadım. Böylece kendi evimizdeki çözümümüzü yarattık. RC dosyamızı, oluşturma işlemi sırasında oluşturulan bir başlık dosyasını içerecek şekilde değiştirdik. RC, üstbilgiye bağımlıydı ve üstbilgi, üstbilgiyi oluşturmak için bir toplu iş dosyasını çalıştıran özel bir oluşturma kuralına sahipti. Aşağıdaki parçacık geçerli revizyonu svn info
çıktısından çıkaracaktır.
product-info.h
adlı tanımlanmış bir ürün satırı sürümü dosyasını vardı
#ifndef component_info_h
#define component_info_h
#include "product-info.h"
#include "version-stamp.h"
#define VERS_MAJOR 1
#define VERS_MINOR 2
#define VERS_PATCH 3
#define VERS_BUILD REPOSITORY_VERSION
#define MY_COMPONENT_NAME "TPS Report Generator"
#define MY_VERSION_NUMBER VERS_MAJOR,VERS_MINOR,VERS_PATCH,VERS_BUILD
#define MY_VERSION_STRING VERSION_STRING(VERS_MAJOR,VERS_MINOR,VERS_PATCH,VERS_BUILD)
#endif
:
SET rootdir=%1
SET svnrev=0
PUSHD "%rootdir%"
FOR /F "tokens=1-4 delims=: " %%I IN ('svn info') DO (
IF /I {%%I}=={rev} SET svnrev=%%L
)
(ECHO./*
ECHO. * version-stamp.h - repository version information
ECHO. */
ECHO.#ifndef VERSION_STAMP_H
ECHO.#define VERSION_STAMP_H
ECHO.#define REPOSITORY_VERSION %svnrev%
ECHO.#endif) > include\version-stamp.h
POPD
Sonra şöyle bir şey görünüyordu
component-info.h
adında bir bileşen spesifik sürümü damgalama başlığı oluşturdu
#ifndef product_info_h
#define product_info_h
#define PROD_VERS_MAJOR 0
#define PROD_VERS_MINOR 1
#define PROD_VERS_PATCH 0
#define PROD_VERS_BUILD 0
#define VSTR1(s) #s
#define VSTR(s) VSTR1(s)
#define VERSION_STRING(a,b,c,d) VSTR(a) "." VSTR(b) "." VSTR(c) "." VSTR(d) "\0"
#define MY_COMPANY_NAME "IniTech\0"
#define MY_COPYRIGHT "Copyright ©2009 " MY_COMPANY_NAME
#define MY_PRODUCT_NAME "\0"
#define MY_PRODUCT_VERSION_NUM PROD_VERS_MAJOR,PROD_VERS_MINOR,PROD_VERS_PATCH,PROD_VERS_BUILD
#define MY_PRODUCT_VERSION_STR VERSION_STRING(PROD_VERS_MAJOR,PROD_VERS_MINOR,PROD_VERS_PATCH,PROD_VERS_BUILD)
#endif
Ardından, kaynak dosyanız component-info.h
'u içerir ve uygun tanımdaki çeşitli tanımları kullanır. aslar (ör., FILEVERSION MY_VERSION_NUMBER
). Bu yapı, tüm sürüm damgalama sürecinde bize çok fazla esneklik ve izlenebilirlik sağlamıştır. Bir yığın dosyasındaki basit bir yığından bu çok seviyeli canavarlığa dönüştü ancak son birkaç yıldır bizim için çok iyi çalıştı.
Henüz kimsenin bunu yapmak için daha iyi bir yol bulamadığını düşünmek zor. Sonra tekrar, birkaç yıl boyunca araştırmamıştım. Bunu işleyen özel bir araç tanımlayan bir özel .rules
dosya ekleyebilirsiniz varsayalım.
Bu çok yardımcı, teşekkürler. Bunu herhangi birisine yardım edersem Visual Studio 2008 için geliştirdim.
1/düzenlendi a/her proje içinde klasör oluşturun
/AssemblyInfo.cs.txt olarak Yapı klasörüne AssemblyInfo.cs Kopyalanan, Eylem oluşturmak set 2"Yok"
3/Düzenlendi sürümüne sahip AssemblyInfo.cs.txt olarak özellikler: aşağıdaki
[assembly: AssemblyVersion("2.0.0.$WCREV$")]
[assembly: AssemblyFileVersion("2.0.0.$WCREV$")]
4/Eklendi Prebuild olaylara aşağıdaki:
SubWCRev $(SolutionDir) $(ProjectDir)\Build\AssemblyInfo.cs.txt $(ProjectDir)\Properties\AssemblyInfo.cs
Bu, her derlediğinizde çalışır.
Ben Visual Studio ile VisualSVN/TortoiseSVN'ye ve VisualSVN Server kullanıyorum 2008.
GÜNCELLEME: Meslektaşım sadece onun çalışma kopyasını güncelledi ve AssemblyInfo.cs çakışmış
. Açık görünüyor. Bunu çözmek için VisualSVN kullanarak SVN'den çıkardım.
Program.X tarafından verilen yanıt harika çalışıyor. Ancak, değişikliklerinizi gerçekleştirmeden önce yürütülebilir dosyanızı kurarsanız, revizyonun, çalışan kodun gerçek revizyon numarasından bir tane daha olacağını ekleyeceğim. Bu azaltmak için, herhangi bir yerel değişiklikler varsa, 1 son koyacağız Yani
"2.0.$WCREV$.$WCMODS?1:0$"
için versiyonlarını ayarlamak ve 0 değilse olabilir. Eğer daha sonra çalıştırıcınıza bakarsanız ve 2.0.54.1'i görüyorsanız, muhtemelen 55'in yeniden gözden geçirilmiş olduğunu biliyorsunuzdur.
WCREV'de bulunan anahtar kelimeler hakkında daha fazla bilgiye buradan ulaşabilirsiniz: http://tortoisesvn.net/docs/release/TortoiseSVN_tr/tsvn-subwcrev-keywords.html –
İyi nokta. Bunu fark ettim, bunu işaretlemek için iyi bir geçici çözüm gibi görünüyor. –
Bunu beğendim, çünkü sürümün gerçekten bir SVN içeriğinin veya değiştirilmiş bir yapının 1: 1 yapısının olup olmadığını görebilirsiniz. – Stiefel
- 1. SVN: geçerli sürüm ve dallanmış olduğu sürüm arasındaki fark?
- 2. svn: ignore'd dosyalarının yinelemeli listesini alın
- 3. Kaynak koduna SVN düzeltme numarası ekle
- 4. SVN: Düzeltme için taahhüt edilen dosya dosyaları
- 5. svn bilgilerini kullanarak bir düzeltme tarihi alma
- 6. Sürüm denetimindeki düzeltme sayısı neden her zaman 1 artmıyor?
- 7. Erişim ve düzeltme düzeltme .dat dosyası
- 8. SVN ve
- 9. Python matplotlib'de x ekseni ve y ekseninin ölçekleri nasıl eşitlenir?
- 10. Düzeltme/Yama oluşturma ve teslim etme yaklaşımı
- 11. SVN, svn status
- 12. Tarih verileri x ekseni boyunca nasıl eşitlenir?
- 13. İki KoordinatorLayout + AppBarLayout kaydırması nasıl eşitlenir
- 14. Yayın sürümü, .NET ClickOnce uygulamasında derleme sürümüyle nasıl eşitlenir?
- 15. Visual Studio'da tasarımcı dosyalarının dili nasıl değiştirilir
- 16. Düzeltme
- 17. Ayrıntı Düzeltme Düğmesi ve Yönlendirmeler
- 18. Düşürme NodeJs Sürüm ve ekspres sürüm
- 19. Git svn klon: erteleme nasıl sıklıkla hemen bir SVN deposuna üzerinde çalışmak istediğiniz durum var düzeltme geçmişinde
- 20. Merkür ve maven (ve svn)
- 21. Subversion'da dizin çakışmasını düzeltme
- 22. Düzeltme dizelerini actionscript ile düzeltme 3
- 23. NIB dosyaları ve Sürüm Denetimi: Dalları kullanma
- 24. Sürüm dizini
- 25. SVN o
- 26. ruby dosyalarının nasıl yeniden adlandırılır?
- 27. Güncelleme sürüm bilgisi
- 28. mercurial ve svn birlikte nasıl kullanılır
- 29. SVN -
- 30. SCM ve SVN arasındaki fark
SubWCRev ayrıca TortoiseSVN kullanmayan (isteyenler) için ayrı olarak mevcuttur: http://sourceforge.net /project/showfiles.php?group_id=138498&package_id=281312 – Stefan
Harika, bunu bilmiyordum! –
de benim gün için benim bu gerçeği :) –