힘내 vs 팀 파운데이션 서버 [닫기]


263

나는 Git을 개발자 팀에 소개했고 모든 사람은 나를 제외하고는 싫어한다. 그들은 그것을 Team Foundation Server로 교체하려고합니다. 나는 TFS에 익숙하지는 않지만 이것이 거꾸로 된 것처럼 느낍니다. 경험이있는 사람이 TFS의 분기 지원과 Git 분기를 비교할 수 있습니까? 또한 일반적으로 TFS의 장단점은 무엇입니까? 몇 년 동안 Git을 사용한 후에 그것을 싫어합니까?


24
당신은 이것에 대한 오르막 전투에 직면합니다. Git은 Windows에서 svn / hg / tfs만큼 성숙하지 못합니다. git veterans를 많이 신경 쓰지 않지만 초보자에게는 큰 골칫거리입니다.
Marcelo Cantos

7
@Jacko : 지난 몇 주 동안 git-for-Windows를 평가했습니다. 약 1 년 전에 마지막으로 살펴본 이후 크게 개선되었지만 여전히 일반적인 Windows 개발자들과 함께 준비를하기에는 아직 먼 길입니다. 예를 들어 VS 플러그인은 솔직합니다. 기본 메뉴 표시 줄 아래에있는 메뉴 옵션이 많기 때문에 프로젝트 대신 솔루션을 선택하면 자동으로 실패합니다. 커밋 도구를 사용하여 덩어리와 줄을 인덱싱 할 수 없습니다. 이것은 내가 git을 사용하는 주된 이유이며 git gui (사용 편의성 POV에서 완전한 atrocity)를 얻는 것은 어색합니다.
Marcelo Cantos

6
그래도 나는 당신에게 정직 할 것입니다. 그것은 자식을 죽일 죽인다. 두 가지가 동등하다는 대중적인 견해와는 달리, git의 모델이 훨씬 강력하고 논리적이라는 것을 알았습니다. Mercurial은 git의 색인과 일치하는 것이 없으며 분기에 대한 접근 방식이 싫습니다. Git의 레이블 개념은 repos간에 이동하고 동기화합니다. Mercurial의 북마크는 가까이에있는 유일한 제품이며 모두를위한 PITA입니다. 그러나 결론은 직원과 도구의 성숙도를 고려할 때 svn → git보다 svn → Mercurial의 성공 가능성이 더 높다는 것입니다.
Marcelo Cantos

4
그렇습니다. 힘과 우아함에있어서 Git이 지배합니다. 그러나 모든 사람이 그럴 준비가되어 있지는 않습니다.
Jacko

7
@JamesReategui : 개인적 으로 IDE에 VCS 통합이 의미가 있다고 생각합니다 ( stackoverflow.com/a/11362998/520162 ). 내일 메인 IDE를 전환한다고 상상해보십시오. VS for Eclipse를 삭제하면 어떻게 되나요? 당신은 정말 새로운 VCS의 통합을 배우고 기꺼이? Git은 커맨드 라인에서 훌륭합니다 ( stackoverflow.com/a/5645910/520162 ). 이를 배우면 믿을 수 없을 정도로 강력한 버전 제어 세계를 발견 할 수 있습니다.
eckes

답변:


273

내 생각 엔

나를 제외한 모두가 싫어

더 이상 토론을 낭비하지 마십시오. Git을 계속 사용하면 문제가 발생하면 책임이 있습니다 .

이 외에도 Git은 중앙 집중식 VCS에 비해 두 가지 장점을 가지고 있습니다 ( Rob Sobers가 부분적으로 설명 ).

  • 전체 리포지토리의 자동 백업 : 누군가가 중앙 리포지토리를 가져올 때마다 변경 기록 전체를 가져옵니다. 하나의 리포지토리가 손실 된 경우 걱정하지 마십시오. 모든 워크 스테이션에있는 리포지토리 중 하나를 가져 가십시오.
  • 오프라인 REPO 액세스 : 내가 집에서 일하고있을 때 (또는 비행기 또는 기차), 나는 직장 내 VPN 연결을 시작하지 않고, 프로젝트, 매 체크인의 전체 역사를 볼 수 있고 내가 좋아하는 일을 할 수 있었다 직장에서 : 체크인, 체크 아웃, 지점 등

그러나 내가 말했듯이 : 나는 당신이 잃어버린 전투와 싸우고 있다고 생각합니다. 모두가 Git을 싫어할 때 Git을 사용하지 마십시오. 그들이 그들을 설득하려고 시도하는 대신 그들이 힘내싫어하는 이유 를 더 많이 알 수 있습니다.

그들이 단순히 새로운 것을 원하지 않기 때문에 새로운 것을 배우고 싶지 않다면, 그 직원과 함께 성공적인 개발을 하시겠습니까?

실제로 모든 사람이 Git을 싫어합니까, 아니면 일부 의견 리더의 영향을 받습니까? 지도자를 찾아 문제가 무엇인지 물어보십시오. 그들을 설득하면 나머지 팀을 설득 할 수 있습니다.

당신이 지도자를 설득 할 수 없다면 : Git 사용을 잊어라. TFS를 가져 가라. 당신의 인생을 더 쉽게 만들 것입니다.


22
이봐, 이케 그들은 무언가 잘못 될 때마다 나를 비난합니다. 그것이 어떻게 작동하는지 배우지 못했다고 스스로가 아닙니다. 저에게 Git은 버전 제어 시스템에서 경험 한 것만 큼 완벽합니다.
Jacko

15
반면에 TFS에는 결함 / 작업 항목 추적,보고 등이 있습니다. 따라서 VCS 기능의 Git vs TFS 만 TFS의 요점을 놓치고 있습니다.
Richard

5
@ Dan rebase, 필터 트리를 참조하십시오 ...
Artefacto

7
@Artefacto 알고 있지만 모든 커밋 태그가 변경되고 모든 메타 데이터 (코드 검토 토론 등)가 고아이거나 업데이트해야합니다. 그럼에도 불구하고, TFS가있는 한 달은 그것이 버전 관리 시스템으로서 Git의 리그에 있지 않다고 설득했습니다. Git은 개발자가 이해하기 위해 경험해야하는 방식으로 생산성을 높일 수 있도록 해줍니다. 스크래치 패드 비유 인 브랜치는 강력합니다.
Dan Solovay

6
@Richard 나는 이것이 TFS의 단점이라고 주장한다. 일단 들어가면 모든 것이 평범하다. 그것은 평범한 모든 일을하고 당신에게 그것에 대한 선택을주지 않는다. 작업 항목 추적,보고 및 프로젝트 관리를위한 훨씬 더 나은 도구가 있습니다.
벤 콜린스

102

두 시스템의 주요 차이점은 TFS는 중앙 집중식 버전 제어 시스템이고 Git은 분산 버전 제어 시스템이라는 것입니다.

TFS를 사용하면 리포지토리가 중앙 서버에 저장되고 개발자 는 특정 시점의 코드 스냅 샷 인 작업 복사본을 체크 아웃합니다 . Git을 사용하면 개발자 는 모든 히스토리를 포함 하여 전체 저장소 를 시스템에 복제합니다 .

개발자의 컴퓨터에 전체 저장소를두면 서버가 죽는 경우 중복성이 있다는 이점이 있습니다. 또 다른 좋은 장점은 서버와 대화하지 않고 작업 사본을 수정본간에 앞뒤로 이동할 수 있다는 것입니다. 이는 서버가 다운되었거나 연결할 수없는 경우 유용 할 수 있습니다.

제게 큰 장점 은 서버와 대화하거나 팀에 잠재적으로 불안정한 변경을 가하지 않고 (즉, 빌드 중단) 로컬 저장소에 변경 세트를 커밋 할 수 있다는 것입니다 .

예를 들어, 큰 기능을 사용하는 경우 코드를 작성하고 완전히 테스트하는 데 일주일이 걸릴 수 있습니다. 주중에 불안정한 코드를 체크인하고 빌드를 중단하고 싶지 않지만 주말에 가까워지고 실수로 전체 작업 사본을 중단하면 어떻게됩니까? 내가 최선을 다하지 않으면 나는 일을 잃을 위험이있다. 이는 효과적인 버전 제어가 아니며 TFS는 이에 취약합니다.

DVCS를 사용하면 변경 사항을 로컬로 커밋하므로 빌드 중단에 대해 걱정하지 않고 지속적으로 커밋 할 수 있습니다 . TFS 및 기타 중앙 집중식 시스템에는 로컬 체크인 개념이 없습니다.

DVCS에서 분기 및 병합이 얼마나 나은지에 대해서는 다루지 않았지만 SO 또는 Google을 통해 많은 설명을 찾을 수 있습니다. TFS에서의 브랜칭 및 병합이 좋지 않다는 것을 경험에서 알 수 있습니다.

조직의 TFS가 Git보다 Windows에서 더 잘 작동한다고 주장하는 경우 Windows에서 잘 작동하는 Mercurial을 제안합니다 .Windows 탐색기 (TortoiseHg) 및 Visual Studio (VisualHg)와 통합되어 있습니다.


5
Mercurial과 함께하는 것에 대해 생각한다면 Joel Spolsky는 팀 교육을위한 훌륭한 튜토리얼 사이트를 보유하고 있습니다 : hginit.com
Martin Owen

3
그것은 가치가 그 자식을 언급 중앙 집중식 시스템을 모방 완벽 들일 수입니다 수 있습니다, 그리고 그것의 일반적인 모든 사용자에 대한 기본 자식 서버를 가지고, 당신은하지 않습니다 그런 식으로 할 수 있습니다.
팀 아벨

7
다른 것들을 망칠 수있는 기능을 수행하고 있다면 TFS에서 브랜치를 만들 수 없습니까? 물론-지점이 중앙 서버에 있지만 실제로 중요합니까? 두 가지 방법 모두에서 동일한 작업을 효과적으로 수행 할 수있는 것 같습니다. 사용중인 IDE와 버전 제어 시스템이 얼마나 잘 통합되어 있는지에 대한 질문이있는 것 같습니다.
William

13
팀을 방해 할 수있는 큰 기능을 작업중인 경우 기능 분기를 사용하고 개발 분기로 병합 할 준비가되면 기능 분기를 사용하는 것이 좋습니다.
Mike Cheel

9
@ MikeCheel 이것은 좋은 의견입니다. 또한 매일 코드 선반 을 생성하고 마지막으로 기능을 체크인 할 때 코드를 삭제할 수도 있습니다 (하지만 브랜치 아이디어가 더 나은 방법입니다)
RPDeshaies

86

사람들은 총을 내려 놓고 난간에서 물러나서 잠시 생각 해야합니다. DVCS에는 객관적이고 구체적이며 부인할 수없는 이점이있어 팀의 생산성에 큰 차이가 있습니다.

그것은 모두 분기 및 병합으로 귀결됩니다.

DVCS 이전에이 지침의 원칙은 "분지와 합병에 참여할 필요가 없도록 하나님 께기도하십시오. 그리고 그렇게한다면 최소한 아주 단순하게하도록 간구하십시오."

이제 DVCS를 사용하면 분기 ( 및 병합 )가 크게 향상되고 지침 원리는 "모자이를 떨어 뜨릴 때 수행하십시오. 이는 많은 이점을 제공하고 문제를 일으키지 않습니다."입니다.

그리고 그것은 모든 팀에게 커다란 생산성 향상 도구입니다.

문제는 사람들이 내가 방금 말한 것을 이해하고 그것이 사실이라는 것을 확신하기 위해서는 먼저 약간의 학습 곡선에 투자해야한다는 것입니다. 그들은 Git 또는 다른 DVCS 자체를 배울 필요가 없습니다 ... Git이 분기 및 병합을 수행하는 방법을 배우면됩니다. 일부 기사와 블로그 게시물을 읽고 다시 읽고 느리게 읽고 볼 때까지 작업하십시오. 하루나 이틀 더 나은 시간이 걸릴 수 있습니다.

그러나 일단 당신이 그것을 본 후에는 비 DVCS를 선택하는 것을 고려하지 않을 것입니다. DVCS에는 분명하고 객관적이고 구체적인 이점이 있기 때문에 가장 큰 장점은 분기 및 병합 분야에서입니다.


3
고마워, 찰리 나는 그것을 알고있다. 그러나 당신은 그것을 알고 있지만 "Visual Studio와의 소스 제어의 통합은 나에게 가장 중요한 기능"이라고 말하는 사람들에게는 어려움을
겪고있다

58
알아. 친구와 나는이 비유를 던지고 있었다-당신이 심각한 관계형 데이터베이스가 필요하다고 상상해보십시오. Sql Server, Oracle 및 MS Access를 평가합니다. 확장 할 수없고 참조 무결성을 잘 적용하지 않는 등의 이유로 GUI가 가장 좋기 때문에 Access를 선택하게됩니다. 분기 및 병합은 버전 제어 시스템의 절대적인 핵심 요소입니다. 다른 기능은 측면에서 약간의 블링입니다. 그러나 사람들은 블링을 기반으로 선택을하고 있습니다.
Charlie Flowers

17
나는 당신의 진술에 동의하는 경향이 있지만, Git의 브랜치 및 병합이 왜 "분산"시스템이기 때문에 "더 나은"지 모르겠습니다. DVCS가 되려면 병합 기능과 관련이 있는지 확실하지 않습니다. 분산 시스템에서 왜 병합이 더 쉬운 지 설명하고 싶습니다. 주로 Git 및 Svn 인 내 경험에서 SVN에 병합하는 것은 중앙 집중식 VCS이기 때문에가 아니라 GIT처럼 지점 전체의 개정을 올바르게 추적하지 않기 때문에 끔찍합니다.
CodingWithSpike 2016 년

8
@ rally25rs-나는 그것의 대부분에 동의합니다. VCS가 병합에 능숙하지 않은 이유는 없습니다. 아직 아무것도 없습니다 (내가 아는 것). 그러나 내가 동의하지 않는 부분은 "충돌을 더 잘 해결하는 더 나은 병합 루틴을 작성하는 것"입니다. 비밀 소스는 더 똑똑한 병합 루틴이 아니라 저장소에 어떤 정보를 저장하고 어떻게 구성하는지에 대해 근본적으로 다른 접근 방식을 취합니다. 주로, 만들기 내부 상태의 기초를 약속합니다. 커밋은 단지 멋진 볼트 온이 아니라 기능의 기초입니다.
Charlie Flowers

10
@ rally25rs는 전적으로 동의합니다 : 커밋은 원자 작업 단위입니다. 대부분의 중앙 집중식 시스템은 이러한 방식으로 데이터를 구성 할뿐만 아니라 실제로 분기 및 병합 작업을 훌륭하게 수행하기 위해 개발자가해야하는 순간적인 작업을 권장하지 않습니다. 분산 시스템은 내가 "긍정적 인"커밋 (자체를 포함하고 좋은 설명이 담긴 소규모의 커밋)을 장려하고 중앙 집중식 시스템은 내가 준비가 될 때까지 동굴에 구멍을 뚫고 날을 떨어 뜨릴 수있는 "diff bombs"를 장려합니다. 시스템에서 (또는 몇 주) 가치가있는 작업. 어떤 종류가 가장 잘 어울릴까요?
Ben Collins

45

원본 : @Rob, TFS에는 공식 빌드에 영향을주지 않으면 서 진행중인 작업 커밋에 대한 우려를 해결하는 " 선반 "이라는 것이 있습니다. 중앙 버전 제어를 방해로 간주하지만 TFS와 관련하여 선반에 코드를 검사하는 것은 강도 b / c로 볼 수 있으며 중앙 서버는 드문 경우에 진행중인 작업 사본을 가지고 있습니다 로컬 기계가 충돌하거나 분실 / 도난 당했거나 기어를 빠르게 전환해야합니다. 저의 요점은이 분야에서 TFS가 적절한 칭찬을 받아야한다는 것입니다. 또한 TFS2010의 분기 및 병합은 이전 버전에서 개선되었으며 "... TFS에서의 분기 및 병합이 좋지 않은 경험을 바탕으로 어떤 버전을 참조하고 있는지 명확하지 않습니다." 면책 조항 : 저는 TFS2010의 중간 사용자입니다.

2011 년 12 월 5 일 편집 : OP에 대해 TFS에 대해 귀찮게하는 한 가지 사항은 작업하지 않을 때 모든 로컬 파일을 "읽기 전용"으로 설정해야한다는 것입니다. 변경하려는 경우, 파일을 "체크 아웃"해야 파일의 읽기 전용 속성 만 지워서 TFS가 파일을 계속 주시하도록합니다. 불편한 워크 플로입니다. 내가 선호하는 방식은 내가 변경했는지 여부를 자동으로 감지하고 파일 속성에 전혀 신경 쓰지 않습니다. 그렇게하면 Visual Studio 또는 메모장에서 또는 원하는 도구를 사용하여 파일을 수정할 수 있습니다. 이와 관련하여 버전 관리 시스템은 가능한 투명해야합니다. Windows 탐색기 확장 ( TFS PowerTools)이 있습니다)를 사용하면 Windows 탐색기에서 파일로 작업 할 수 있지만 워크 플로를 크게 단순화하지는 않습니다.


2
이것은 질문에 대답하며, 담당자가 있더라도 의견이되어서는 안됩니다.
SingleNegationElimination

8
참고로-TFS "11"은 현재 기본값 인 로컬 작업 공간을 사용하는 경우 더 이상 읽기 전용 비트를 필요로하지 않습니다. 모든 응용 프로그램에서 변경된 파일을 지능적으로 검색합니다. Brian Harry는 개선 사항에 대한 자세한 정보를 제공합니다. blogs.msdn.com/b/bharry/archive/2011/08/02/…
Ed Blankenship

2
@EdBlankenship, 블로그 링크를 주셔서 대단히 감사합니다. 다음 버전의 TFS를보다 쉽게 ​​사용할 수 있도록 읽기 전용 비트 넌센스가 해결되고 있음을 알게 된 것은 매우 좋은 소식입니다.
Lee Grissom

7
Git과 마찬가지로 지점에서 커밋하는 것과 달리 선반을 이해하고 관리하기가 쉽지 않습니다. 선반이 만들어 질 때마다 커밋을 알지 못하고 병합에 문제가있는 경우가 많습니다 (그 후에 수정 한 경우 종종 손실 됨). 힘내 분기는 선반보다 훨씬 강력하고 이해할 수 있습니다. 선반은 다른 경험이없는 개발자를위한 것입니다.
Philippe

2
파일을 '체크 아웃'하는이 워크 플로는 일반적인 작업 방식이므로 Visual SourceSafe를 연상시킵니다. SourceSafe에서 파일을 검색하여 읽기 전용 파일로 로컬에 저장했습니다. 파일 또는 많은 파일을 체크 아웃하면 독점으로 표시 될 수 있습니다. 즉, 다른 개발자가 작업중 인 파일 세트를 볼 수 있으므로 분기가 비활성화되었을 때 병합 할 필요가 없습니다 (아마도 VSS의 오른쪽 돼지).
Brett Rigby

18

말한 모든 것의 위에 (

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

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

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

), 맞습니다. TFS는 단순한 VCS가 아닙니다. TFS가 제공하는 주요 기능 중 하나는 기본적으로 통합 된 버그 추적 기능입니다. 변경 세트는 문제와 연결되어 있으며 추적 할 수 있습니다. TFS를 실행하는 사람들이 가지고있는 Windows 도메인과의 통합뿐만 아니라 다양한 체크인 정책이 지원됩니다. Visual Studio와 GUI를 긴밀하게 통합 한 것은 또 다른 판매 포인트로, 평균 마우스 및 클릭 개발자와 그의 관리자 보다 매력적 이지 않습니다 .

따라서 Git과 TFS를 비교하는 것은 적절한 질문이 아닙니다. 비실용적이지만 올바른 질문은 Git을 TFS의 VCS 기능과 비교하는 것입니다. 그 때, Git은 TFS를 물 밖으로 불어냅니다. 그러나 심각한 팀에는 다른 도구가 필요하며 TFS는 한 번에 목적지를 제공합니다.


4
민첩한 도구 응용 프로그램에서 TFS가 제공하는 동일한 도구를 얻을 수 있습니다. 집회, 당신은 그것을 이름을 지정합니다.
PositiveGuy

2
나는 TFS가 더 넓은 목표를 가지고 있다는 사실에 동의하지만, 나는 "원 스톱 목적지를 제공하기 위해 TRIES"라고 말하지만, 시도하려는 작업에서 충분하지는 않습니다 (적어도 최선의 선택은 아닙니다). 풀다; 그것은 무딘 스위스 칼과 같습니다.
slashCoder

@PositiveGuy 작업이나 구성 없이는 얻을 수 없습니다. TFS는 클릭 한 번으로 모든 것을 제공합니다. 예를 들어, 전체 에코 시스템을 이제 클라우드 서비스로 사용할 수 있으며 구성이 필요 없습니다. 버전 제어, 스크럼 지원, 자동화 된 빌드, 테스트 랩 및 테스트 계획 관리를 모두 자신과 함께 통합하고 회사 LDAP (lie AzureAD)를 $ 10 / mo에 얻을 수 있다면 왜 내 마음에 갈까요? 내 자신의 조각을 붙여 넣으려고합니까?
Craig Brunetti

1
@ slashCoder 어떻게 풀 스위트가 각 조각에서 최고가 될 것으로 기대할 수 있습니까? 비 최고의 비용이 실제로 구성 요소의 통합을 관리해야하는 비용보다 더 큽니까? ... 어쩌면 어떤 곳에서는 그것을 볼 수 있습니다. 그러나 그런 것들을 실행하는 것은 순수한 오버 헤드입니다. 회사 GIT가 제대로 실행되고 있지만 JIRA 인스턴스가 다운되고 Jenkins 업그레이드가 진행되지 않으면 어떻게됩니까? 권리? 전기 톱 저글링과 같습니다. 불에. 반 눈가리개. :) :)
Craig Brunetti 2016 년

17

팀에서 TFS를 사용하고 Git을 사용하려는 경우 "git to tfs"브리지를 고려할 수 있습니다. 기본적으로 컴퓨터에서 Git을 사용하여 매일 작업 한 다음 변경 사항을 푸시하려면 TFS 서버로 변경 사항을 푸시합니다.

거기에 몇 가지가 있습니다 (github에). 마지막 장소에서 다른 개발자와 함께 하나의 성공을 거두었습니다. 보다:

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

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


6
마이크로 소프트는 Git 저장소 및 TFS와 직접 통합을 제공 : blogs.msdn.com/b/bharry/archive/2012/08/13/...
에드 Blankenship의

1
@EdBlankenship, 의견을 답변으로 변환 할 수 있습니다. OP에 대한 훌륭한 솔루션으로 보입니다. 투표하겠습니다. :)
Lee Grissom

1
Windows 이외의 다른 플랫폼을 사용하는 경우를 제외하고는 git-tfs를 선호해야합니다! git-tf는 git-tfs와는 거리가 멀다. 그리고 철학은 TFS 지향적이지만 git-tfs는 좀 더 지향적이다 (그리고 우리가 원하는 것이다!)
Philippe

15

찬반 양론을 조사한 결과, 제가 관여 한 회사도 TFS로 가기로 결정했습니다. GIT가 좋은 버전 제어 시스템이 아니기 때문에 TFS가 제공하는 완전히 통합 된 ALM 솔루션에 가장 중요합니다. 버전 제어 기능 만 중요한 경우 GIT 일 수 있습니다. 그러나 일반 개발자의 가파른 GIT 학습 곡선은 과소 평가되지 않을 수 있습니다.

내 블로그 게시물 TFS에서 진정한 교차 기술 플랫폼 으로 자세한 설명을 참조하십시오 .


3
그러나 TFS의 각 부분은 관리하기 어렵고 관리하기 어렵습니다 (실제로 TFS의 실제 관리자가 필요합니다). Git> TFS (VCS), Jenkins> TFS (CI), nunit 또는 xunit> mstest, IceScrum 또는 ...> TFS (Project Management)를보십시오. TFS는 처음 사용할 때까지 사용하는 것이 좋습니다!
Philippe

1
왜 TFS가 필요합니까? 좋은 민첩한 앱을 얻으십시오. 그런 다음 Git 또는 Subversion을 사용하면 나아갈 수 있습니다. TFS는 문제를 겪으면서 방해를받습니다.
PositiveGuy

업데이트 : TFS 2013 (서버) [및 VS12-13)은 이제 버전 제어를 위해 git을 지원합니다. 그래서 당신은 두 세계의 최고를 얻을 수 있습니다
DarcyThomas

2
물론 완전히 통합 된 ALM을 사용하는 것이 좋습니다. 그러나 유연성을 희생하지는 않습니다. IMO. ALM은 가능한 한 많은 "최상의 품종"기술로 구성되어야합니다. 또는 최소한 품종이 시간이 지남에 따라 변할 수 있기 때문에 최상의 품종을 통합 할 수있는 유연성이 있어야합니다. TFS를 선택하는 것은 기본적으로 "마이크로 소프트가 내 ALM의 모든 측면에서 이길 것"이라고 말하며, 이는 어리석은 일입니다. 예를 들어, Jira w / Jira를 사용하여 커밋 메시지를 기반으로 문제를 업데이트하거나 닫을 수있었습니다. 내 경험상 (TFS도 풍부함), 이것은 매우 뛰어난 워크 플로우입니다.
Scott Silvi

1
사이드 바-TFS / Git 통합을 사용하더라도 기본적으로 "문제 추적을 유지하면서 VCS를 Git으로 팜 아웃 할 수 있습니다"라는 말은 기본적으로 다른 문제 추적 소프트웨어와 함께 Git을 사용하는 것과 다르지 않습니다. 따라서 Microsoft가 유연성을 높이려고 시도 할 때 ALM 인수가 더 이상 유효하지 않다고 확신합니다.
Scott Silvi

14

Git의 전체 배포는 정말 훌륭합니다. 여기에는 로컬 롤백 및 커밋 옵션 (예 : Eclipse의 localhistory 기능 ) 과 같이 선반 세트에 현재 제품에없는 몇 가지 기능이 있습니다 . 개발자 브랜치를 사용하여이를 완화 할 수 있지만 솔직히 말하면 많은 개발자는 브랜칭 및 1 비트 병합을 좋아하지 않습니다. TFS에서 이전 스타일의 "독점 체크 아웃"기능을 너무 자주 몇 번 켜야했습니다 (매번 거부).

많은 대기업이 개발자가 전체 역사를 로컬 작업 공간으로 가져 와서 (예를 들어 새로운 고용주에게) 가져갈 수있게하는 것이 무서워한다고 생각합니다 ... 스냅 샷을 도용하는 것은 좋지 않지만 전체 역사를 빼앗아갑니다. 더 귀찮습니다. ( TFS 에서 원하는 전체 역사를 얻을 수는 없었 습니다) ...

백업을 수행하는 좋은 방법이라고 언급했는데, 이는 원래 유지 관리자가 관리를 중단하고 버전을 제거 할 수있는 오픈 소스를 다시 사용하는 것이 좋지만, 엔터프라이즈 계획의 경우 책임이 명확하게 지정되지 않기 때문에 많은 기업에게는 다시 부족합니다. 백업을 유지합니다. 그리고 주요 '프로젝트'가 어떻게 든 사라지면 사용할 버전을 파악하기가 어려울 것입니다. 하나의 저장소를 주요 / 중앙으로 지정하는 경향이 있습니다.

Git에서 가장 마음에 드는 점은 Push / Pull 옵션으로, 커밋 권한이 없어도 프로젝트에 코드를 쉽게 제공 할 수 있습니다. TFS에서 매우 제한된 사용자 및 선반 세트를 사용하여이를 모방 할 수는 있지만 Git 옵션만큼 강력하지는 않습니다. 팀 프로젝트 전체에 걸쳐 분기해도 효과가있을 수 있지만, 팀 프로젝트를 추가하면 많은 관리 오버 헤드가 발생하기 때문에 관리 측면에서는 많은 조직에서 실제로 실현 가능하지 않습니다.

또한 비 소스 제어 영역에서 언급 한 내용을 추가하고 싶습니다. 작업 항목 추적,보고 및 빌드 자동화 (실험실 관리 포함)와 같은 기능은 중앙의 주요 리포지토리에서 큰 이점을 얻습니다. 순수한 분산 모델을 사용하면 노드 중 하나를 선행하지 않고 덜 분산 된 모델로 돌아 가지 않는 한 훨씬 더 어려워집니다.

TFS 11과 함께 제공되는 TFS Basic을 사용하면 로컬 TFS 기본을 TFS 12+ 시대의 중앙 TFS와 동기화 할 수있는 분산 TFS를 기대할 수 있습니다. 나는 그것에 대한 투표를 uservoice에 넣을 것이다 !


당신은 또한 마이크로 소프트에 의해 당신에게 가져이 새로운 기능에 관심이있을 수 있습니다 : gittf.codeplex.com
jessehouwing

1
git-tfs를 사용하십시오. 현재로서는 git-tf보다 낫습니다 !!! github.com/git-tfs/git-tfs
Philippe

3
이 전체 답변이 빨리 구식이되었습니다. Microsoft는 Team Foundation Service에 Git 지원을 추가했으며 다음 주요 Team Foundation Server 릴리스에 Git에 대한 지원을 추가 할 것입니다.
jessehouwing 2013

1
@ 필립 : 나는 두 가지를 모두 시도했습니다. 몇 가지 차이점 : 1) git-tf는 크로스 플랫폼이지만 git-tfs는 Windows에서만 실행됩니다. 2) git-tfs는 변경 세트 번호를 포함하기 위해 "푸시"할 때 커밋 설명을 다시 작성하지만 git-tf는 로컬 커밋 해시를 그대로 둡니다.
Joey Adams

@JoeyAdams 1) +1, git-tf를 선택하는 유일한 이유입니다. 2) checkinrcheckin 대신 command를 사용하여 git-tfs로도 할 수 있습니다 . 그러나 나는 rcheckin을 선호합니다. 왜냐하면 일을하는 것이 더 git 방식이므로 git을 사용하는 이유입니다.)
Philippe

9

나에게 가장 큰 차이점은 TFS가 TFS를 '지원'하기 위해 솔루션 (.vssscc)에 추가 할 모든 임시 파일입니다.이 파일에 대한 최근 문제가 잘못된 분기에 매핑되어 흥미로운 디버깅이 발생합니다. ...


2
여기가 좋은 지적입니다. 힘내 .git폴더를 추가하여 모든 저장소 세부 사항을 추적합니다. TFS는 최소한 원격 저장소의 위치를 ​​저장하기 위해 파일을 수정합니다 .sln(또는 .csproj파일입니까?).
CodingWithSpike 2013 년

5
VSS가 파일을 '수정'하는 방법을 싫어하는 데 얼마나 많이 사용했는지 잊어 버렸습니다.
Paddy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.