Một giải pháp khả năng mở rộng là để làm svn-external trên thư mục giải pháp để các dự án nhập khẩu của bạn xuất hiện song song với dự án khác của bạn S. Lý do cho điều này được đưa ra dưới đây.
Sử dụng thư mục con riêng cho các dự án "được nhập", ví dụ: externals
, qua svn-external có vẻ như là một ý tưởng hay cho đến khi bạn có các phụ thuộc không tầm thường giữa các dự án. Ví dụ, dự án Giả sử một phụ thuộc vào dự án trên dự án B, và dự án B của dự án C. Nếu bạn sau đó có một giải pháp S với dự án A, bạn sẽ kết thúc với cấu trúc thư mục sau:
# BAD SOLUTION #
S
+---S.sln
+---A
| \---A.csproj
\---externals
+---B <--- A's dependency
| \---B.csproj
\---externals
\---C <--- B's dependency
\---C.csproj
Sử dụng kỹ thuật này, bạn thậm chí có thể có nhiều bản sao của một dự án duy nhất trong cây của mình. Điều này rõ ràng không phải là những gì bạn muốn.
Hơn nữa, nếu dự án của bạn sử dụng phụ thuộc NuGet, chúng thường được tải trong thư mục cấp cao nhất packages
. Điều này có nghĩa là Tham chiếu NuGet của các dự án trong thư mục con externals
sẽ bị hỏng.
Ngoài ra, nếu bạn sử dụng Git ngoài SVN, cách thay đổi theo dõi được đề xuất là có kho lưu trữ Git riêng cho từng dự án và sau đó là kho lưu trữ Git riêng cho giải pháp sử dụng git submodule
cho các dự án bên trong. Nếu một mô-đun con Git không phải là một thư mục con ngay lập tức của mô-đun cha, thì Lệnh submodule Git sẽ tạo một bản sao là một thư mục con ngay lập tức. Một lợi ích khác của việc có tất cả các dự án trên cùng một lớp là bạn có thể tạo "siêu giải pháp", chứa các dự án từ tất cả các giải pháp của bạn (được theo dõi qua Git hoặc svn-external), cho phép bạn để kiểm tra với một giải pháp xây dựng lại duy nhất mà bất kỳ thay đổi nào bạn đã thực hiện cho một dự án duy nhất đều phù hợp với tất cả các dự án khác.
# GOOD SOLUTION #
S
+---S.sln
+---A
| \---A.csproj
+---B <--- A's dependency
| \---B.csproj
\---C <--- B's dependency
\---C.csproj
Nguồn
2013-10-03 09:10:08
Tôi thích cách tiếp cận này, tôi sẽ phải đọc thêm về các phần bên ngoài. Tôi giả sử bạn có thể thay đổi mọi thứ và cam kết với repo đúng khi bạn đã hoàn tất. Khung làm việc rất trẻ (gần đây chúng tôi nhận ra rằng chúng tôi đã viết cùng một mã trên toàn bộ địa điểm) để có thể thực hiện các thay đổi nhanh chóng cao trong danh sách ưu tiên. Đảm bảo rằng những thay đổi đó cũng không phá vỡ mọi thứ khác cũng quan trọng. –