2013-07-02 32 views
7

Thẻ được triển khai dưới dạng nhánh trong Subversion. Vì vậy, câu hỏi của tôi: sau khi tạo thẻ Subversion - làm cách nào để đóng nhánh này sao cho không ai thêm ngẫu nhiên thay đổi cho chi nhánh thẻ đó?Làm thế nào để đóng một chi nhánh thẻ lật đổ?

Ví dụ xem xét sau bố trí thư mục:

 
calc+-trunk 
    |-branches 
    |-tags 

Tại một số thân cây điểm là sẵn sàng cho việc phát hành và được gắn thẻ:

$ svn cp svn://example.net/calc/trunk svn://example.net/calc/tags/v1.0 

Bây giờ tai nạn sau đây có thể xảy ra:

$ svn co svn://example.net/calc/tags/v1.0 
$ cd v1.0 
$ # change files 
$ svn ci 

(có lẽ URL trên đã được sao chép và thay vào đó là một chi nhánh có nghĩa là)

Làm cách nào để đóng chi nhánh calc/tags/v1.0 sao cho số svn ci cuối cùng sẽ thất bại?

Tôi gọi nó là đóng - cách khác bạn có thể gọi hoạt động đó chuyển một chi nhánh sang chế độ chỉ đọc - hoặc một cái gì đó tương tự.

+1

Về các chi nhánh này, chúng tôi có quy tắc trong công ty chúng tôi đổi tên chi nhánh thành {old name} _closed. Vì vậy, chúng tôi vẫn biết rằng chúng tôi đã tạo ra một chi nhánh tính năng (với một tên hữu ích) và đóng nó sau này sau khi sáp nhập trở lại. – Bjoern

Trả lời

6

Bạn có thể kiểm soát các cam kết thông qua móc trước khi cam kết. This one sẽ cho phép bạn tạo, nhưng không chỉnh sửa thẻ. Bạn có thể kiểm soát quyền truy cập vào các nhánh (ngăn ngừa các thay đổi trên chúng hoặc giữ người có thể thực hiện thay đổi đối với một nhóm người được chọn).

Tôi đã tạo bản gốc khi tôi nhận ra rằng người dùng có thể vô tình chỉnh sửa thẻ mà không có ý nghĩa. Tôi muốn một cách mà người dùng có thể tạo thẻ nhưng không thể sửa đổi thẻ khi thẻ đã được tạo.

Bạn kiểm soát móc thông qua tệp điều khiển (và tệp điều khiển đó thậm chí có thể nằm trong kho lưu trữ để dễ truy cập). Dòng đầu tiên ngăn mọi người viết thư đến thư mục /tags (hoặc bất kỳ thư mục con nào). Điều thứ hai cho phép người dùng sao chép một chi nhánh vào một thẻ mới, nhưng họ không thể sửa đổi bất kỳ điều gì trong thẻ đó.

[FILE You cannot edit a tag once it's been created] 
file = /tags/** 
access = read-only 
users = @ALL 

[FILE You cannot edit a tag once it's been created] 
file = /tags/* 
access = add-only 
users = @ALL 

Bạn có thể làm tương tự trong nhánh. Tại đây, chi nhánh 2.2 bị khóa hoàn toàn và chỉ Bob và Carol mới có thể thực hiện các thay đổi đối với chi nhánh 2.3 khi nó sẵn sàng phát hành:

[FILE No one is allowed to touch the 2.2 branch. It is dead] 
file = /branches/2.2 
access = read-only 
users = @all 

[FILE Only Bob and Carol can make changes to the 2.3 branch] 
file = /branches/2.3/** 
access = read-only 
users = @ALL 

[FILE Only Bob and Carol can make changes to the 2.3 branch] 
file = /branches/2.3/** 
access = read-write 
users bob, carol 
1

Bạn có ba tùy chọn, từ dễ nhất/nhanh nhất đến phức tạp nhất.

  1. Xóa nhánh (nó không thực sự bị xóa, bạn luôn có thể truy xuất nhánh).
  2. Tạo quy tắc trong tệp cấu hình ủy quyền dựa trên đường dẫn của bạn (giả sử bạn sử dụng một tệp) để từ chối ghi vào đường dẫn đó.
  3. Cài đặt (hoặc sửa đổi, nếu đã tồn tại) tập lệnh móc trước khi cam kết từ chối mọi cam kết đối với đường dẫn đó.
+0

Hm, xóa nó cũng sẽ xóa nó khỏi danh sách 'calc/tags', phải không? Tùy chọn 3 có vẻ như là cách hữu ích nhất - bởi vì người dùng có thể viết dưới 'calc/tags' - tức là khi tạo thẻ _new_. Chỉ cần cam kết với các thẻ hiện tại sẽ bị cấm. Bạn có thể thêm một ví dụ móc bằng chứng về khái niệm? – maxschlepzig

+0

Việc xóa sẽ làm cho nó không còn nhìn thấy được ở bản sửa đổi 'HEAD' (hoặc bất kỳ sửa đổi nào sau khi sửa đổi nó), nhưng nó vẫn còn trong kho lưu trữ. Xem http://stackoverflow.com/questions/464384/svn-pre-commit-hook-for-avoiding-changes-to-tags-subdirectories để được hướng dẫn về một tập lệnh tương tự. – alroc

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