2011-12-19 35 views
14

Tôi đang sử dụng git-tfs và tôi đã tự hỏi liệu có thể hợp nhất hai nhánh TFS bằng cách sử dụng git-tfs hay không. Tôi có hai chi nhánh $/MyCompany/Dev & $/MyCompany/Release-3.3. Release-3.3 bắt nguồn từ nhánh Dev. Cả hai đều được kiểm tra dưới dạng kho lưu trữ git khác nhau bằng cách sử dụng git tfs.Kết hợp hai nhánh TFS với git tfs

Tôi muốn kết hợp lại các thay đổi trở lại vào chi nhánh Dev. Điều này có thể đạt được với git-tfs hoặc tôi có phải sử dụng công cụ TFS không?

+0

Tại sao với git tfs? –

+2

Tôi muốn sử dụng thuật toán kết hợp git, vì dường như giải quyết xung đột tự động hơn. – Ceilingfish

Trả lời

6

Tôi đã tìm thấy một cách tuyệt vời nếu có cách để thực hiện việc này. Git tfs quản lý nhận thức của nó về các khu vực của TFS bằng cách sử dụng git config. Cụ thể 3 thuộc tính cho mỗi remote; url, kho và lấy, ví dụ:

tfs-remote.default.url=http://tfsserver:8080/tfs/collection 
tfs-remote.default.repository=$/Product/Branch/Component 
tfs-remote.default.fetch=refs/remotes/default/master 

Bạn có thể thêm một remote bằng cách thiết lập các thuộc tính 3 một lần nữa với một tên khác nhau để default. Ví dụ:

tfs-remote.feature_branch.url=http://tfsserver:8080/tfs/collection 
tfs-remote.feature_branch.repository=$/Product/FeatureBranch/Component 
tfs-remote.feature_branch.fetch=refs/remotes/default/feature_branch 

Bạn có thể cần phát hành git tfs bootstrap ngay bây giờ.

Sau đó, bạn có thể phát hành:

git tfs fetch -i feature_branch 

Sau đó kết hợp các cam kết sử dụng:

git merge tfs/feature_branch 
+1

Điều này thực sự tạo ra một sự hợp nhất đang chờ thay đổi trong TFS? Nếu không, bạn sắp xếp hosing người tiếp theo muốn thực hiện hợp nhất từ ​​một máy khách TFS, vì TFS sẽ không ghi lại sự hợp nhất như đã được thực hiện. Do đó, nó sẽ cố gắng hợp nhất các thay đổi đó một lần nữa. (Phải thừa nhận rằng, các xung đột sẽ khá tầm thường, nhưng nó vẫn có thể gây phiền toái.) –

+0

Bạn hoàn toàn đúng, cơ chế này sẽ gây ra vấn đề nếu có nhiều hơn một người dùng hợp nhất các chi nhánh. Tôi có thể đã tìm thấy một giải pháp tốt hơn ở đây: http://stackoverflow.com/a/7334268/58991 – Ceilingfish

+0

Có ai biết nếu git-tf (không phải git-tfs) cho phép loại sáp nhập này không? Liệu checkin có xuất hiện dưới dạng hợp nhất hay chỉ là mã mới? –

-1

Tôi không phải là người dùng git-tfs, nhưng tôi đã làm điều này với git-svn trong quá khứ (mà tôi tin rằng có cách tiếp cận tương tự). Tôi nghĩ vấn đề chính của bạn là bạn có hai repos. Nếu bạn thêm cả hai nhánh từ xa vào cùng một repo git, thì bạn sẽ có thể thực hiện việc hợp nhất cục bộ, thực hiện một cam kết cục bộ và sau đó đẩy commit đó vào TFS.

HTH

10

Kể từ git-tfs 0.16, bạn có thể quản lý TFS chi nhánh (với branch lệnh), do đó bạn có thể bây giờ dễ dàng init nhánh hiện có, tạo một nhánh và kết hợp các nhánh TFS!

https://github.com/git-tfs/git-tfs/blob/master/doc/commands/branch.md#initialize-an-existing-tfs-branch

Và kể từ khi phát hành 0.19, bạn có thể làm việc kết hợp với git của 2 chi nhánh TFS và checkin nó trong TFS (với rcheckin) và nó sẽ được kiểm tra trong như một changeset merge: https://github.com/git-tfs/git-tfs/blob/master/doc/commands/rcheckin.md#checkin-a-merge-changeset

Hạn chế duy nhất (do TFS) là tất cả các cam kết nên đã được kiểm tra trong TFS trước khi thực hiện hợp nhất với git và kiểm tra nó trong TFS.

Vì vậy, giờ đây bạn có thể hợp nhất dễ dàng hơn với các chi nhánh 2TFS và kiểm tra chúng trong ...

+0

Lưu ý rằng kể từ ngày 30 tháng 9 năm 2013, tài liệu chỉ ra rằng 'init-branch' không được dùng để ủng hộ' branch --init' –

+0

@DavidGardiner bên phải của bạn nhưng 2 là tương đương (một là một wrapper cho người khác) và lệnh sẽ không bị xóa cho đến 0,20 (và 0,19 vẫn chưa được phát hành). – Philippe

+0

Đừng lo lắng .. Tôi nghĩ chúng tôi có thể cho rằng bạn là một nguồn tốt cho thông tin git-tfs :-) –

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