2010-01-19 36 views
16

Có thể ghi đè lên chi nhánh với một chi nhánh khác không?TFS: Ghi đè chi nhánh với một chi nhánh khác

Hoặc là giải pháp duy nhất để xóa chi nhánh B và tạo chi nhánh mới từ Chi nhánh A?

+0

tại sao bạn muốn thực hiện điều đó? –

+0

Chúng tôi có một chi nhánh với một số mã chưa hoàn thành kiểm tra vào nó, mã không liên quan nữa. – Henrik

Trả lời

20

Trừ khi bạn đang chạy TFS 2010, tôi khuyên bạn nên sử dụng Merge + Resolve để đưa hai nhánh trở lại đồng bộ.

# cancel out of conflict dialog 
tf merge A B -r -force -version:T 
tf resolve B -r -auto:acceptTheirs 

Điều đó sẽ cân bằng mọi thứ trừ các tệp chỉ được tạo trong B và không bao giờ được hợp nhất lại. Sử dụng Folder Diff để tìm & hòa giải chúng.

Xóa + trang trại trong năm 2005/2008 sẽ gây nguy cơ xung đột không gian tên không gian để gỡ lỗi trong tương lai. Các tùy chọn khác, nếu bạn có năm 2008, là để Destroy + rebranch. Rõ ràng rằng giả sử bạn là ok với mất tất cả lịch sử từ bản gốc của B.

+3

"Xóa + rebranch trong 2005/2008 chạy nguy cơ xung đột không gian tên nightmarish-to-debug trong tương lai." - Amen đó! – AakashM

+0

Vẫn hoạt động trong TFS2013 –

+0

Ý của bạn là gì? "Trừ khi bạn đang chạy TFS 2010"? Bạn có sử dụng cái gì khác ngoài kết hợp hợp nhất và giải quyết mà bạn đã mô tả ở đây cho TFS 2010 không? Tại sao? –

-1

Xóa chi nhánh B và tạo một hình mới từ chi nhánh A.

Có một lý do tại sao bạn không muốn làm điều này?

+0

Tôi muốn giữ cùng tên, và tôi tự hỏi nếu nó có thể là một vấn đề để xóa và rebranch. – Henrik

+0

Không có vấn đề gì mà tôi có thể nghĩ đến (ngoài việc xóa bỏ nhánh cũ sẽ khó nếu bạn muốn làm điều đó) –

+0

Câu trả lời này đã bị bỏ qua - tôi đoán - vì lịch sử sẽ bị mất. Nhưng quan trọng là lịch sử đó thực sự như thế nào, nếu mục tiêu của bạn là làm cho nhánh mục tiêu giống hệt với nguồn gốc? Đây vẫn là một lựa chọn trong một số tình huống. –

16

Trong Visual Studio 2010, tôi chỉ sử dụng merge vô căn cứ để đạt được điều này:

Tf merge/vô căn cứ [đường dẫn nguồn] [ đường dẫn đích]/đệ quy

Khi cửa sổ bật lên xung đột giải quyết, chọn tùy chọn 'Take source version'. Lưu ý, các tệp chỉ tồn tại trong mục tiêu sẽ không bị xóa bằng cách sử dụng kết hợp không có cơ sở, nhưng bạn có thể so sánh 2 nhánh để xác định sự khác biệt và xóa chúng theo cách thủ công.

Tham khảo: http://msdn.microsoft.com/en-us/library/bb668976.aspx

+1

Tôi nghĩ rằng đây sẽ là câu trả lời đúng cho vấn đề. Như tôi đã viết ở trên tùy chọn 'lực lượng' sẽ không hữu ích trong mọi trường hợp, bởi vì nó vẫn dựa trên lịch sử changeset chứ không phải trên nội dung tập tin. – user2323704

4

tôi đã thành công sử dụng Richard Berg's answer nhưng có cảm giác như có một vài chi tiết mà bị mất tích. Đây là cách tôi có thể loại bỏ các khác biệt liên quan đến các giải pháp xung đột và các thay đổi chưa được hợp nhất lại nguồn và làm cho mục tiêu giống hệt với nguồn. Lưu ý rằng đây là cách tôi sẽ đề cập đến các chi nhánh - nguồn là một trong đó không nên được thay đổi trong khi mục tiêu là một trong đó nên được thực hiện giống hệt với nguồn.

  1. Đảm bảo rằng bạn có phiên bản mới nhất của cả nhánh nguồn và mục tiêu trong vùng làm việc của mình. Cũng đảm bảo rằng bạn không có bất kỳ thay đổi đang chờ xử lý nào.
  2. Hủy tất cả các ứng cử viên để hợp nhất từ ​​nhánh mục tiêu vào nhánh nguồn. Điều này là để ngăn chặn bất kỳ sự khác biệt nào từ việc vô tình sáp nhập trở lại vào nhánh nguồn sau này.

tf merge $/target $/source /recursive /discard

Lưu ý: Hãy chắc chắn rằng bạn đã thiết lập thư mục làm việc đến một con đường trong không gian làm việc của bạn để công cụ tf biết mà không gian làm việc và máy chủ TFS để sử dụng.

  1. Kiểm tra rằng có sự khác biệt giữa các nhánh cần được giải quyết - nếu không, không cần thực hiện thêm hành động nào.

    3.1.Xem lịch sử trên nhánh mục tiêu và tìm sự kết hợp hoàn chỉnh cuối cùng từ nguồn tới đích (bỏ qua bất kỳ sự kết hợp chọn anh đào nào vì điều đó sẽ dẫn đến nhiều kết quả sai) - lưu ý số changeset. Một giải pháp thay thế dễ dàng hơn là thực hiện hợp nhất từ ​​nhánh nguồn vào nhánh đích để lấy phiên bản mới nhất từ ​​nhánh nguồn vào nhánh đích.

    3.2. Nhấp chuột phải vào nhánh nguồn trong Source Control Explorer và chọn Compare từ menu ngữ cảnh. Chỉ lấy phiên bản mới nhất cho nguồn nếu bạn đã sáp nhập nhánh nguồn vào nhánh đích trong bước 2.1. Nếu không, hãy chọn Thay đổi từ Phiên bản nguồn | Gõ combo box và sau đó nhập số changeset từ bước 2.1.

    3.3. Sử dụng mũi tên thả xuống trên nút Duyệt bên cạnh trường Đường dẫn đích để chọn Đường dẫn máy chủ. Sau đó chọn nhánh mục tiêu trong hộp thoại mở ra.

enter image description here

3,4. Nhấp vào OK trên hộp thoại So sánh để thực hiện so sánh.

  1. Thực hiện hợp nhất từ ​​nhánh nguồn với nhánh đích và chuyển tùy chọn lực. Điều này sẽ bỏ qua lịch sử hợp nhất và hợp nhất các thay đổi ngay cả khi chúng đã được hợp nhất trong quá khứ.

tf merge $/source $/target /recursive /force /version:T

Lưu ý: phiên bản đặc tả T chỉ ra phiên bản mới nhất.

  1. Đóng hộp thoại xung đột hợp nhất.

  2. Tự động giải quyết tất cả xung đột bằng cách chọn nhánh nguồn.

tf resolve $/target /recursive -auto:TakeTheirs

  1. Kiểm tra trong.

  2. Xác nhận rằng có không còn bất kỳ ứng cử viên cho hòa trộn từ mục tiêu đến nguồn và rằng có không có sự khác biệt giữa hai chi nhánh (lần này chỉ sử dụng các phiên bản mới nhất khi chúng tôi đã thực hiện việc hợp nhất cưỡng bức phiên bản mới nhất trong bước 4.).

Xem MSDN để biết thêm chi tiết về các lệnh tf mergeresolve.

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