Câu trả lời:
Chi nhánh trong Subversion được tạo điều kiện bởi một cơ sở sao chép rất rất nhẹ và hiệu quả.
Phân nhánh và gắn thẻ có hiệu quả như nhau. Chỉ cần sao chép toàn bộ thư mục trong kho lưu trữ sang một nơi khác trong kho lưu trữ bằng svn copy
lệnh.
Về cơ bản, điều này có nghĩa là theo quy ước, sao chép thư mục nghĩa là gì - cho dù đó là bản sao lưu, thẻ, chi nhánh hay bất cứ thứ gì. Tùy thuộc vào cách bạn muốn nghĩ về mọi thứ (thông thường tùy thuộc vào công cụ SCM nào bạn đã sử dụng trước đây), bạn cần thiết lập cấu trúc thư mục trong kho lưu trữ của mình để hỗ trợ kiểu của bạn.
Phong cách phổ biến là để có một loạt các thư mục ở trên cùng của kho lưu trữ của bạn gọi tags
, branches
, trunk
, vv - cho phép bạn sao chép toàn bộ của bạn trunk
(hoặc sub-bộ) vào tags
và / hoặc branches
thư mục. Nếu bạn có nhiều dự án, bạn có thể muốn sao chép loại cấu trúc này theo từng dự án:
Có thể mất một chút thời gian để làm quen với khái niệm này - nhưng nó hoạt động - chỉ cần đảm bảo rằng bạn (và nhóm của bạn) rõ ràng về các quy ước mà bạn sẽ sử dụng. Đó cũng là một ý tưởng tốt để có một quy ước đặt tên tốt - một cái gì đó cho bạn biết lý do tại sao nhánh / thẻ được tạo ra và liệu nó có còn phù hợp hay không - hãy xem xét các cách lưu trữ các nhánh đã lỗi thời.
svn cp
sử dụng các bản sao giá rẻ, nó không sao chép các tập tin thực tế trong quá trình phân nhánh. Xem svnbook.red-bean.com/en/1.1/ch04s02.html
Tạo một nhánh mới bằng cách sử dụng svn copy
lệnh như sau:
$ svn copy svn+ssh://host.example.com/repos/project/trunk \
svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
-m "Creating a branch of project"
svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .
(nếu bạn muốn chuyển thanh toán hiện tại sang chi nhánh mới) hoặc svn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH
(nếu bạn muốn có chi nhánh mới trong thư mục riêng biệt) để bắt đầu làm việc trên chi nhánh mới được tạo.
--parents
tùy chọn vớisvn copy
!
-m
tùy chọn, nó sẽ nói như thế svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist
. Với -m
nó nói svn: E205009: Local, non-commit operations do not take a log message or revision properties
. (Tôi đã thay thế các địa chỉ, nhưng chúng tồn tại, ngoại trừ, ofc, thư mục nhánh mới và toàn bộ đường dẫn + url mà SVN vì lý do nào đó đã hợp nhất trong lỗi) .
svn cp /trunk/ /branch/NEW_Branch
Nếu bạn có một số thay đổi cục bộ trong trung kế thì hãy sử dụng Rsync
để đồng bộ hóa các thay đổi
rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
rsync
theo cách này. svn cp
cũng sẽ sao chép bất kỳ thay đổi cục bộ.
Giả sử bạn muốn tạo một nhánh từ tên thân cây (như "TEST"), sau đó sử dụng:
svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST
Thông thường, bạn sẽ sao chép nó vào svn + ssh: //host.example.com/repose/project/branches/mybranch để bạn có thể giữ một vài nhánh trong kho lưu trữ, nhưng cú pháp của bạn là hợp lệ.
Dưới đây là một số lời khuyên về cách thiết lập bố trí kho lưu trữ của bạn .
Mẹo hàng đầu cho người dùng SVN mới; điều này có thể giúp một chút với việc nhận được các URL chính xác một cách nhanh chóng.
Chạy svn info
để hiển thị thông tin hữu ích về chi nhánh thanh toán hiện tại.
URL sẽ (nếu bạn chạy svn trong thư mục gốc) cung cấp cho bạn URL bạn cần sao chép từ đó.
Ngoài ra để chuyển sang nhánh mới được tạo, sử dụng svn switch
lệnh:
svn switch http://my.repo.url/myrepo/branches/newBranchName
Nếu bạn thậm chí có kế hoạch sáp nhập chi nhánh của mình, tôi khuyên bạn nên xem xét điều này:
Tôi nghe thấy Subversion 1.5 xây dựng nhiều hơn theo dõi hợp nhất, tôi không có kinh nghiệm về điều đó. Dự án của tôi là trên 1.4.x và svnmerge.py là một trình bảo vệ cuộc sống!
Dưới đây là các bước để tạo một nhánh từ thân cây bằng TortoiseSVN trong máy windows. Điều này rõ ràng cần máy khách TortoiseSVN được cài đặt.