Máy chủ Git vs Team Foundation [đã đóng]


263

Tôi đã giới thiệu Git cho nhóm phát triển của mình và mọi người ghét nó ngoại trừ tôi. Họ muốn thay thế nó bằng Team Foundation Server. Tôi cảm thấy như đây là một bước lùi rất lớn, mặc dù tôi không quen lắm với TFS. Ai đó có kinh nghiệm có thể so sánh hỗ trợ phân nhánh trên TFS với phân nhánh Git không? Ngoài ra, nói chung, những ưu và nhược điểm của TFS là gì? Tôi sẽ ghét nó sau khi sử dụng Git trong một vài năm?


24
Bạn phải đối mặt với một trận chiến khó khăn trên cái này. Git không ở đâu trưởng thành như svn / hg / tfs trên Windows, điều này không làm phiền nhiều cựu chiến binh git, nhưng là một vấn đề đau đầu cho những người mới.
Marcelo Cantos

7
@Jacko: Tôi đã đánh giá git-for-Windows trong vài tuần qua. Mặc dù nó đã được cải thiện rõ rệt kể từ lần cuối tôi nhìn vào nó khoảng một năm trước, nhưng vẫn còn một chặng đường dài để sẵn sàng cho thời gian tuyệt vời với các nhà phát triển Windows điển hình. Ví dụ, plugin VS thẳng thắn đáng sợ. Không có gì ngoài một loạt các tùy chọn menu dưới thanh menu chính, sẽ âm thầm thất bại nếu giải pháp được chọn thay vì một dự án. Tôi không thể có được công cụ cam kết để lập chỉ mục và đường kẻ, đó là lý do chính khiến tôi sử dụng git và nhận được git gui (một hành động tàn bạo hoàn toàn, từ POV khả dụng) là điều khó xử nhất.
Marcelo Cantos

6
Tôi sẽ thành thật với bạn, mặc dù; nó giết tôi để thả git. Trái ngược với quan điểm phổ biến ngoài kia rằng hai người ngang nhau, tôi thấy mô hình của git mạnh mẽ và logic hơn nhiều. Mercurial không có gì phù hợp với chỉ số của git và tôi ghét cách tiếp cận của nó để phân nhánh. Khái niệm nhãn của Git mà bạn di chuyển và đồng bộ hóa giữa các repos rất thanh lịch. Dấu trang của Mercurial là thứ duy nhất đến gần và chúng là Pita để thiết lập cho mọi người. Tuy nhiên, điểm mấu chốt là thành công có nhiều khả năng với svn → Mercurial hơn svn → git, do nhân viên và sự trưởng thành tương đối của các công cụ.
Marcelo Cantos

4
vâng, quy tắc Git khi nói đến quyền lực và sự thanh lịch. Nhưng, không phải ai cũng sẵn sàng cho nó.
Jacko

7
@JamesReategui: Cá nhân tôi nghĩ ( stackoverflow.com/a/11362998/520162 ) rằng sự tích hợp của một VCS trong IDE là một sự uốn khúc. Hãy tưởng tượng nếu bạn chuyển đổi IDE chính của bạn vào ngày mai. Điều gì nếu bạn thả VS cho Eclipse? Bạn có thực sự muốn học một tích hợp VCS mới không? Git là tuyệt vời trên dòng lệnh ( stackoverflow.com/a/5645910/520162 ). Tìm hiểu nó và bạn sẽ khám phá một thế giới kiểm soát phiên bản vô cùng mạnh mẽ.
eckes

Câu trả lời:


273

Tôi nghĩ rằng, tuyên bố

mọi người ghét nó trừ tôi

làm cho bất kỳ cuộc thảo luận nào trở nên lãng phí: khi bạn tiếp tục sử dụng Git, họ sẽ đổ lỗi cho bạn nếu có gì sai sót.

Ngoài ra, đối với tôi, Git có hai lợi thế so với một VCS tập trung mà tôi đánh giá cao nhất (như được mô tả một phần bởi Rob Sobers ):

  • tự động sao lưu toàn bộ repo: mỗi khi có ai đó rút từ repo trung tâm, anh ấy / cô ấy sẽ có một lịch sử đầy đủ về các thay đổi. Khi một repo bị mất: đừng lo lắng, hãy lấy một trong những thứ có mặt trên mỗi máy trạm.
  • truy cập repo ngoại tuyến: khi tôi làm việc tại nhà (hoặc trên máy bay hoặc tàu hỏa), tôi có thể xem toàn bộ lịch sử của dự án, mỗi lần đăng ký, mà không cần khởi động kết nối VPN của tôi để hoạt động và có thể hoạt động như tôi đang làm việc : checkin, checkout, chi nhánh, bất cứ thứ gì.

Nhưng như tôi đã nói: Tôi nghĩ rằng bạn đang chiến đấu với một trận chiến đã mất: khi mọi người ghét Git, đừng sử dụng Git. Nó có thể giúp bạn biết thêm lý do tại sao họ ghét Git thay vì cố gắng thuyết phục họ.

Nếu họ chỉ đơn giản là không muốn điều đó vì nó mới đối với họ và không sẵn sàng học hỏi điều gì mới: bạn có chắc chắn rằng bạn sẽ phát triển thành công với nhân viên đó không?

Có thực sự mỗi người ghét Git hoặc họ bị ảnh hưởng bởi một số nhà lãnh đạo ý kiến? Tìm các nhà lãnh đạo và hỏi họ những gì vấn đề. Thuyết phục họ và bạn sẽ thuyết phục phần còn lại của đội.

Nếu bạn không thể thuyết phục được các nhà lãnh đạo: hãy quên sử dụng Git, hãy dùng TFS. Sẽ làm cho cuộc sống của bạn dễ dàng hơn.


22
Bang trên, eckes. Họ đổ lỗi cho tôi mỗi khi có sự cố xảy ra. Không phải bản thân họ vì đã không học cách nó hoạt động. Đối với tôi, Git gần với sự hoàn hảo như tôi từng trải nghiệm trong một hệ thống kiểm soát phiên bản.
Jacko

15
Mặt khác, TFS bao gồm theo dõi lỗi / mục công việc, báo cáo, ... và các chức năng khác. Vì vậy, Git vs TFS chỉ có chức năng VCS là thiếu điểm TFS.
Richard

5
@Dan xem rebase, cây lọc ...
Artefacto

7
@Artefacto Tôi biết, nhưng sau đó tất cả các thẻ cam kết thay đổi và tất cả siêu dữ liệu (thảo luận đánh giá mã, v.v.) đều mồ côi hoặc cần được cập nhật. Tuy nhiên, một tháng với TFS đã thuyết phục tôi rằng nó không nằm trong liên minh của Git như một hệ thống kiểm soát phiên bản. Git giải phóng nhà phát triển để làm việc hiệu quả theo những cách phải có kinh nghiệm để được hiểu. Chi nhánh như ẩn dụ pad đầu là độc ác mạnh mẽ.
Dan Solovay

6
@Richard Tôi cho rằng đó là nhược điểm của TFS: một khi bạn tham gia, bạn là tất cả. Nó làm mọi thứ tầm thường và không cho bạn lựa chọn về nó. Có rất nhiều công cụ tốt hơn để theo dõi các mục công việc, báo cáo và quản lý dự án.
Ben Collins

102

Sự khác biệt chính giữa hai hệ thống là TFS là hệ thống kiểm soát phiên bản tập trung và Git là hệ thống kiểm soát phiên bản phân tán.

Với TFS, các kho lưu trữ được lưu trữ trên một máy chủ trung tâm và các nhà phát triển kiểm tra một bản sao đang hoạt động, đó là một ảnh chụp nhanh mã tại một thời điểm cụ thể. Với Git, các nhà phát triển đã sao chép toàn bộ kho lưu trữ vào máy của họ, bao gồm tất cả lịch sử.

Một lợi ích của việc có kho lưu trữ đầy đủ trên các máy của nhà phát triển của bạn là dự phòng trong trường hợp máy chủ chết. Một lợi ích tuyệt vời khác là bạn có thể di chuyển bản sao làm việc của mình qua lại giữa các lần sửa đổi mà không bao giờ nói chuyện với máy chủ, điều này có thể hữu ích nếu máy chủ ngừng hoạt động hoặc không thể truy cập được.

Đối với tôi, lợi ích thực sự là bạn có thể cam kết thay đổi vào kho lưu trữ cục bộ của mình mà không bao giờ nói chuyện với máy chủ hoặc gây ra những thay đổi có thể không ổn định trong nhóm của bạn (ví dụ: phá vỡ bản dựng).

Chẳng hạn, nếu tôi đang làm việc trên một tính năng lớn, có thể tôi sẽ mất một tuần để viết mã và kiểm tra nó hoàn toàn. Tôi không muốn đăng ký mã không ổn định vào giữa tuần và phá vỡ bản dựng, nhưng điều gì xảy ra nếu tôi gần cuối tuần và tôi vô tình làm hỏng toàn bộ bản sao làm việc của mình? Nếu tôi không cam kết tất cả cùng tôi có nguy cơ mất việc. Đó không phải là kiểm soát phiên bản hiệu quả và TFS dễ bị điều này.

Với DVCS, tôi có thể cam kết liên tục mà không lo lắng về việc phá vỡ bản dựng, vì tôi cam kết thay đổi cục bộ . Trong TFS và các hệ thống tập trung khác, không có khái niệm về đăng ký cục bộ.

Tôi thậm chí chưa đi sâu vào việc phân nhánh và sáp nhập tốt hơn như thế nào trong DVCS, nhưng bạn có thể tìm thấy vô số lời giải thích ở đây trên SO hoặc thông qua Google. Tôi có thể nói với bạn từ kinh nghiệm rằng việc phân nhánh và sáp nhập trong TFS là không tốt.

Nếu đối số cho TFS trong tổ chức của bạn là nó hoạt động tốt hơn trên Windows so với Git, thì tôi đề xuất Mercurial, hoạt động tốt trên Windows - tích hợp với Windows Explorer (TortoiseHg) và Visual Studio (VisualHg).


5
Nếu bạn nghĩ về việc đi với Mercurial, Joel Spolsky có một trang web hướng dẫn tuyệt vời để giáo dục nhóm của bạn: hginit.com
Martin Owen

3
Điều đáng nói là git hoàn toàn có khả năng mô phỏng một hệ thống tập trung và thông thường có một máy chủ git chính cho tất cả người dùng, bạn không cần phải làm theo cách đó.
Tim Abell

7
nếu bạn đang làm việc trên một phần chức năng có thể phá vỡ các thứ khác - bạn không thể tạo một nhánh trong TFS? Chắc chắn - chi nhánh nằm trên một máy chủ trung tâm - nhưng điều đó có thực sự quan trọng không? Có vẻ như bạn thực sự có thể làm điều tương tự trong cả hai - có vẻ như nhiều câu hỏi về việc bạn đang sử dụng IDE nào và hệ thống kiểm soát phiên bản được tích hợp tốt như thế nào với nó -
William

13
Nếu bạn đang làm việc trên một tính năng lớn có khả năng làm gián đoạn nhóm, thì nên sử dụng một nhánh tính năng và sau đó khi sẵn sàng hợp nhất vào nhánh phát triển.
Mike Cheel

9
@MikeCheel Đây là một nhận xét tuyệt vời. Bạn cũng có thể tạo ra một xiên mã của bạn mỗi ngày và xóa chúng khi bạn cuối cùng check-in tính năng của bạn (nhưng ý tưởng nhánh là một cách tốt hơn để làm điều đó)
RPDeshaies

86

Mọi người cần đặt súng xuống, bước ra khỏi gờ đá và suy nghĩ trong một phút. Hóa ra, có những lợi thế khách quan, cụ thể và không thể phủ nhận đối với DVCS sẽ tạo ra sự khác biệt lớn trong năng suất của một đội.

Tất cả đều thuộc về Phân nhánh và Sáp nhập.

Trước DVCS, nguyên tắc chỉ đạo là "Hãy cầu nguyện với Chúa rằng bạn không cần phải phân nhánh và hợp nhất. Và nếu bạn làm thế, ít nhất hãy cầu xin Ngài hãy để nó thật đơn giản."

Giờ đây, với DVCS, việc phân nhánh ( và sáp nhập ) đã được cải thiện rất nhiều, nguyên tắc hướng dẫn là: "Hãy làm điều đó ngay lập tức. Nó sẽ mang lại cho bạn rất nhiều lợi ích và không gây ra cho bạn bất kỳ vấn đề nào."

Và đó là một tăng năng suất HUGE cho bất kỳ đội nào.

Vấn đề là, để mọi người hiểu những gì tôi vừa nói và tin chắc rằng đó là sự thật, trước tiên họ phải đầu tư vào một chút của một đường cong học tập. Họ không phải học Git hoặc bất kỳ DVCS nào khác ... họ chỉ cần học cách Git phân nhánh và hợp nhất. Đọc và đọc lại một số bài viết và bài đăng trên blog, làm cho nó chậm, và làm việc với nó cho đến khi bạn nhìn thấy nó. Điều đó có thể mất phần tốt hơn của 2 hoặc 3 ngày đầy đủ.

Nhưng một khi bạn thấy điều đó, bạn thậm chí sẽ không cân nhắc lựa chọn không phải DVCS. Bởi vì thực sự có những lợi thế rõ ràng, khách quan, cụ thể đối với DVCS và những chiến thắng lớn nhất là trong lĩnh vực phân nhánh và sáp nhập.


3
Cảm ơn, Charlie. Tôi biết điều đó và bạn biết điều đó, nhưng thật khó để thông qua những người nói những điều như "tích hợp kiểm soát nguồn với Visual Studio là tính năng quan trọng nhất đối với tôi"
Jacko

58
Tôi biết. Một người bạn và tôi đã đưa ra sự tương tự này - hãy tưởng tượng bạn cần một cơ sở dữ liệu quan hệ nghiêm túc. Bạn đánh giá Sql Server, Oracle và MS Access. Cuối cùng, bạn chọn Access vì nó có GUI đẹp nhất, mặc dù thực tế là nó không thể mở rộng, không thực thi tốt tính toàn vẹn tham chiếu, v.v. Phân nhánh và hợp nhất là thịt và khoai tây tuyệt đối của hệ thống kiểm soát phiên bản. Bất kỳ tính năng khác chỉ là một chút bling ở bên. Nhưng mọi người đang đưa ra lựa chọn dựa trên bling.
Charlie Hoa

17
Mặc dù tôi có xu hướng đồng ý với các tuyên bố của bạn, tôi không hiểu tại sao việc phân nhánh và sáp nhập của Git lại "tốt hơn" chỉ vì nó là một hệ thống "phân tán". Tôi không chắc chắn rằng việc trở thành một DVCS có liên quan gì đến khả năng hợp nhất của nó không. Tôi muốn giải thích lý do tại sao việc hợp nhất lại dễ dàng hơn trong một hệ thống phân tán. Theo kinh nghiệm của tôi, chủ yếu là Git và Svn, việc sáp nhập vào SVN không phải là khủng khiếp vì nó là một VCS tập trung, mà bởi vì nó không theo dõi chính xác các bản sửa đổi giữa các chi nhánh như GIT.
Mã hóaWithSpike

8
@ tập hợp25rs - Tôi đồng ý với hầu hết điều đó. Không có lý do gì một VCS không thể hợp nhất quá. Vẫn chưa có gì (mà tôi biết). Nhưng phần tôi không đồng ý là "hoàn toàn bằng cách viết các thói quen hợp nhất tốt hơn để giải quyết xung đột tốt hơn". Nước sốt bí mật không phải là trong các thói quen hợp nhất thông minh hơn, mà là trong một cách tiếp cận khác về cơ bản với những thông tin bạn lưu trữ trong repo và cách bạn tổ chức nó. Chủ yếu, làm cho Cam kết là nền tảng của nhà nước nội bộ. Cam kết không chỉ là một cú hích tuyệt vời ... chúng là nền tảng của các khả năng.
Charlie Hoa

10
@ tập hợp25rs hoàn toàn đồng ý lại: cam kết là đơn vị nguyên tử của công việc. Hầu hết các hệ thống tập trung không tổ chức dữ liệu theo cách này, nhưng chúng không khuyến khích loại công việc từng khoảnh khắc mà các nhà phát triển phải làm để tạo ra công việc hợp nhất và phân nhánh thực sự tốt. Các hệ thống phân tán khuyến khích những gì tôi gọi là các cam kết "ứng dụng" (khép kín, các cam kết nhỏ của công việc có liên quan với các mô tả tốt) và các hệ thống tập trung khuyến khích những gì tôi gọi là "bom khác" khi bạn chui vào hang cho đến khi bạn sẵn sàng và sau đó thả ngày (hoặc tuần) giá trị công việc trên hệ thống. Đoán loại nào hợp nhất?
Ben Collins

45

Bản gốc : @Rob, TFS có một cái gì đó gọi là " Kệ " giải quyết mối quan tâm của bạn về việc cam kết tiến hành công việc mà không ảnh hưởng đến bản dựng chính thức. Tôi nhận thấy bạn thấy kiểm soát phiên bản trung tâm là một trở ngại, nhưng đối với TFS, việc kiểm tra mã của bạn vào giá có thể được xem là một điểm mạnh sau đó máy chủ trung tâm có một bản sao tiến trình công việc của bạn trong sự kiện hiếm gặp máy cục bộ của bạn gặp sự cố hoặc bị mất / bị đánh cắp hoặc bạn cần chuyển đổi bánh răng nhanh chóng. Quan điểm của tôi là TFS nên được khen ngợi trong lĩnh vực này. Ngoài ra, việc phân nhánh và hợp nhất trong TFS2010 đã được cải thiện so với các phiên bản trước và không rõ bạn đang đề cập đến phiên bản nào khi bạn nói "... từ kinh nghiệm rằng việc phân nhánh và sáp nhập trong TFS là không tốt." Tuyên bố miễn trừ trách nhiệm: Tôi là người dùng vừa phải của TFS2010.

Chỉnh sửa ngày 5 tháng 12 năm 2011 : Đối với OP, một điều khiến tôi băn khoăn về TFS là nó khăng khăng cài đặt tất cả các tệp cục bộ của bạn thành "chỉ đọc" khi bạn không làm việc với chúng. Nếu bạn muốn thực hiện thay đổi, luồng là bạn phải "kiểm tra" tệp, chỉ cần xóa thuộc tính chỉ đọc trên tệp để TFS biết để mắt đến nó. Đó là một quy trình làm việc bất tiện. Cách tôi muốn nó hoạt động là nó chỉ tự động phát hiện nếu tôi đã thực hiện thay đổi và hoàn toàn không lo lắng / bận tâm với các thuộc tính tệp. Bằng cách đó, tôi có thể sửa đổi tệp trong Visual Studio hoặc Notepad hoặc với bất kỳ công cụ nào tôi muốn. Hệ thống kiểm soát phiên bản phải minh bạch nhất có thể về vấn đề này. Có tiện ích mở rộng Windows Explorer ( TFS PowerTools) cho phép bạn làm việc với các tệp của mình trong Windows Explorer, nhưng điều đó không đơn giản hóa quá trình làm việc rất nhiều.


2
Điều này trả lời câu hỏi, nó không nên là một bình luận, ngay cả khi bạn có đại diện.
Độc thân Khuyến khích

8
FYI - TFS "11" không yêu cầu bit chỉ đọc nữa nếu bạn đang sử dụng các không gian làm việc cục bộ vốn là mặc định bây giờ. Nó thông minh phát hiện ra những tập tin được thay đổi từ bất kỳ ứng dụng nào. Brian Harry có thêm một số thông tin về các cải tiến ở đây: blog.msdn.com/b/bharry/archive/2011/08/02/ Kẻ
Ed Blankenship 21/03

2
@EdBlankenship, cảm ơn bạn rất nhiều vì liên kết blog đó. Đó là tin tuyệt vời để thấy rằng bit vô nghĩa chỉ đọc đang được giải quyết để làm cho việc sử dụng phiên bản tiếp theo của TFS dễ dàng hơn nhiều.
Lee Grissom

7
Trái ngược với các cam kết trong một chi nhánh như bạn làm với Git, việc gác lại không dễ hiểu và quản lý. Bạn không biết trên mỗi cam kết, giá đỡ đã được thực hiện và bạn thường gặp vấn đề với việc hợp nhất (nếu sau đó bạn đã thực hiện các sửa đổi, chúng thường bị mất). Chi nhánh Git mạnh mẽ và dễ hiểu hơn nhiều so với giá đỡ. Kệ dành cho các nhà phát triển chưa từng trải nghiệm điều gì khác ....
Philippe

2
Quy trình 'kiểm tra' này một tệp gợi nhớ đến Visual SourceSafe, vì đây là cách làm việc phổ biến; các tệp đã được truy xuất từ ​​SourceSafe và được lưu trữ cục bộ dưới dạng các tệp chỉ đọc. Kiểm tra một tệp, hoặc một loạt các tệp, có thể được đánh dấu là độc quyền, có nghĩa là những người khác có thể thấy tập tin mà một nhà phát triển khác đang làm việc, để ngăn chặn sự cần thiết phải hợp nhất khi phân nhánh bị vô hiệu hóa (có thể là do lợn phải trong VSS).
Brett Rigby

18

Trên tất cả mọi thứ đã được nói (

https://stackoverflow.com/a/4416666/172109

https://stackoverflow.com/a/3614099/172109

https://stackoverflow.com/a/4415234/172109

), điều này là chính xác, TFS không chỉ là một VCS. Một tính năng chính mà TFS cung cấp là chức năng theo dõi lỗi tích hợp. Thay đổi được liên kết với các vấn đề và có thể được theo dõi. Các chính sách khác nhau để đăng ký được hỗ trợ, cũng như tích hợp với miền Windows, đó là những gì những người chạy TFS có. GUI tích hợp chặt chẽ với Visual Studio là một điểm bán hàng khác, hấp dẫn nhà phát triển nhấp chuột và nhấp chuột trung bình và người quản lý của anh ta.

Do đó, so sánh Git với TFS không phải là một câu hỏi thích hợp để hỏi. Mặc dù không chính xác, câu hỏi là so sánh Git với chức năng VCS của TFS. Khi đó, Git thổi TFS ra khỏi nước. Tuy nhiên, bất kỳ nhóm nghiêm túc nào cũng cần các công cụ khác và đây là nơi TFS cung cấp một điểm dừng.


4
Xin vui lòng bạn có thể nhận được các công cụ tương tự TFS cung cấp trong bất kỳ ứng dụng công cụ nhanh nào. Rally, bạn đặt tên cho nó.
Tích cực,

2
Mặc dù tôi đồng ý rằng TFS có mục tiêu rộng hơn, tôi sẽ viết lại thành "nó TRIES để cung cấp một điểm dừng", nhưng nó không đủ tốt (ít nhất là không có tùy chọn tốt nhất) trong bất kỳ nhiệm vụ nào mà nó cố gắng gỡ rối; vì vậy nó giống như một con dao Thụy Sĩ cùn.
slashCoder

@PositiveGuy bạn không thể lấy nó mà không làm việc và cấu hình. TFS cung cấp cho bạn toàn bộ điều với một cú nhấp chuột. Trong trường hợp, toàn bộ hệ sinh thái hiện có sẵn dưới dạng dịch vụ đám mây, không cần cấu hình. Nếu tôi có thể kiểm soát phiên bản, hỗ trợ scrum, xây dựng tự động, phòng thí nghiệm kiểm tra và quản lý kế hoạch kiểm tra, tất cả đều được tích hợp ngoài bản thân VÀ một LDAP của công ty (nói dối AzureAD), với giá 10 đô la / tháng, tại sao tôi phải đi cố gắng tự dán các mảnh lại với nhau?
Craig Brunetti

1
@slashCoder làm thế nào bất kỳ bộ đầy đủ có thể được dự kiến ​​là tốt nhất ở mỗi phần? Liệu chi phí không phải là tốt nhất của nó có thực sự lớn hơn chi phí khi bạn phải tự mình quản lý tích hợp các thành phần không? ... Có lẽ đối với một số nơi, tôi có thể thấy điều đó. Nhưng đó là chi phí thuần túy để chạy những thứ như vậy. Điều gì xảy ra nếu GIT công ty của bạn hoạt động tốt, nhưng phiên bản JIRA của bạn bị hỏng và bản nâng cấp Jenkins của bạn không hoạt động? Đúng? Nó giống như cưa máy tung hứng. Cháy. Bịt mắt. :) :)
Craig Brunetti

17

Nếu nhóm của bạn sử dụng TFS và bạn muốn sử dụng Git, bạn có thể muốn xem xét một cây cầu "git to tfs". Về cơ bản, bạn làm việc hàng ngày bằng cách sử dụng Git trên máy tính của mình, sau đó khi bạn muốn đẩy các thay đổi của mình, bạn đẩy chúng đến máy chủ TFS.

Có một cặp vợ chồng ngoài kia (trên github). Tôi đã sử dụng một cái ở vị trí cuối cùng của tôi (cùng với một nhà phát triển khác) với một số thành công. Xem:

https://github.com/spraint/git-tfs

https://github.com/git-tfs/git-tfs


6
Microsoft cung cấp tích hợp trực tiếp với kho Git và TFS ngay bây giờ: blog.msdn.com/b/bharry/archive/2012/08/13/ mẹo
Ed Blankenship

1
@EdBlankenship, bạn có thể muốn chuyển đổi nhận xét của mình thành câu trả lời. Nó dường như là một giải pháp tuyệt vời cho OP. Tôi sẽ bỏ phiếu cho nó. :)
Lee Grissom

1
Ngoại trừ nếu bạn đang ở trên một nền tảng khác ngoài Windows, bạn nên thích git-tfs! git-tf không tốt bằng git-tfs ... Và triết lý là định hướng TFS trong khi git-tfs thiên về git hơn (và đó là những gì chúng ta muốn!)
Philippe

15

Sau một vài cuộc điều tra giữa pro và cons, công ty mà tôi tham gia cũng quyết định đi TFS. Không phải vì GIT không phải là một hệ thống kiểm soát phiên bản tốt, mà quan trọng nhất là giải pháp ALM tích hợp đầy đủ mà TFS cung cấp. Nếu chỉ có tính năng kiểm soát phiên bản là quan trọng, sự lựa chọn có thể là GIT. Tuy nhiên, đường cong học tập GIT dốc cho các nhà phát triển thường xuyên có thể không được đánh giá thấp.

Xem giải thích chi tiết trong bài đăng trên blog của tôi TFS như một nền tảng công nghệ chéo thực sự .


3
Có lẽ, nhưng mỗi phần của TFS đều xấu và khó quản trị (thực tế, bạn cần một quản trị viên thực sự cho TFS). Nhìn Git> TFS (VCS), Jenkins> TFS (CI), nunit hoặc xunit> mstest, IceScrum hoặc ...> TFS (Quản lý dự án). TFS là một ý tưởng tốt ngay từ đầu, cho đến khi bạn sử dụng nó !!!
Philippe

1
Tại sao bạn cần TFS, chỉ cần có một ứng dụng nhanh nhẹn. Và sau đó sử dụng Git hoặc lật đổ và bạn đang trên đường. TFS cản trở bạn bằng cách làm cho bạn gặp khó khăn.
Tích cực,

Cập nhật: TFS 2013 (máy chủ) [và VS12-13) hiện hỗ trợ git để kiểm soát phiên bản. Vì vậy, bạn có thể có được những điều tốt nhất của cả hai thế giới
DarcyThomas

2
Chắc chắn, thật tuyệt khi có ALM tích hợp đầy đủ. Nhưng không phải chi phí linh hoạt. IMO. một ALM nên được chế tạo với công nghệ "giống tốt nhất" càng nhiều càng tốt ... hoặc ít nhất, tính linh hoạt để tích hợp tốt nhất các giống, vì chúng có thể thay đổi theo thời gian. Chọn TFS về cơ bản là đặt một cổ phần xuống đất, nói rằng "microsoft sẽ giành chiến thắng ở tất cả các khía cạnh của ALM của tôi", điều này thật ngớ ngẩn. Tôi đã sử dụng Git w / Jira, ví dụ, cho phép tôi cập nhật / đóng các vấn đề dựa trên thông điệp cam kết của mình. Theo kinh nghiệm của tôi (rất nhiều với TFS cũng vậy), đây là một quy trình làm việc vượt trội.
Scott Silvi

1
Thanh bên - ngay cả với tích hợp TFS / Git, về cơ bản bạn đang nói "cho phép VCS chuyển sang Git, trong khi vẫn theo dõi vấn đề của chúng tôi" - về cơ bản không khác gì sử dụng Git w / bất kỳ phần mềm theo dõi vấn đề nào khác. Vì vậy, tôi không chắc chắn đối số ALM có giá trị nữa hay không, với các nỗ lực linh hoạt của microsofts (mà tôi hoan nghênh).
Scott Silvi

14

Toàn bộ điều phân phối của Git thực sự rất tuyệt vời. nó cung cấp một vài tính năng Kệ không có (trong sản phẩm hiện tại), chẳng hạn như các tùy chọn rollback và cam kết cục bộ (như tính năng lịch sử cục bộ của Eclipse ). Bạn có thể giảm bớt điều này bằng cách sử dụng các nhánh của nhà phát triển, nhưng thành thật mà nói, nhiều nhà phát triển không thích phân nhánh và hợp nhất một chút. Tôi đã được yêu cầu bật tính năng "thanh toán độc quyền" kiểu cũ trong TFS một vài lần quá thường xuyên (và từ chối nó mỗi lần).

Tôi nghĩ rằng nhiều doanh nghiệp lớn khá sợ hãi khi cho phép một nhà phát triển chỉ mang toàn bộ lịch sử vào không gian làm việc tại địa phương và mang nó theo (ví dụ với một chủ nhân mới) ... Đánh cắp ảnh chụp nhanh là xấu, nhưng lấy đi toàn bộ lịch sử thậm chí còn rắc rối hơn. (Không phải là bạn không thể có được một lịch sử đầy đủ từ TFS của bạn muốn nó) ...

Nó đã đề cập rằng đó là một cách tuyệt vời để sao lưu, rất tốt cho nguồn mở một lần nữa, nơi người bảo trì ban đầu có thể dừng lại để quan tâm và xóa phiên bản của anh ta, nhưng đối với một kế hoạch doanh nghiệp, điều này lại trở nên thiếu sót đối với nhiều doanh nghiệp vì không có sự phân công trách nhiệm rõ ràng để giữ bản sao lưu. Và thật khó để tìm ra phiên bản nào sẽ sử dụng nếu 'dự án' chính biến mất bằng cách nào đó. Mà sẽ có xu hướng chỉ định một kho lưu trữ là hàng đầu / trung tâm.

Điều tôi thích nhất ở Git là tùy chọn Đẩy / Kéo, nơi bạn có thể dễ dàng đóng góp mã cho dự án mà không cần phải có quyền cam kết. Tôi đoán bạn có thể sử dụng những người dùng và kệ rất hạn chế trong TFS để bắt chước điều này, nhưng nó không mạnh bằng tùy chọn Git. Việc phân nhánh giữa các dự án nhóm cũng có thể hoạt động tốt, nhưng từ góc độ hành chính, điều đó không thực sự khả thi đối với nhiều tổ chức vì việc thêm các dự án nhóm thêm rất nhiều chi phí quản lý.

Tôi cũng muốn thêm vào những điều được đề cập trong khu vực không kiểm soát nguồn. Các tính năng như Theo dõi mục công việc, báo cáo và tự động hóa xây dựng (bao gồm quản lý phòng thí nghiệm) được hưởng lợi rất nhiều từ kho lưu trữ hàng đầu trung tâm. Chúng trở nên khó hơn rất nhiều khi bạn sử dụng một mô hình phân tán thuần túy, trừ khi bạn tạo một trong các nút dẫn đầu (và do đó quay trở lại mô hình ít phân tán hơn).

Với TFS Basic đi kèm với TFS 11, có thể không còn xa để mong đợi một TFS phân tán cho phép bạn đồng bộ hóa TFS cơ bản của bạn với TFS trung tâm trong kỷ nguyên TFS 12+. Tôi sẽ bỏ phiếu của tôi cho điều đó trong uservoice !


Bạn cũng sẽ quan tâm đến tính năng mới này do Microsoft mang đến cho bạn: gittf.codeplex.com
jessehouwing

1
sử dụng git-tfs. Hiện tại, nó tốt hơn git-tf !!! github.com/git-tfs/git-tfs
Philippe

3
Toàn bộ câu trả lời này nhanh chóng bị lỗi thời. Microsoft đã thêm hỗ trợ Git cho Team Foundation Service và sẽ thêm hỗ trợ cho Git vào phiên bản chính tiếp theo của Team Foundation Server.
jessehouwing

1
@Philippe: Tôi đã thử cả hai. Một vài điểm khác biệt: 1) git-tf là đa nền tảng, trong khi git-tfs chỉ chạy trên Windows. 2) git-tfs viết lại các mô tả cam kết khi bạn "ấn" để bao gồm số thay đổi, trong khi git-tf giữ nguyên các giá trị băm cam kết cục bộ của bạn.
Joey Adams

@JoeyAdams 1) +1, đó là lý do chính đáng duy nhất để chọn git-tf 2) Bạn cũng có thể làm điều đó với git-tfs bằng cách sử dụng checkinlệnh (thay vì rcheckin). Nhưng tôi thích rcheckin hơn vì đó là cách git để làm mọi thứ và đó là lý do tại sao chúng tôi chọn sử dụng git;)
Philippe

9

Đối với tôi, sự khác biệt chính là tất cả các tệp phụ trợ mà TFS sẽ thêm vào giải pháp của bạn (.vssscc) để 'hỗ trợ' TFS - chúng tôi đã gặp sự cố gần đây với các tệp này bị ánh xạ vào nhánh sai, dẫn đến một số gỡ lỗi thú vị ...


2
Điểm tốt ở đây. Git sẽ thêm .gitthư mục để theo dõi tất cả các chi tiết kho lưu trữ. TFS sẽ tối thiểu sửa đổi các tệp của bạn .sln(hoặc đó là .csproj?) Để đặt vị trí của kho lưu trữ từ xa vào đó.
CodingWithSpike

5
Tôi đã quên mất bao nhiêu thời gian tôi ghét việc VSS sẽ sửa đổi các tệp của bạn 'cho' bạn.
Lúa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.