This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

Chỉ Định Phiên Bản

Như chúng tôi đã mô tả trong the section called “Phiên bản”, số phiên bản trên Subversion rất rõ ràng—đó là những số nguyên mà càng ngày càng lớn dần khi bạn chuyển giao nhiều thay đổi vào những dữ liệu đã được định phiên bản của bạn. Tuy nhiên, nó sẽ không kéo dài trước khi bạn không còn có thể nhớ chính xác điều gì xảy ra trên mỗi phiên bản. May mắn thay, quy trình Subversion điển hình thường không yêu cầu bạn cung cấp số phiên bản một cách tuỳ tiện cho các thao tác Subversion mà bạn thực hiện. Với những thao tác mà yêu cầu chỉ định phiên bản, thông thường bạn cung cấp một số phiên bản mà bạn thấy trong email chuyển giao, trong phần kết quả của những thao tác Subversion, hoặc trong những ngữ cảnh khác mà có thể chứa đựng một ý nghĩa nào đó cho một số phiên bản cụ thể.

[Note] Note

Tham chiếu tới một số phiên bản với tiếp đầu ngữ r (ví dụ, r314) là một cách thực hành đã được thiết lập trong cộng đồng Subversion và nó được hỗ trợ và khuyến khích bởi nhiều công cụ có liên quan đến Subversion. Trong đa số những vị trí mà bạn sẽ chỉ định một số phiên bản trên dòng lệnh, bạn có thể dùng cú pháp rNNN.

Nhưng thỉnh thoảng bạn cần xác định thời điểm mà bạn không nhớ số phiên bản hoặc không có sẵn. Vì vậy bên cạnh số phiên bản số nguyên, svn cho phép nhiều dạng khác của chỉ định phiên bản: từ khoá phiên bản và ngày phiên bản.

[Note] Note

Tính đa dạng của chỉ định phiên bản của Subversion có thể được hoà trộn và phù hợp với nhau khi được sử dụng để chỉ định vùng phiên bản. Ví dụ, bạn có thể dùng -r REV1:REV2 trong đó REV1 là từ khoá phiên bản và REV2 là số phiên bản, hoặc REV1 là ngày tháng và REV2 là từ khoá phiên bản, và vân vân. Những chỉ định phiên bản riêng lẻ được đánh giá một cách riêng biệt, vì vậy bạn có thể đưa giá trị bất kỳ mà bạn muốn vào trong cả hai phía của dấu hai chấm.

Từ khoá Phiên bản

Ứng dụng khách Subversion có thể hiểu một số lượng từ khoá phiên bản. Từ khoá có thể được sử dụng với tuỳ chọn --revision (-r) thay vì tham số số nguyên và sẽ được chuyển đổi thành một số phiên bản cụ thể bởi Subversion:

HEAD

Phiên bản mới nhất (hoặc trẻ nhất) trong kho lưu trữ.

BASE

Số phiên bản của một mục trên bản sao làm việc. Nếu mục được thay đổi trên máy cục bộ, BASE đề cập tới cách mà mục xuất hiện mà không có những thay đổi cục bộ này.

COMMITTED

Phiên bản gần đây nhất trước hoặc trùng với BASE mà mục được thay đổi.

PREV

Phiên bản ngay trước phiên bản cuối cùng mà mục được thay đổi. Về mặt kỹ thuật, nó cơ bản là COMMITTED-1.

Như được thể hiện trong phần mô tả, những từ khoá phiên bản PREV, BASE, và COMMITTED chỉ được sử dụng khi tham chiếu tới đường dẫn bản sao làm việc—chúng không áp dụng cho URL của kho lưu trữ. HEAD thì ngược lại, có thể được sử dụng kết hợp với cả hai loại đường dẫn này.

Đây là những ví dụ về từ khoá phiên bản trong thực tế:

$ svn diff -r PREV:COMMITTED foo.c
# hiển thị thay đổi cuối cùng được chuyển giao vào foo.c

$ svn log -r HEAD
# hiển thị ghi chú nhật ký cho chuyển giao mới nhất vào kho lưu trữ

$ svn diff -r HEAD
# so sánh bản sao làm việc của bạn (tất cả những thay đổi cục bộ) với
# phiên bản mới nhất của cây trên kho lưu trữ

$ svn diff -r BASE:HEAD foo.c
# so sánh phiên bản chưa chỉnh sửa của tập tin foo.c với phiên bản
# mới nhất của foo.c trên kho lưu trữ

$ svn log -r BASE:HEAD
# hiển thị tất cả nhật ký chuyển giao cho thư mục đã định phiên bản hiện tại 
# kể từ lần cập nhật cuối cùng của bạn

$ svn update -r PREV foo.c
# tua lại thay đổi cuối cùng trên tập tin foo.c, giảm số phiên bản làm việc của foo.c

$ svn diff -r BASE:14 foo.c
# so sánh phiên bản không chỉnh sửa của foo.c với foo.c trong phiên bản 14

Ngày Phiên bản

Số phiên bản không cung cấp được thông tin gì bên ngoài hệ thống kiểm soát phiên bản, tuy nhiên đôi khi bạn cần liên hệ một thời điểm thực bên ngoài với một thời điểm trong lịch sử phiên bản. Để thoả mãn yêu cầu này, tuỳ chọn --revision (-r) cũng có thể chấp nhận chỉ định ngày tháng được bao bởi dấu ngoặc nhọn ({}). Subversion chấp nhận ngày tháng và giờ giấc theo chuẩn ISO-8601 và thêm một vài chuẩn khác. Đây là một vài ví dụ.

$ svn update -r {2006-02-17}
$ svn update -r {15:30}
$ svn update -r {15:30:00.200000}
$ svn update -r {"2006-02-17 15:30"}
$ svn update -r {"2006-02-17 15:30 +0230"}
$ svn update -r {2006-02-17T15:30}
$ svn update -r {2006-02-17T15:30Z}
$ svn update -r {2006-02-17T15:30-04:00}
$ svn update -r {20060217T1530}
$ svn update -r {20060217T1530Z}
$ svn update -r {20060217T1530-0500}
…
[Note] Note

Ghi nhớ rằng đa số shell tối thiểu sẽ yêu cầu bạn trích dẫn hoặc (quote) ngược lại thoát (escape) bấy kỳ khoảng trắng nào mà được cung cấp như là chỉ định ngày phiên bản. Một vài shell cũng có thể báo lỗi với những dấu ngoặc nhọn chưa được thoát. Tham khảo tài liệu shell của bạn để nắm rõ yêu cầu cụ thể đối với môi trường của bạn.

Khi bạn chỉ định một ngày tháng, Subversion phân giải ngày tháng này thành phiên bản mới nhất của kho lưu trữ của ngày tháng này và tiếp tục thực thi trên số phiên bản vừa được phân giải:

$ svn log -r {2006-11-28}
------------------------------------------------------------------------
r12 | ira | 2006-11-27 12:31:51 -0600 (Mon, 27 Nov 2006) | 6 lines
…

Bạn cũng có thể chỉ định một khoảng ngày tháng. Subversion sẽ tìm thấy tất cả các phiên bản giữa hai ngày:

$ svn log -r {2006-11-20}:{2006-11-29}
…
[Warning] Warning

Bởi vì nhãn thời gian của một phiên bản được lưu trữ như một thuộc tính phi-phiên-bản và có-thể-điều-chỉnh (xem the section called “Properties”) nên nhãn thời gian của phiên bản có thể được thay đổi để tạo ra tình huống giả của một trình tự thời gian thực, hoặc có thể xoá hoàn toàn. Khả năng của Subversion có thể chuyển đổi chính xác ngày phiên bản thành số phiên bản thực phụ thuộc vào nhãn thời gian đang duy trì một trình tự tuần tự—phiên bản càng mới thì nhãn thời gian càng mới. Nếu trình tự này không được duy trì, bạn có thể sẽ thấy rằng khi sử dụng ngày tháng để chỉ định vùng phiên bản trong kho lưu trữ của bạn không phải luôn luôn trả về dữ liệu mà bạn mong đợi.