Làm thế nào để tôi tạo một chi nhánh?


Câu trả lời:


349

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 copylệ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 tagsvà / hoặc branchesthư 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.


211
"Bản sao svn" có lợi thế là nó sẽ giữ lại lịch sử trước khi phân nhánh. Sao chép thủ công vào thư mục khác sẽ không.
WhyNotHugo

5
Cũng lưu ý rằng thường là một ý tưởng tồi để gắn thẻ hoặc các thư mục con của "thân cây". Điều này gây khó khăn cho việc theo dõi thư mục con nào được phân nhánh và hầu hết các công cụ sẽ bị nhầm lẫn bởi các nhánh này (ví dụ: chuyển nhánh sẽ có nghĩa là cấu trúc thư mục của các thay đổi WC, sẽ gây nhầm lẫn cho IDE và công cụ xây dựng). Chỉ cần luôn luôn nhánh "thân cây".
sleske

1
@Will Thực sự svn cpsử 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
Walty Yeung

607

Tạo một nhánh mới bằng cách sử dụng svn copylệ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"

24
Tiếp theo sử dụng 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.
Jakub Narębski

3
Lưu ý: trong một số trường hợp, bạn sẽ cần sử dụng--parentstùy chọn vớisvn copy!
Jakub Narębski

1
vì một số lý do tôi đã sử dụng cmd này và nó không hoạt động, nhưng khi tôi thay đổi svn + ssh thành https thì nó đã hoạt động. Tôi đã làm gì sai? ý nghĩa của svn + ssh là gì? Cảm ơn!
Aviel Gross

trước tiên bạn phải tạo một thư mục mới trong chi nhánh của mình -> svn mkdir host.example.com/repose/project/branches/NAME_OF_BRANCH -m "tạo thư mục chi nhánh để giữ tất cả các chi nhánh"
Silvio Troia

Nếu tôi bỏ qua -mtù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 -mnó 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) .
Hi-Angel

33

Nếu bạn repo có sẵn qua https, bạn có thể sử dụng lệnh này để phân nhánh ...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"

26
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

2
Không có yêu cầu để sử dụng rsynctheo cách này. svn cpcũng sẽ sao chép bất kỳ thay đổi cục bộ.
Kevin Panko

@KevinPanko Nó sẽ không sao chép những thay đổi không được cam kết.
Parag Bafna

4
Nó, được xác nhận với svn, phiên bản 1.8.5
Kevin Panko

Tôi đang tự hỏi về điều này. Đây có vẻ là tùy chọn dễ nhất và AFAI nhớ, đây là những gì tôi đã làm khi tôi làm việc với SVN 3 năm trước. Nhưng sự khác biệt giữa cái này và cái làm việc trực tiếp với url máy chủ là gì?
oligofren

@KevinPanko Bạn có biết liệu nó cũng sao chép các tệp mới được tạo không?
John Hamilton

16

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

14

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 .


13

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 switchlệnh:

svn switch http://my.repo.url/myrepo/branches/newBranchName

3
Bạn cũng có thể sử dụng ^ thay cho Root Kho lưu trữ
chim

11

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:

Svnmerge.py

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!


6
  • Tạo một thư mục mới bên ngoài dự án hiện tại của bạn. Bạn có thể đặt cho nó bất kỳ tên nào. (Ví dụ: Bạn có thanh toán cho một dự án có tên "Tùy chỉnh". Và nó có nhiều dự án, như "Project1", "Project2" .... Và bạn muốn tạo một nhánh của "Project1". Vì vậy, trước tiên hãy mở " Tùy chỉnh ", nhấp chuột phải và tạo một thư mục mới và đặt tên là" Project1Branch ").
  • Nhấp chuột phải vào "Myproject1" .... TortoiseSVN -> Chi nhánh / Thẻ.
  • Chọn bản sao làm việc.
  • Mở trình duyệt .... Chỉ cần song song trên "Tới URL".
  • Chọn tùy chỉnh ..... nhấp chuột phải rồi Thêm Thư mục. và đi qua thư mục mà bạn đã tạo. Đây là "Project1Branch". Bây giờ bấm nút OK để thêm.
  • Hãy kiểm tra banch mới này.
  • Một lần nữa đi đến dự án của bạn mà chi nhánh bạn muốn tạo. Nhấp chuột phải vào TorotoiseSVN -> chi nhánh / thẻ. Sau đó chọn bản sao làm việc. Và bạn có thể cung cấp URL làm tên chi nhánh của bạn. như {địa chỉ IP của bạn / svn / AAAA / Tùy chỉnh / Project1Branch}. Và bạn có thể đặt tên trong URL để nó sẽ tạo thư mục chỉ với tên này. Giống như {Địa chỉ IP của bạn / svn / AAAA / Tùy chỉnh / Project1Branch / MyProject1Branch}.
  • Nhấn nút OK. Bây giờ bạn có thể thấy các bản ghi trong ... bản sao làm việc của bạn sẽ được lưu trữ trong chi nhánh của bạn.
  • Bây giờ bạn có thể kiểm tra ... và cho phép bạn tận hưởng công việc của mình. :)

-1

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.

  1. Nhấp chuột phải vào thân cây được cập nhật từ máy windows cục bộ
  2. Chọn Rùa
  3. Nhấp vào chi nhánh / Thẻ
  4. Chọn đường dẫn Đến trong kho SVN. Lưu ý rằng URL đích được cập nhật theo đường dẫn và tên chi nhánh đã cho
  5. Không tạo thư mục bên trong các nhánh trong trình duyệt kho lưu trữ
  6. Thêm đường dẫn nhánh. Ví dụ: chi nhánh /
  7. Thêm một thông điệp tường trình có ý nghĩa để bạn tham khảo
  8. Nhấn Ok, điều này tạo thư mục mới trên hệ thống cục bộ
  9. Kiểm tra chi nhánh được tạo vào thư mục mới
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.