Đôi khi nó rất hữu ích để xây dựng một bản sao làm việc được tạo ra bởi một số kiểm xuất khác nhau. Ví dụ, bạn có thể muốn các tập tin hoặc thư mục con khác nhau đến từ các địa điểm khác nhau trong một kho lưu trữ, hoặc có lẽ từ các kho khác nhau hoàn toàn. Nếu bạn muốn mọi người sử dụng có cùng một cách bố trí, bạn có thể xác định thuộc tính svn:externals
để kéo vào nguồn tài nguyên được chỉ định tại các địa điểm nơi chúng là cần thiết.
Hãy nói rằng bạn hãy kiểm xuất một bản sao làm việc của /project1
sang D:\dev\project1
. Chọn thư mục D:\dev\project1
, nhấp chuột phải và chọn → từ trình đơn ngữ cảnh. Hộp thoại Thuộc Tính xuất hiện. Sau đó vào tab Subversion. Ở đó, bạn có thể thiết lập các thuộc tính. Nhấp vào . Trong hộp thoại thuộc tính, hoặc nhấp đúp chuột vào svn:externals
nếu nó đã tồn tại, hoặc nhấp vào nút và chọn externals
từ trình đơn. Để thêm vào một thành phần bên ngoài mới, nhấp vào và sau đó điền vào các thông tin cần thiết trong hộp thoại hiển thị.
URL phải được thoát ra đúng đắn nếu không chúng sẽ không làm việc, ví dụ như bạn phải thay thế mỗi khoảng trống bằng %20
.
Nếu bạn muốn đường dẫn địa phương bao gồm các khoảng trống hoặc ký tự đặc biệt khác, bạn có thể đặt nó bên trong dấu ngoặc kép, hoặc bạn có thể sử dụng ký tự \
(Dấu gạch chéo ngược) như ký tự thoát kiểu phong cách Unix shell trước bất kỳ ký tự đặc biệt nào. Trong quá trình này cũng có nghĩa là bạn phải sử dụng /
(Dấu gạch chéo) như một dấu phân cách đường dẫn. Lưu ý rằng hành vi này mới có trong Subversion 1.6 và sẽ không làm việc với các máy khách cũ.
You should strongly consider using explicit revision numbers in all of your externals definitions, as described above. Doing so means that you get to decide when to pull down a different snapshot of external information, and exactly which snapshot to pull. Besides the common sense aspect of not being surprised by changes to third-party repositories that you might not have any control over, using explicit revision numbers also means that as you backdate your working copy to a previous revision, your externals definitions will also revert to the way they looked in that previous revision, which in turn means that the external working copies will be updated to match the way they looked back when your repository was at that previous revision. For software projects, this could be the difference between a successful and a failed build of an older snapshot of your complex code base.
Hộp thoại biên tập cho thuộc tính svn:externals
cho phép bạn chọn các thành phần ngoài và tự động đặt chúng một cách rõ ràng vào bản chỉnh sửa CHÍNH.
Nếu dự án bên ngoài là trong cùng một kho lưu trữ, bất kỳ thay đổi bạn thực hiện sẽ được bao gồm trong danh sách cam kết khi bạn cam kết dự án chính của bạn.
If the external project is in a different repository, any changes you make to the external project will be shown or indicated when you commit the main project, but you have to commit those external changes separately.
Nếu bạn sử dụng các URL tuyệt đối svn:externals
trong các định nghĩa và bạn có di chuyển bản sao làm việc của bạn (ví dụ, nếu URL của kho của bạn thay đổi), sau đó các thành phần bên ngoài của bạn sẽ không thay đổi và có thể không làm việc nữa.
Để tránh các vấn đề như vậy, máy khách Subversion phiên bản 1.5 và mới hơn hỗ trợ các URL bên ngoài tương đối. Bốn phương pháp khác nhau để chỉ định một URL tương đối được hỗ trợ. Trong các ví dụ sau đây, giả sử chúng ta có hai kho: một ở http://example.com/svn/repos-1
và một tại http://example.com/svn/repos-2
. Chúng ta đã kiểm xuất http://example.com/svn/repos-1/project/trunk
vào C:\Working
và thuộc tính svn:externals
được thiết lập trên thân.
These URLs always begin with the string ../
for example:
../../widgets/foo common/foo-widget
This will extract http://example.com/svn/repos-1/widgets/foo
into C:\Working\common\foo-widget
.
Lưu ý rằng URL là tương đối với địa chỉ URL của thư mục với thuộc tính svn:externals
, không phải với thư mục nơi thành phần bên ngoài được ghi vào đĩa.
These URLs always begin with the string ^/
for example:
^/widgets/foo common/foo-widget
This will extract http://example.com/svn/repos-1/widgets/foo
into C:\Working\common\foo-widget
.
You can easily refer to other repositories with the same SVNParentPath
(a common directory holding several repositories). For example:
^/../repos-2/hammers/claw common/claw-hammer
This will extract http://example.com/svn/repos-2/hammers/claw
into C:\Working\common\claw-hammer
.
URLs beginning with the string //
copy only the scheme part of the URL. This is useful when the same hostname must the accessed with different schemes depending upon network location; e.g. clients in the intranet use http://
while external clients use svn+ssh://
. For example:
//example.com/svn/repos-1/widgets/foo common/foo-widget
This will extract http://example.com/svn/repos-1/widgets/foo
or svn+ssh://example.com/svn/repos-1/widgets/foo
depending on which method was used to checkout C:\Working
.
URLs beginning with the string /
copy the scheme and the hostname part of the URL, for example:
/svn/repos-1/widgets/foo common/foo-widget
This will extract http://example.com/svn/repos-1/widgets/foo
into C:\Working\common\foo-widget
. But if you checkout your working copy from another server at svn+ssh://another.mirror.net/svn/repos-1/project1/trunk
then the external reference will extract svn+ssh://another.mirror.net/svn/repos-1/widgets/foo
.
You can also specify a peg and operative revision for the URL if required. To learn more about peg and operative revisions, please read the corresponding chapter in the Subversion book.
If you specify the target folder for the external as a subfolder like in the examples above, make sure that all folders in between are versioned as well. So for the examples above, the folder common
should be versioned!
While the external will work in most situations properly if folders in between are not versioned, there are some operations that won't work as you expect. And the status overlay icons in explorer will also not show the correct status.
Nếu bạn cần thêm thông tin về làm cách nào TortoiseSVN xử lý các thuộc tính đọc phần “Thiết lập Dự án” .
Để tìm hiểu về các phương pháp khác nhau để truy cập các tiểu dự án chung hãy đọc phần “Bao gồm các tiểu dự án chung” .
Kể từ Subversion 1.6, bạn có thể thêm các thành phần bên ngoài trong một tập tin vào bản sao làm việc của bạn bằng cách sử dụng các cú pháp tương tự như đối với các thư mục. Tuy nhiên, có một số hạn chế.
The path to the file external must be a direct child of the folder where you set the svn:externals
property.
URL cho một tập tin bên ngoài phải ở trong cùng một kho lưu trữ như địa chỉ URL tập tin bên ngoài sẽ được chèn vào; tập tin thành phần ngoài liên kho lưu trữ không được hỗ trợ.
Một tập tin bên ngoài cư xử giống như bất kỳ tập tin được phiên bản khác trong nhiều khía cạnh, nhưng chúng không thể được di chuyển hoặc xóa bằng cách sử dụng các lệnh bình thường, thay vào đó thuộc tính svn:externals
phải được sửa đổi.
If you already have a working copy of the files or folders you want to include as externals in another working copy, you can simply add those via drag and drop from the windows explorer.
Simply right drag the file or folder from one working copy to where you want those to be included as externals. A context menu appears when you release the mouse button: if you click on that context menu entry, the svn:externals
property is automatically added. All you have to do after that is commit the property changes and update to get those externals properly included in your working copy.