2008-08-01 26 views
82

Stack Overflow có một số phiên bản lật đổ ở phía dưới:Làm cách nào để đồng bộ số sửa đổi SVN với trang web ASP.NET của tôi?

svn revision: 679

Tôi muốn sử dụng phiên bản tự động như vậy với tôi .NET Web Site/Application, Windows Forms, các dự án WPD/giải pháp.

Làm cách nào để triển khai tính năng này?

+0

[http://stackoverflow.com/questions/29802/how-do-you-do-version-a-web-application#30168][1] [1]: http://stackoverflow.com/questions/29802/how-do-you-do-version-a-web-application#30168 – Azhar

+0

@Balloon Nếu bạn đang sử dụng TortoiseSVN, bạn có thể sử dụng [SubWCRev] được đóng gói (http: //tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html) chương trình. Nó truy vấn một bản sao làm việc và chỉ cho bạn biết số sửa đổi cao nhất. Phải thừa nhận rằng, điều này dường như là một cách tiếp cận phía máy khách đối với một vấn đề phía máy chủ, nhưng vì nó là một chương trình dòng lệnh tốt, bạn sẽ có thể nắm bắt đầu ra của nó để sử dụng khá dễ dàng. – nickf

+0

Nếu bạn không sử dụng TortoiseSVN cho SubWCRev như tôi đã nói [ở đây] (http://stackoverflow.com/questions/163/how-do-i-sync-the-svn-revision-number-with-my-aspnet -web-site # 65747), bạn có thể sử dụng [svnversion] (http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.ref.svnversion). – nickf

Trả lời

29

Hình như Jeff đang sử dụng CruiseControl.NET dựa trên một số leafing qua bảng điểm podcast. Điều này dường như có khả năng triển khai tự động từ kiểm soát nguồn đến sản xuất. Đây có phải là nơi mà việc chèn đang xảy ra không?

+2

Nếu bạn không sử dụng CruiseControl.Net sau đó kiểm tra câu trả lời của tôi (shameless plug!) - http://stackoverflow.com/questions/163/how-do-i-sync-the-svn-revision-number-with -my-aspnet-web-site # 374153 ; o) – Andrew

+0

liên kết bị hỏng @saint_groceon –

24

Bạn có thể làm điều đó bằng cách thêm những điều sau đây bất cứ nơi nào trong mã của bạn

$Id:$ 

Vì vậy, ví dụ @ Jeff đã làm:

<div id="svnrevision">svn revision: $Id:$</div> 

và khi kiểm tra trong máy chủ thay thế Id $: $ với số phiên bản hiện tại. Tôi cũng found this reference.

Ngoài ra còn có $ ngày: $, $ Rev: $, $ Revision: $

+5

Điều này sẽ không chèn số sửa đổi của thay đổi cuối cùng vào tệp cụ thể đó không? Tôi đã thử thiết lập kho lưu trữ hai tệp và thay đổi một và thử cả xuất và thanh toán và tệp còn lại ở 1 trong cả hai trường hợp. –

+0

lassevk là chính xác, điều này chỉ thay đổi khi bản thân tệp thay đổi. –

+0

Sử dụng VisualSVN và TortoiseSVN, thêm $ Id: $ vừa khiến trang hiển thị "$ Id: $". Nó có thể hữu ích để lưu ý những gì máy chủ/khách hàng câu trả lời này hoạt động theo. – Travis

9

$rev và những người khác thích nó là bản sửa đổi cho các tệp riêng lẻ, vì vậy chúng sẽ không thay đổi trừ khi tệp thay đổi. Số lượng trên trang web là (rất có thể, tôi giả định ở đây) số sửa đổi svn cho toàn bộ dự án. Điều đó khác với các bản sửa đổi tệp mà người khác đã chỉ đến.

Trong trường hợp này, tôi giả định rằng CCNET đang kéo số sửa đổi của dự án và viết lại một phần của trang web với số đó. Bất kỳ giải pháp CI nào cũng có thể thực hiện việc này, tự thiết lập điều này với CCNET và Teamcity (mặc dù không phải các trang web, nhưng tự động phiên bản các phiên bản triển khai/lắp ráp).

Để bạn thực hiện việc này, hãy sử dụng giải pháp CI hỗ trợ hoặc sử dụng quy trình xây dựng (MSbuild/Nant) để lưu phiên bản đó và ghi vào tệp trước khi "triển khai".

26

Chúng tôi thực hiện việc này với xUnit.net cho các bản dựng tự động của chúng tôi. Chúng tôi sử dụng CruiseControl.net (và đang thử TeamCity). Tác vụ MSBuild mà chúng ta chạy để tích hợp liên tục sẽ tự động thay đổi số xây dựng cho chúng ta, do đó tệp ZIP xây dựng kết quả chứa một tập hợp các tệp DLL và EXE được phiên bản đúng.

chúng tôi MSBuild file chứa một tham chiếu UsingTask cho một DLL mà không thay thế biểu thức chính quy: (bạn đang chào đón để sử dụng DLL này, vì nó được bao phủ bởi giấy phép MS-PL cũng)

 
    <UsingTask 
    AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll" 
    TaskName="CodePlex.MSBuildTasks.RegexReplace"/> 

Tiếp theo, chúng tôi trích xuất số bản dựng, được cung cấp tự động bởi hệ thống CI. Bạn cũng có thể yêu cầu nhà cung cấp kiểm soát nguồn cung cấp số phiên bản nguồn nếu bạn muốn, nhưng chúng tôi thấy rằng xây dựng # trong hệ thống CI hữu ích hơn, vì không chỉ có thể thấy kết quả tích hợp bằng số CI xây dựng, liên kết quay lại (các) changeset được bao gồm trong bản dựng.

 
<!-- Cascading attempts to find a build number --> 

<PropertyGroup Condition="'$(BuildNumber)' == ''"> 
    <BuildNumber>$(BUILD_NUMBER)</BuildNumber> 
</PropertyGroup> 
<PropertyGroup Condition="'$(BuildNumber)' == ''"> 
    <BuildNumber>$(ccnetlabel)</BuildNumber> 
</PropertyGroup> 
<PropertyGroup Condition="'$(BuildNumber)' == ''"> 
    <BuildNumber>0</BuildNumber> 
</PropertyGroup> 

(Chúng tôi cố gắng BUILD_NUMBER, đó là từ TeamCity, sau đó ccnetlabel, đó là từ CC.net, và nếu không phải là hiện tại, chúng tôi mặc định 0, để chúng ta có thể kiểm tra xây dựng kịch bản tự động bằng tay.)

Tiếp theo, chúng ta có một nhiệm vụ mà đặt số xây dựng thành một file GlobalAssemblyInfo.cs mà chúng ta liên kết vào tất cả các dự án của chúng tôi:

 
<Target Name="SetVersionNumber"> 
    <RegexReplace 
     Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)' 
     Replacement='AssemblyVersion("$1.$(BuildNumber)")' 
     Files='GlobalAssemblyInfo.cs'/> 
    <Exec Command="attrib -r xunit.installer\App.manifest"/> 
</Target> 

này tìm thấy thuộc tính AssemblyVersion và thay thế số phiên bản abcd với abcBuildNumber. Chúng tôi thường sẽ để lại nguồn kiểm tra vào cây với ba phần đầu tiên của số người xây dựng cố định, và thứ tư ở số không (ví dụ, hôm nay là 1.0.2.0).

Trong quá trình xây dựng, hãy đảm bảo tác vụ SetVersionNumber đứng trước tác vụ xây dựng của bạn. Cuối cùng, chúng tôi sử dụng tác vụ Zip để nén kết quả xây dựng để chúng tôi có lịch sử các tệp nhị phân cho mỗi bản dựng tự động.

10

@Balloon Nếu bạn đang sử dụng TortoiseSVN, bạn có thể sử dụng chương trình đóng gói SubWCRev. Nó truy vấn một bản sao làm việc và chỉ cho bạn biết số sửa đổi cao nhất. Phải thừa nhận rằng, điều này dường như là một cách tiếp cận phía máy khách đối với một vấn đề phía máy chủ, nhưng vì nó là một chương trình dòng lệnh tốt, bạn sẽ có thể nắm bắt đầu ra của nó để sử dụng khá dễ dàng.

5

Để thêm vào câu trả lời @ BradWilson của: "Bạn cũng có thể nhận được nhà cung cấp kiểm soát nguồn của bạn để cung cấp số nguồn sửa đổi nếu bạn muốn"

Để kết nối Subversion và MSBuild: MSBuild Community Tasks Project

17

Nếu bạn đang sử dụng ASP.Net MVC (như StackOverflow làm), tôi đã viết một easy to follow 3-step guide on how to automatically get and display the latest SVN revision. Hướng dẫn được truyền cảm hứng bằng cách suy nghĩ cho chính mình về câu hỏi này! : O)

+0

Âm thanh tuyệt vời, Liên kết bị hỏng mặc dù! –

+0

Đã sửa lỗi! cảm ơn đã cho tôi biết: o) – Andrew

+1

Đây là giải pháp tuyệt vời để chúng tôi tự động hiển thị phiên bản dựa trên các bản chỉnh sửa SVN của chúng tôi. Một lợi thế là nó không yêu cầu một cuộc gọi đến máy chủ SVN của bạn. –

Các vấn đề liên quan