Subversion nói chung hoạt động tốt nhất mà không cần khóa, sử dụng phương pháp “ Sao Chép-Sửa Đổi-Hợp Nhất ” mô tả trước đây trong phần “Giải pháp Sao chép-Sửa đổi-Hợp nhất” . Tuy nhiên có một số ít trường hợp khi bạn có thể cần phải thực hiện một số hình thức của chính sách khóa.
Bạn đang sử dụng các tập tin “ không hợp nhất được ”, ví dụ, các tập tin đồ họa. Nếu hai người thay đổi cùng một tập tin, sáp nhập là không thể, vì vậy một trong các bạn sẽ mất các thay đổi của họ.
Công ty của bạn đã luôn luôn sử dụng một hệ thống kiểm soát khóa sửa đổi trong quá khứ và đã có một quyết định quản lý mà “ khóa là tốt nhất ” .
Trước hết bạn cần đảm bảo rằng máy chủ Subversion của bạn được nâng cấp lên phiên bản 1.2. Phiên bản trước đó hoàn toàn không hỗ trợ khóa. Nếu bạn đang sử dụng truy cập file://
, thì tất nhiên máy khách của bạn cần được cập nhật.
Trong đoạn này, và hầu như bất kỳ đâu trong cuốn sách này, các từ “khóa” và “mở khóa” mô tả cách thức loại lẫn nhau giữa những người dùng để tránh đụng độ các cam kết. Thật không may, có hai loại “khóa” mà Subversion, và do đó trong cuốn sách này, thỉnh thoảng cần được quan tâm.
The second is working copy locks
, used internally by Subversion to prevent clashes between multiple Subversion clients operating on the same working copy. Usually you get these locks whenever a command like update/commit/... is interrupted due to an error. These locks can be removed by running the cleanup command on the working copy, as described in phần “Dọn sạch”.
Và thứ ba, các tập tin và thư mục có thể được khóa nếu chúng đang được sử dụng bởi các tiến trình khác, ví dụ nếu bạn có một tài liệu word mở trong Word, tập tin đó bị khóa và không thể truy cập được bởi TortoiseSVN.
Bạn thường có thể quên những loại khóa này cho tới khi có chuyện gì đó sai xảy ra đòi hỏi bạn phải để ý đến chúng. Trong cuốn sách này, “khóa” có nghĩa loại đầu tiên trừ khi điều trái ngược là rõ ràng từ ngữ cảnh hoặc được tuyên bố rõ ràng.
Theo mặc định, không có gì là bị khóa và bất cứ ai có quyền truy cập cam kết có thể cam kết những thay đổi ở bất kỳ tập tin vào bất cứ lúc nào. Những người khác sẽ cập nhật bản sao làm việc của họ định kỳ và thay đổi trong kho sẽ được sáp nhập với những thay đổi địa phương.
Nếu bạn Nhận được một khóa trên một tập tin, thì chỉ có bạn có thể cam kết tập tin đó. Cam kết của tất cả các người dùng khác sẽ bị chặn cho đến khi bạn phát hành khóa. Một tập tin bị khóa không thể được sửa đổi trong bất kỳ cách nào trong kho, vì vậy nó không thể bị xóa hay đổi tên hoặc, ngoại trừ b chủ sở hữu khóa.
Khóa là không được giao cho một người dùng cụ thể, nhưng cho một người dùng cụ thể và một bản sao làm việc. Có một khóa trong một bản sao làm việc cũng ngăn cản cùng người sử dụng đó cam kết các tập tin bị khóa từ một bản sao làm việc khác.
Ví dụ, hãy tưởng tượng rằng người sử dụng Jon có một bản sao làm việc trên máy tính văn phòng của ông. Ở đó, ông bắt đầu làm việc trên một hình ảnh, và do đó có được một khóa trên tập tin đó. Khi ông rời khỏi văn phòng của ông, ông chưa xong với tập tin đó, vì vậy ông ta không giải phóng khóa. Trở lại nhà Jon cũng có một bản sao làm việc và quyết định làm việc nhiều hơn một chút về dự án. Tuy nhiên, ông không có thể sửa đổi hoặc cam kết cùng tập tin hình ảnh đó, bởi vì các khóa cho tập tin đó đang nằm trong bản sao làm việc trong văn phòng.
Tuy nhiên, những người dùng khác sẽ không nhất thiết phải biết rằng bạn đã lấy khóa ra. Trừ khi họ kiểm tra tình trạng khóa thường xuyên, việc đầu tiên mà họ sẽ biết về nó là khi cam kết của họ thất bại, mà trong nhiều trường hợp không phải là rất hữu ích. Để làm cho nó dễ dàng hơn để quản lý ổ khóa, có một thuộc tính Subversion mới svn:needs-lock
. Khi thuộc tính này được thiết lập (với bất kỳ giá trị nào) trên một tập tin, bất cứ khi nào tập tin được kiểm xuất hoặc cập nhật, các bản sao địa phương được đặt chỉ đọc trừ khi bản sao làm việc đó nắm giữ khóa cho tập tin đó. Điều này hoạt động như một lời cảnh báo rằng bạn không nên chỉnh sửa tập tin đó trừ khi bạn lấy khóa trước. Các tập tin này được phiên bản và được đánh dấu chỉ đọc bằng một lớp phủ đặc biệt trong TortoiseSVN để cho biết rằng bạn cần phải có được khóa trước khi biên t.
Các khóa được ghi lại bằng vị trí bản sao làm việc cũng như chủ sở hữu. Nếu bạn có nhiều bản sao làm việc (ở nhà, tại nơi làm việc) thì bạn chỉ có thể giữ một khóa ở một trong những bản sao làm việc đ.
Nếu một trong những đồng nghiệp của bạn có được một khóa và sau đó đi vào kỳ nghỉ mà không phát hành nó, bạn sẽ làm gì? Subversion cung cấp một phương tiện để các ép buộc ổ khóa. Phát hành một khóa giữ bởi người khác được gọi là Phá vỡ khóa, và ép buộc có được một khóa mà người khác đã giữ được gọi là Trộm cắp khóa. Đương nhiên đây không phải là điều bạn nên coi nhẹ nếu bạn muốn vẫn là bạn bè với các đồng nghiệp.
Các khóa được ghi lại trong kho, và một mã thông báo khóa được tạo ra trong bản sao của bạn làm việc tại địa phương. Nếu có sự khác biệt, ví dụ nếu một người nào khác đã phá vỡ khóa, mã thông báo khóa địa phương trở thành không hợp lệ. Kho luôn luôn là tham khảo cuối cùng.
Chọn tập tin trong bản sao làm việc của bạn mà bạn muốn lấy khóa, sau đó chọn lệnh
→ .
Một hộp thoại xuất hiện, cho phép bạn nhập một bình luận, để những người khác có thể thấy lý do tại sao bạn đã khóa tập tin. Bình luận là tùy chọn và chỉ được sử dụng với các kho dựa trên Svnserve. Nếu (và chỉ nếu) bạn cần phải ăn cắp khóa từ một người nào khác, chọn hộp kiểm Ăn cắp khóa , sau đó nhấn vào .
Bạn có thể bật thuộc tính dự án tsvn:logtemplatelock
để cung cấp một mẫu thông điệp cho người dùng để điền vào như thông điệp khóa. Tham khảo phần “Thiết lập Dự án” để được hướng dẫn làm thế nào để b các thuộc tính.
Nếu bạn chọn một thư mục và sau đó sử dụng mỗi tập tin trong mỗi thư mục con được chọn để khóa. Nếu bạn thực sự muốn khóa toàn bộ một hệ thống phân cấp, đó là cách để làm điều đó, nhưng bạn có thể trở nên rất không được ưa thích với các đồng nghiệp nếu bạn khóa họ ra khỏi toàn bộ dự án. Sử dụng cẩn th ...
→ hộp thoại khóa sẽ mở ra vớiĐể chắc chắn rằng bạn không quên phát hành một khóa bạn không còn cần nữa, tập tin bị khóa được hiển thị trong hộp thoại cam kết và được lựa chọn theo mặc định. Nếu bạn tiếp tục với cam kết, các khóa bạn giữ trên các tập tin được lựa chọn được loại bỏ, ngay cả nếu các tập tin không được sửa đổi. Nếu bạn không muốn phát hành một khóa trên các tập tin nào đó, bạn có thể bỏ chọn chúng (nếu chúng không bị sửa đổi). Nếu bạn muốn giữ khóa trên một tập tin bạn đã sửa đổi, bạn phải kích hoạt hộp kiểm Giữ khóa trước khi bạn cam kết các thay đổi của bạn.
Để phát hành một khóa theo cách thủ công, chọn các tập tin trong bản sao làm việc của bạn mà bạn muốn phát hành các khóa, sau đó chọn lệnh
→ Không có gì hơn nữa để nhập vì thế TortoiseSVN sẽ liên lạc với các kho lưu trữ và phát hành các ổ khóa. Bạn cũng có thể sử dụng lệnh này vào một thư mục để phát hành tất cả các ổ khóa theo cách đệ quy.
Để xem những khóa nào mà bạn và những người khác giữ, bạn có thể sử dụng → . Các mã khóa tại địa phương hiển thị ngay lập tức. Để kiểm tra cho các ổ khóa được giữ bởi những người khác (và để xem nếu có ổ khóa nào của bạn bị phá vỡ hoặc bị đánh cắp), bạn cần phải bấm vào .
Từ trình đơn ngữ cảnh ở đây, bạn cũng có thể nhận được và phát hành ổ khóa, cũng như phá vỡ và ăn cắp các khóa được tổ chức bởi những người khác.
Nếu bạn phá vỡ hoặc ăn cắp khóa của người khác mà không nói với họ, bạn có khả năng có thể gây ra mất việc làm. Nếu bạn đang làm việc với các loại tập tin không hợp nhất được và bạn ăn cắp khóa của người khác, một khi bạn phát hành các khóa họ được tự do để kiểm nhập những thay đổi của họ và ghi đè lên của bạn. Subversion không mất dữ liệu, nhưng bạn có bị mất bảo vệ làm việc nh mà việc khóa đem lại cho bạn.
Như đã đề cập ở trên, cách hiệu quả nhất để sử dụng khóa là bật thuộc tính svn:needs-lock
trên các tập tin. Tham khảo phần “Thiết lập Dự án” để được hướng dẫn làm thế nào để bật các thuộc tính. Tập tin với thuộc tính này được bật sẽ luôn luôn được kiểm tra và cập nhật với cờ chỉ đọc trừ khi bản sao của bạn làm việc nắm giữ một khóa.
Xin nhắc lại, TortoiseSVN sử dụng một lớp phủ đặc biệt để cho biết điều này.
Nếu bạn điều hành một chính sách mà tất cả các tập tin bị khóa thì bạn có thể tìm thấy nó dễ dàng hơn để sử dụng tính năng auto-props của Subversion để thiết lập thuộc tính tự động mỗi khi bạn thêm các tập tin mới. Đọc phần “Thiết lập thuộc tính tự động” để biết thêm thông tin.
Khi bạn tạo một kho lưu trữ mới với Subversion 1.2 hoặc cao hơn, bốn mẫu hook được tạo ra ở thư mục hooks
trong kho. Chúng được gọi là trước và sau khi nhận được một khóa, và trước và sau khi phát hành một khóa.
Đó là một ý tưởng tốt để cài đặt một kịch bản hook sau-khóa
và sau-mở khóa
trên máy chủ mà sẽ gửi email cho thấy các tập tin đã bị khóa. Với một kịch bản tại chỗ, tất cả người dùng của bạn có thể được thông báo nếu ai đó khóa / mở khóa một tập tin. Bạn có thể tìm thấy một kịch bản móc ví dụ tại hooks/post-lock.tmpl
trong thư mục kho lưu trữ của bạn.
Bạn cũng có thể sử dụng móc để không cho phép phá vỡ hoặc ăn cắp ổ khóa, hoặc có thể hạn chế nó đến một quản trị viên được chỉ định. Hoặc có thể bạn muốn gửi email cho chủ sở hữu khi một trong những ổ khóa của họ bị phá vỡ hoặc bị đánh cắp.
Đọc phần “kịch bản móc phía máy chủ” để tìm hiểu thêm.