2008-08-19 31 views
39

Tôi muốn triển khai cách ghi phiên bản của dự án trong mã, để nó có thể được sử dụng khi kiểm tra và giúp theo dõi lỗi. Có vẻ như số phiên bản tốt nhất để sử dụng sẽ chỉ là số phiên bản hiện tại từ Subversion. Có một cách dễ dàng để móc số này vào một tập tin tiêu đề (C++ trong trường hợp của tôi) hoặc cái gì đó, mà sau đó tôi có thể nhận được trong mã? Tôi đoán đây là một bài viết cam kết móc hoặc một cái gì đó?Lấy số kho lưu trữ subversion vào mã

Có ai có kinh nghiệm thực hiện điều này (có mã để chia sẻ không?) Hoặc có thể đề xuất giải pháp thay thế tốt hơn? Cảm ơn.

Trả lời

14

Trong khi tiện lợi, lừa từ khóa sửa đổi chỉ cập nhật các tập tin khi nó thay đổi trong phiên bản đó - nếu bạn không thay đổi các tập tin , sau đó nó sẽ tiếp tục phản ánh bản sửa đổi cũ.

Nếu bạn muốn phần mềm luôn phản ánh số bản sửa đổi tổng thể, thì bạn sẽ phải nghiên cứu relevant SVN entries file và giải nén nó, không quá khó (đó là tệp XML).

Wikipedia làm điều này trên their version page để cho biết bản sửa đổi phần mềm đang chạy trực tiếp; the code is here - tìm phương thức getSvnRevision().

+0

Bạn sẽ phải kiểm tra đệ quy tất cả các tệp mục nhập, để tìm số bản sửa đổi cao nhất. Tôi đoán đó là những gì svnversion nào. –

+3

svnversion dường như trả lại phiên bản thay đổi cuối cùng của toàn bộ kho lưu trữ (không chỉ đường dẫn của WC của bạn). Xem câu trả lời của tôi cho câu hỏi liên quan này về cách tôi đã giải quyết vấn đề này: http://stackoverflow.com/questions/56227/how-do-you-determine-the-latest-svn-revision-number-rooted-in-a -directory # 249905 – hasseg

+0

Dường như việc này bị hỏng với Subversion 1.7, loại bỏ thư mục .svn ở mọi nơi ngoại trừ cấp cao nhất của hộp cát. –

4

Bạn có thể sử dụng thuộc tính svn:keywords để bật từ khóa Rev.

Sau đó bạn có thể sử dụng $Rev$ trong mã của bạn và SVN sẽ mở rộng nó tự động khi cập nhật lên $Rev: 256 $ sau đó có thể phân tích ...

More info on the Subversion manual

+5

Đây không phải là điều đúng nếu bạn muốn có số phiên bản đầy đủ dự án, vì $ Rev $ chỉ thay đổi khi tệp đó được cập nhật, chứ không phải khi cập nhật dự án. –

27

Hai cách:

Nhúng Id $ $ hoặc $ Sửa đổi $ trong mã. Sau đó, đặt thuộc tính svn: keywords = "Sửa đổi Id" trên tệp. Điều này sẽ cung cấp cho bạn bản sửa đổi cuối cùng của tệp nguồn đó. Tốt cho các dự án và kịch bản nhỏ hơn.

Cách khác, sử dụng quy trình điều khiển Makefile và công cụ dòng lệnh svnversion. (Ngôn ngữ cụ thể - điều này sẽ hoạt động cho C/C++)

echo -n "#define VERSION 1.0.1-" > version.h 
svnversion -n . >> version.h 

Hoặc một số tập lệnh xây dựng phức tạp hơn với sed và version.h.in. Sau đó chỉ cần #include version.h

Điều đó sẽ cung cấp cho bạn số phiên bản kho, sẽ thay đổi với mọi cam kết/cập nhật và có thể là số phiên bản phù hợp hơn cho hầu hết các dự án.

Lưu ý: Tôi cũng đã sử dụng chuỗi phiên bản có thể đọc được con người mà tôi cập nhật theo cách thủ công. Ví dụ sẽ cung cấp cho: Version: 1.0.1-r13445

~ J

13

Bạn cũng có thể sử dụng SubWCRev là một phần của TortoiseSVN.

SubWCRev là chương trình bảng điều khiển Windows có thể được sử dụng để đọc trạng thái bản sao làm việc Subversion và tùy chọn thực hiện thay thế từ khóa trong tệp mẫu.Điều này thường được sử dụng như là một phần của quá trình xây dựng như một phương tiện kết hợp thông tin sao chép làm việc vào đối tượng bạn đang xây dựng. Thông thường nó có thể được sử dụng để bao gồm số sửa đổi trong một hộp "Giới thiệu".

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

6

trong Makefile của bạn, thêm:

SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"' 
CFLAGS := $(SVNDEV) ... 

sau đó bạn có thể sử dụng macro SVN_REV bất cứ nơi nào trong mã của bạn, ví dụ:

printf ("Version: SVN %s\n", SVN_REV); 
0

Một tốt up-to-date giải pháp:

Tạo Makefile chứa dòng sau (trong cùng thư mục với YourFile.dox):

sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox 

YourFile.dox nên chứa này:

... 
PROJECT_NUMBER   = "Revision RevNumber" 
... 

Bây giờ là:

  1. sed thay thế RevNumber trong .dox với đầu ra của svnversion (được thực hiện trong thư mục chính của kho lưu trữ của bạn) và lưu tệp đã sửa đổi thành YourFileDummy.dox
  2. doxygen được thực hiện trên YourFileDummy.dox để tạo tài liệu
  3. Tài liệu của bạn giờ đây sẽ chứa số sửa đổi!
Các vấn đề liên quan