2012-06-22 17 views
17

Tôi sử dụng Assembla để quản lý kho lưu trữ Subversion của mình. Tôi đã bắt đầu một số sửa đổi lớn cho codebase của mình và muốn tạo một Thẻ cho bản sửa đổi sản xuất mới nhất của tôi (mà tôi quên làm khi tôi đẩy bản rev đó trực tiếp vào sản xuất cách đây vài tuần).Làm cách nào để tạo thẻ từ bản sửa đổi cũ trong Subversion khi sử dụng Assembla?

Tôi hiện đang sửa đổi 588 và muốn tạo Thẻ sửa đổi 577. Làm thế nào để tôi thực hiện việc này từ dòng lệnh bằng Subversion trong Assembla?

Giả URL Assembla SVN của tôi là: https://subversion.assembla.com/svn/my_assembla_svn_directory/

Trả lời

40

Bạn luôn có thể sử dụng tham số -r để đề cập đến một phiên bản cụ thể. Khi làm như vậy, bạn cũng có thể sử dụng tính năng ghim @rev sửa đổi để đảm bảo bạn đang đề cập đến bố cục của bản sửa đổi Subversion tại một phiên bản cụ thể. Sau đây sẽ tạo ra một thẻ từ thân cây trên phiên bản 577 và gọi thẻ này REV-1.2:

$ svn cp -r 577 https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk 
    https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REV-1.2 

Nếu bạn không có một trunk, branches, và tags thư mục, bạn sẽ cần phải di chuyển công việc của bạn để tạo ra một số:

$ # Move the current directory to the "trunk" 
$ svn cp https://subversion.assembla.com/svn/my_assembla_svn_directory \ 
    https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk 

$ # Make a corresponding tags and branches directories too 
$ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/branches 
$ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/tags 

$ # Now, we can delete the old location. Let your developers know this, 
$ # so they're not surprised by this and will be able to do a "svn relocate" 
$ svn delete https://subversion.assembla.com/svn/my_assembla_svn_directory/ 

$ # Whoops. I should have done the tagging when I had a chance. 
$ #Oh well, we'll use the `@rev` pinning: 

$ svn -r557 cp https://subversion.assembla.com/svn/[email protected] \ 
     https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REL-1.2 

Subversion không thực hiện gắn thẻnhánh trừ như một bản sao. Đây không phải là bất thường. Perforce thực hiện phân nhánh theo cùng một cách. Trong thực tế, một khi bạn có được sử dụng đến nó, nó hoạt động ra thực sự tốt:

  • Thật dễ dàng để xem chi nhánh và các thẻ hợp lệ (chỉ cần làm một svn ls trên thư mục bên phải
  • Lịch sử hoàn toàn của thẻ và các chi nhánh Bạn có thể thấy ai đã thực hiện thay đổi, khi nào, tại sao, v.v.
  • Lịch sử hoàn chỉnh của thẻ hoặc chi nhánh được hiển thị.Nếu ai đó thay đổi thẻ hoặc chi nhánh, bạn sẽ thấy ai đã làm điều đó rất rõ ràng.
  • Nó không khuyến khích loại phân nhánh skterter bạn thấy trong nhiều hệ thống kiểm soát phiên bản khác khi nhà phát triển chọn và chọn các nhánh và nhánh khác nhau để phân nhánh hoặc gắn thẻ. Điều đó làm cho việc theo dõi lịch sử rất khó thực hiện. Đề án của Subversion khuyến khích bạn nghĩ về các nhánh và thẻ ảnh hưởng đến tất cả các tệp trong một dự án.
6

Straight từ SVN documentation:

Nếu bạn muốn tạo một bản chụp của/calc/trunk chính xác như nó trông giống trong sửa đổi HEAD, làm bản sao của nó:

$ svn copy http://svn.example.com/repos/calc/trunk \ 
      http://svn.example.com/repos/calc/tags/release-1.0 \ 
      -m "Tagging the 1.0 release of the 'calc' project." 

Committed revision 902. 

Ví dụ này giả định rằng thư mục/calc/tags đã tồn tại. (Nếu không, bạn có thể tạo nó bằng svn mkdir.) Sau khi bản sao hoàn tất, thư mục release-1.0 mới sẽ là ảnh chụp nhanh về cách thư mục/trunk xem trong bản sửa đổi CHÍNH tại thời điểm bạn thực hiện bản sao. Tất nhiên, bạn có thể muốn chính xác hơn về chính xác sửa đổi bạn sao chép, trong trường hợp ai đó khác có thể đã cam kết thay đổi đối với dự án khi bạn không tìm kiếm. Vì vậy, nếu bạn biết rằng sửa đổi 901/calc/trunk chính xác là ảnh chụp bạn muốn, bạn có thể chỉ định bằng cách chuyển -r 901 tới lệnh svn copy.

(tôi nhấn mạnh)

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