Điều này sau my previous question về TFS 2010 và khả năng tạo một thay đổi.TFS2010: Truy xuất tất cả các thay đổi được liên kết với chi nhánh (đệ quy đầy đủ)
Trước đây tôi đã sử dụng nhãn để xác định phiên bản của chương trình, nhưng vì nhãn không phải là điểm cố định kịp thời, giờ tôi đang sử dụng các nhánh.
Đây là cách hệ thống phân cấp chi nhánh trông giống như:
Như bạn có thể thấy, có hai ứng dụng khác nhau mà là chi nhánh của thân cây: APP_A
(ứng dụng A) và APP_B
(ứng dụng B). Cả hai đều gần giống nhau, nhưng có một số khác biệt chức năng.
Dưới đây là quá trình để tạo ra một phiên bản mới của ứng dụng (chẳng hạn phiên bản 1.3):
- Các
Main trunk
được sửa đổi (chức năng mới được bổ sung, sửa lỗi ...) - Từ sửa đổi
Main trunk
, một chi nhánh mới được tạo ra:Main trunk 1.3
APP_A
chi nhánh có thể được sửa đổi, chức năng rất độc đáo củaAPP_A
sẽ làm việc với sửa đổi v1.3APP_B
chi nhánh có thể được sửa đổi, vì vậy chức năng độc đáo củaAPP_B
sẽ làm việc với sửa đổi v1.3Main trunk 1.3
được sáp nhập vàoAPP_A
vàAPP_B
, vì vậy cả haiAPP_A
vàAPP_B
ứng dụng nhận những sửa đổi củaMain trunk
- Từ sửa đổi
APP_A
chi nhánh , một chi nhánh mới được tạo ra:APP_A_1.3
- Từ sửa đổi
APP_B
chi nhánh, một chi nhánh mới được tạo ra:APP_B_1.3
Mục tiêu của tôi là có thể tạo ra một thay đổi giữa APP_A_1.3
và APP_A_1.2
.
Bằng danh sách thay đổi, tôi có nghĩa là danh sách các WorkItems. Mỗi changeset được đăng ký được liên kết với một hoặc nhiều WorkItem (ví dụ như một mục Bug). Tôi muốn có thể nhận danh sách tất cả các workitems được liên kết với một changeset đã ảnh hưởng đến APP_A_1.3
: những thay đổi đó có thể đến từ Main trunk
(bước 1 ở trên), APP_A branch
(bước 3 ở trên) hoặc thậm chí APP_A_1.3
chi nhánh chính nó (nếu hotfix được đăng ký sau khi chi nhánh đã được tạo).
Để có được danh sách này của workitems, tôi đã cố gắng để có được danh sách của tất cả các changesets được "liên kết" để APP_A_1.2
("liên kết" = mã đã được kiểm tra-in trong changeset tại là trên cành APP_A_1.2
) và danh sách tất cả các thay đổi được "liên kết" thành APP_A_1.3
.
Sau đó, tôi sẽ có thể biết những thay đổi nào được "liên kết" thành APP_A_1.3
và không được "liên kết" với APP_A_1.2
.Từ tập hợp con của changesets, tôi sẽ nhận được tất cả WorkItems liên quan và do đó thay đổi của tôi.
Đây là vấn đề của tôi: làm thế nào tôi có thể nhận được danh sách ALL changesets được "liên kết" với một chi nhánh được chỉ định? Tôi đang sử dụng API TFS 2010 cho mã C#.
Các đầu vào của chương trình của tôi (mà có thể lấy tất cả các changesets cho một chi nhánh nào đó) sẽ là tên của chi nhánh (nói APP_A_1.2
), và đầu ra sẽ là danh sách các changesets sau:
- changesets áp dụng trên
APP_A_1.2
chi nhánh tự - changesets áp dụng trên
APP_A
chi nhánh trước khiAPP_A_1.2
đã được tạo ra - changesets áp dụng trên
Main trunk 1.2
chi nhánh trước khi nó đã được sáp nhập vàoAPP_A
- changesets áp dụng trên
Main trunk
chi nhánh trước khiMain trunk 1.2
đã được tạo ra
Tôi đã viết những mẩu mã sau đây để có được tất cả những changesets:
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1ChangeSets = myVersionControlServer.QueryHistory(
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
0,
RecursionType.Full,
null,
null,
null,
int.MaxValue,
false,
false).OfType<Changeset>().Select(z => z.ChangesetId).ToList();
Thậm chí nếu RecursionType.Full
được quy định, các mã trên chỉ trả về các thay đổi đã được đăng ký trên chính chi nhánh APP_A_1.2
. Điều này giống với lệnh "History" trên khung nhìn Source Code Explorer trong Visual Studio.
Sau đó, tôi đã thử các đoạn mã sau:
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1MergedChangeSets = myVersionControlServer.QueryMerges(
null,
null,
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
null,
null,
RecursionType.Full).Select(z => z.SourceVersion).ToList();
này trả changesets đó đã được kiểm tra-in trên APP_A_1.2
chi nhánh + những người được cheked-in trên APP_A
chi nhánh trước khi APP_A_1.2
đã được tạo ra. Tốt hơn nhiều, nhưng không đủ. Tôi không thể tìm cách làm cho phép đệ quy hoạt động với các nhánh "ở trên" APP_A
(Main trunk
trong trường hợp của tôi) ...
Có ai có ý tưởng không?
Ngoài ra, bất kỳ ý tưởng tốt hơn để có được những changelog giữa hai chi nhánh đều được chào đón ... Thx.
Câu hỏi hay! ATM bạn đang mắc kẹt với cách truy xuất chính xác các Thay đổi. Một khi bạn sẽ nhận được chúng, hãy xem xét bài viết tuyệt vời này bởi B.Hodges, điều đó sẽ giúp bạn tương quan một danh sách các Thay đổi với một danh sách các mục công việc: http://blogs.msdn.com/b/buckh/archive/2012 /02/01/listing-the-work-items-associated-with-changesets-for-a-path.aspx – pantelif