2009-03-16 26 views
8

Tôi đã tạo một tệp có tên version.ini nằm dưới sự kiểm soát phiên bản (/trunk/version.ini) bây giờ tôi muốn tạo một hook đăng bài để cập nhật tệp đó bằng phiên bản mới nhất. Nhưng tôi không biết lệnh nào có thể làm điều đó. Tôi biết tôi có thông số này:đăng commit hook để cập nhật một tập tin theo phiên bản

#!/bin/sh 

REPOS = "$1" 
REV = "$2" 

Nhưng làm cách nào tôi có thể thay thế nội dung của tệp đó mà không thực hiện sửa đổi mới? và vẫn có những thay đổi trong repo của tôi?

UPDATE: Kể từ khi có lẽ tôi havent được rõ ràng tôi sẽ cố gắng một explination chi tiết hơn: phép nói rằng tôi có repo này:/svn/Repos/dự án/trunk/và trong đó tôi có một tập tin gọi là Version.ini rằng đang được kiểm soát phiên bản. Những gì tôi muốn làm là trên mỗi cam kết cập nhật tập tin đó để sửa đổi mới. Cho phép nói rằng bản sửa đổi hiện tại là 263 tôi muốn tập tin đó có 263 bản ghi trong đó. Và để trả lời một câu trả lời dưới đây bạn không thể sử dụng từ khóa vì chúng chỉ hoạt động nếu tôi cập nhật tập tin đó và tôi không muốn làm điều đó.

Hy vọng tôi có ý nghĩa và cảm ơn bạn đã được trợ giúp. Chúc mừng

+0

Câu hỏi của bạn không rõ ràng. Các móc là tâm để làm một cái gì đó phía máy chủ. Cập nhật một tệp trong kho lưu trữ là hành động từ máy khách đến máy chủ. –

Trả lời

7

Điều bạn thực sự muốn không phải là cách để sửa đổi các cam kết của bạn, nhưng một cái gì đó như svn:keywords. Thật không may, như bạn có thể đọc trong hộp "$ GlobalRev $ ở đâu?" điều này không thực sự làm những gì bạn muốn. Thay vào đó, bạn sẽ phải viết một kịch bản để gọi và phân tích đầu ra của svnversion và bằng cách nào đó đặt kết quả vào tệp của bạn như một phần của bản dựng.

Bây giờ, để trả lời câu hỏi theo nghĩa đen của nó vẫn còn thú vị để suy nghĩ về những gì bạn có thể và không thể làm trong svn kịch bản móc:

Bạn không thể thay đổi một cam kết từ sau cam kết nối

Bởi thời gian sau khi commit hook chạy, cam kết đã được hoàn thành (như tên của nó) nên việc thay đổi các tập tin nằm ngoài câu hỏi. Bạn chỉ có thể kiểm tra các thay đổi tại thời điểm này.

Bạn không thể sửa đổi cấp phát cam kết từ một pre-cam kết nối hoặc

Bạn có thể kiểm tra nội dung của một giao dịch cấp phát từ một pre-cam kết nối bằng cách sử dụng công cụ svnlook với công tắc --transaction , nhưng bạn không thể thay đổi nó.

Nếu thay đổi tùy ý có thể được thực hiện trong móc trước khi cam kết, thì rõ ràng máy chủ sẽ cần báo cáo lại những thay đổi này cho ứng dụng khách svn. Nếu không, khách hàng sẽ nghĩ rằng các tệp của anh ấy đang ở bản sửa đổi được cam kết, trong khi chúng thực sự khác nhau. Nếu khách hàng svn sẽ chấp nhận những thay đổi được báo cáo như vậy, nó sẽ dẫn đến khả năng làm việc của bạn bị xóa sổ bởi cam kết. Đó sẽ là một tính năng đáng ngạc nhiên đối với một hệ thống điều khiển phiên bản, để đặt nó nhẹ nhàng. Không cần phải nói subversion không cho phép điều này.

5

Không có cách nào để thay đổi bất kỳ thứ gì trong repo mà không sửa đổi số sửa đổi.

Giải pháp là đặt special keywords (tìm kiếm svn:keywords) vào tệp và yêu cầu SVN thay thế chúng trong khi thanh toán. Dường như các giá trị này đến từ kho lưu trữ nhưng biểu diễn của tệp trong kho lưu trữ sẽ không thay đổi.

Có thể bạn đang tìm $ LastChangedRevision $ (hoặc $ Rev $ cho ngắn).

Một giải pháp khác là thêm một quy tắc để xây dựng công cụ của bạn/Makefile/bất cứ điều gì trong đó sử dụng svn info trên thư mục gốc của dự án của bạn để xác định phiên bản hiện tại và đặt đó vào một tập tin tạm thời (đó là không thêm vào của bạn repo).

+0

sẽ không hoạt động ... vì tôi phải sửa đổi tệp đó để có các từ khóa thay thế –

+0

SVN sẽ làm điều đó cho bạn khi svn: từ khóa được đặt chính xác. –

+0

Nó giống như một bộ lọc cho phép bạn xem mọi thứ trong kho lưu trữ không thực sự ở đó. –

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