분산 버전 제어 시스템의 비즈니스 사례


26

git / mercurial / bazzr 시스템이 중앙 집중식 시스템 (subversion, perforce)보다 나은 비즈니스 이유를 검색하지 못했습니다 .

당신은 DVCS를 제공 할 것을 인수 비 기술적 인 사람에게 DVCS를 판매하려고 한 경우 이익 증가 .

곧 관리자에게 git을 던질 것입니다 .subversion 저장소를 변환하고 smartgit 라이센스를 구입하는 데 약간의 시간이 걸립니다.

편집 이 질문을 중앙 집중식과 분산 형에 대한 일반적인 토론으로 만들려고했지만 필연적으로 git vs subversion으로 바뀌 었습니다. 확실히 Subversion보다 중앙 집중식 시스템이 더 좋습니다.


1
우리는 사건을보고있는 비슷한 입장에 있으며, 현재 상황이 있다고 확신하지는 않습니다.
Jon Hopkins

git-svn당신의 필요를 충족?
JBR 윌킨슨

@JBRWilkinson 방금 git-svn을 사용하여 여러 저장소를 git으로 마이그레이션했습니다. 이 회사는 svn과 통합되는 도구에 많은 투자를하지 않았으므로 큰 문제가되지 않았습니다.
Keyo

편집을 참조하십시오-당신은 여전히 ​​교체가 필요하다고 생각하는 SVN이 어떻게 그리고 왜 실패했는지 설명하지 않았습니다. 내 대답 (예 : git vs svn )은 상태 유지를위한 비즈니스 사례를 찾는 것에 관한 것이 아닙니다 .
Murph

답변:


23

흠, 매니저로서 나는 이것에 대한 두 개의 즉각적인 "무릎 찌르기"반응이 있습니다.

  • 아직 합당한 이유가 없다면 왜 최신 유행 이외의 git을 투구하고 있습니까?
  • 마찬가지로 Subversion은 어떻게 교체가 필요합니까?

나는 실제로 부정적인 것이 아닙니다-아마도 상황에 따라 달라질 수 있다고 생각합니다. 그러나 만약 git이 subversion보다 "더 나은"것이라면, 실제로는 없습니다.

또한 마이그레이션 및 도구 변경의 오버 헤드를 이미 식별 한 단점을 열거 할 수 있어야합니다. 다른 문제는 무엇입니까? 예를 들어, 중앙 집중식 백업 저장소는 어떻게 되나요? 지속적인 통합 빌드 서버와 어떻게 통합합니까 (없는 경우 git을 잊어 버리고 먼저 정렬하십시오). 보안 및 추적-SVN은 적절한 로그인 및 권한으로 실행됩니다.

내 생각에 이점은 유연성, 더 나은 병합, 빌드를 중단하지 않고 로컬 커밋을 수행하는 기능에 있습니다. 단점은 제어력이 부족하고 유연성이 동일하다는 것입니다.

"더 나은"서브 버전 클라이언트로 머신에 로컬로 git을 실행하기 만하면됩니다 (수은을 사용하여이 작업을보고 있습니다).

흠, 아마도이 전체 답변은 실제로 주석입니까? 당신은 당신의 케이스를 만들 필요가 여기에 우리는 당신이 비즈니스 사례를 식별 할 수 있는지 확인하기 위해 (사용자 환경) 파괴를 통해 자식을 위해 (질문에).


FWIW, 나는 저장소의 특정 인스턴스를 트렁크 / 참조 소스로 쉽게 지정할 수 있다는 것을 알고 있으며, 더 나아가 관리 서버보다 DVCS를 사용하는 것보다 차이점이 있습니다. 아키텍처 고유의 무언가.


1
권한 / 유연성 문제 해결 : 여전히 평소처럼 권한을 설정할 수있는 "소스"저장소도 필요합니다. Continuous Integration은 소스 리포지토리에 대해 실행되고 개발자는 소스 리포지토리 등을 복제합니다. 모든 사람이 체크 아웃이 아닌 복제본을 가지고 있기 때문에 백업은 덜 중요합니다.
Matthieu M.

1
전체 복제본이 백업되고 있다는 점이 잘 알려져 있습니다. 나는 나의 "일"물건이 svn이고 나의 수은이 개인적이고 아직 다소 제한적이기 때문에 충분히 이해하지 못하는 이것의 일부 영역이 있음을 자유롭게 인정할 것이다.
Murph

14

빠르고 새로운 분기 및 병합을 통해 개발자는 모든 새로운 기능을 분기 한 다음 나중에 병합 할 수 있으므로 코드를보다 생산적으로 활용할 수 있다고합니다. 개발 과정이 훨씬 순조롭게 진행됩니다. 또한 분산 특성으로 인해 모든 개발자가 전체 코드 사본을 보유 할 수 있으므로 모든 코드를 다운시키는 중앙 서버 오류에 대해 걱정할 필요가 없습니다. 그러나 Git을 사용하는 가장 큰 이유는이 두 가지 이유 일 것입니다.


2
비즈니스 환경에서 '중앙 집중식 서버'에는 이중화, 백업 및 관리자가 서버 (및 기타 모든 서버)를 유지하는 책임이 있습니다.
JBR 윌킨슨

2
대규모 비즈니스 환경에서는 서버 중복성이 있습니다. 소규모 비즈니스에서는 이러한 서버 중복성이 확실하지 않습니다.
Michael Shaw

2
중앙 집중식 서버 장애가 모든 코드를 중단 시키지는 않습니다. 백업이 없더라도 최악의 경우 개정 기록을 삭제하는 것입니다. 그러나 모든 개발자가 코드를 체크 아웃하는 한 시스템에도 현재 형태로 존재합니다.
메이슨 휠러

1
@mason : 그러나 그것은 매우 전제입니다 : '모든 개발자 들이라면 ...'. 규모가 더 작은 프로젝트를 가진 소규모 회사들에서 프로젝트는 1 년 동안 코딩하지 않고도 살 수 있고 행복하게 사용될 수 있습니다. 이.
잉카

또한 커밋 기록의 가치를 과소 평가하지는 않을 것입니다. 거대한 시스템에서는 누가 그리고 왜 코드에 무언가를했는지 볼 수 있습니다.
Tamás Szelei

8

개발자가 혼자 작업하는 경우에도 버전 제어를 통해 생산성을 높이고 (따라서 수익을 올릴 수 있음) 가정 할 수 있습니다.

우수한 DVCS는 팀의 일원으로 일할 때도 동일한 생산성 이점을 인식합니다. 각 개발자는 버전 제어 작업의 모든 이점을 얻을 수 있습니다. 다른 개발자가 변경 사항을 푸시 할 준비가 될 때까지 수행하는 작업.


이것이 제가 게시하려고하는 내용입니다. 동료들에게 문제를 일으키지 않고 개발자들이 초기에 자주 자신의 저장소에 커밋하는 생산성의 향상을 확실히 볼 수 있습니다.
Carson63000

5
그러면 결국 변경 사항을 적용 할 때 통합 문제가 발생합니다. 이것은 좋지 않은 나쁜 것입니다.
Henry

커밋이 많은 로컬 개발을 수행하는 동안 중앙 리포지토리에서 변경 사항을 계속 가져오고 다른 변경 사항이 진행중인 진행중인 개발에 맞춰 로컬 변경 사항을 유지할 수 있습니다. 따라서 변경 사항을 중앙 리포지토리로 푸시 할시기가되었을 때 이미 발생한 대부분의 변경 사항이 있어야하며 통합이 쉬울 것입니다.
DaveJohnston

1
동료 중 한 명이 똑같은 일을하고 두 사람 모두 한동안 통합되지 않은 경우를 제외하고. 항상 상충 관계가 있습니다. 나는 그들이 잘못해서는 안되는 메인 라인에 물건이 통합 된 경우 (잘못된 솔루션, 솔루션에서의 막 다른 시도 등)를 보았으며 기능 완성도에 통합하면 특전이 있습니다.
Joppe

2
(a) SVN 지점 또는 (b) 여러 작업 사본으로 이러한 모든 작업을 수행 할 수 없습니까?
JBR 윌킨슨

4
  • 버그 당 분기
  • diff의 대기 시간이 줄어 듭니다.
  • 할 수있는 매우 당신이있는 거 피어가 검토 할 때 분기의 역사를 통해 빠르게 탐색 임의로.
  • 중앙 집중식 서버에 액세스 할 수없는 경우에도 전체 기록에 액세스 할 수 있습니다. 사무실에 있지 않고 전원이 꺼졌지만 랩톱의 배터리가 계속 작동하는 등 ...

이러한 것들을 통해 솔로와 팀 모두에서보다 효율적으로 작업 할 수 있습니다. 보다 효율적인 작업 = 개발 시간 단축 = 시장 출시 시간 단축 = 수익.


3

내 블로그에 링크 해 주신 것을 용서해주십시오. 그러나이 주제에 관한 기사를 작성했습니다.

관련성이없는 경우 자유롭게 투표하십시오.

간단히 말해서 DVCS는 브랜칭 모델을 쉽게 만들어 많은 개발자 그룹이 서로 발끝을 밟지 못하게하여 생산성과 일일 빌드 품질을 모두 향상시킵니다. 버전 리포지토리의 복잡한 공동 작업은 로컬 리포지토리에서 수행 할 수 있으므로 중앙 리포지토리가 더 깨끗하고 고품질입니다. 또한 지사에 대한 결정은 효율성에 큰 영향을 줄 수 있습니다. 예를 들어 한 부서가 1.0을 다른 부서에서 정리하고있을 때 2.0에 대한 작업을 시작할 준비가 된 경우입니다. DVCS를 사용하면 이러한 결정을위원회가 아닌 로컬 수준에서 수행 할 수 있습니다.


블로그 항목이 잘 작성되었습니다. 그래도 아직 모든 내용을 읽지는 않았습니다. Git과 Hg가 훨씬 더 인기가있을 때 왜 Bzr을 선택했는지 궁금합니다. 사람들은 느려서 Bzr을 싫어하는 것 같습니다. 또한 개정 번호 대신 트리 해시로 인해 Git의 팬이기도합니다. 매우 안전합니다. 분기가 병합 될 때 bzr rev 번호가 모두 스크램블되지 않습니까?
Keyo

2
@Keyo, 나는 DVCS를 나 자신에게 가르쳐야했기 때문에 bzr을 선택했고 bzr은 가장 친숙한 것이다. 그 이후로 속도, 기능 및 안정성을 위해 git으로 전환했습니다. Bazaar는 또한 개정판을 해시하고 전 세계적으로 고유 한 식별자를 가지고 있으며 사용자에게 기본적으로 노출되지 않습니다. 그들의 개정 번호를 사용하는 것보다 정말 다르지 않습니다 HEAD~1, HEAD~2등의 자식. 실제 해시가 필요한 경우는 매우 드물지만 git에서 가장 먼저 배우고 항상 당신의 얼굴에 있습니다. 당신이 정말로 필요하지 않으면 사용자로부터 그것을 숨기면 bzr이 더 친숙한 것입니다.
Karl Bielefeldt

설명해 주셔서 감사합니다. 힘내는 내가 서브 버전에서 오는 것이 쉽지 않았습니다. 많은 명령들은 같은 단어를 가지고 있지만 다른 일을합니다.
Keyo

2

DVCS에 대한 나의 주장은 다음과 같습니다.

  • 분기가 끊어지지 않아 기능 개발 및 기존 제품 패치 유지시 마찰이 줄어 듭니다. 마찰 비용은 시간이 걸립니다.

  • 최신 시스템으로 전환하면 최첨단 개발자가 더 많이 끌어 들여 더 나은 제품 문화가 생겨 비즈니스가 더 많은 제품을 판매 할 수있게됩니다.

  • 네트워크가 아닌 커밋이 더 빠르기 때문에 개발자가 자주 커밋하여 세밀한 버그 감지 및 분석을 수행 할 수 있습니다.

본질적으로 마찰을 줄이는 것입니다. Muda 라는 용어가 있습니다 . 마찰이 많을수록 더 많은 고통을 겪습니다. 고통이 많을수록 더 적은 이익을 얻습니다.


2

내가 돋보이는 것에 대해 사과하지만, 불확실한 조건으로 비즈니스 사례를 제시 할 수 있습니다.

SVN은 개발자의 삶을 비참하게 만듭니다 . 그리고 그것은 소프트웨어 사업을 비참하게 만듭니다.

... 많은 사람들이 DVCS를 사용하기 시작할 때까지 깨닫지 못하는 방식으로. 이것은 가능한 가장 중요한 비즈니스 사례입니다 . 왜? 음, 좋은 개발자를 발견하고 유지하는 비용에 비해 DVCS로 전환 비용은 거의 존재하지 않는 것입니다 .

다음을 고려하세요:

  • SVN (및 대부분의 다른 CVCSe)에서 가장 사소한 작업을 제외한 모든 작업에는 네트워크 액세스가 필요합니다. 대부분의 DVCS에서 네트워크 액세스는 push또는 pull작업 을 수행 할 때만 발생합니다 . 이는 사소한 명령이 느리다 는 것을 의미합니다 . 명령이 영원히 걸릴 때 당신은 무엇을합니까? 나는 기다리는 동안 개인적으로 programmers.se 또는 해커 뉴스를 탐색합니다. 간단히 말해, DVCS를 사용하면 프로그래머가 회사 소프트웨어를 작성하는 등 자신이 좋아하는 일에 집중할 수 있습니다 .
  • SVN은 감옥에서 샤워 시설에 비누를 떨어 뜨릴 수 있도록 지원하는 것과 거의 같은 방식으로 분기를 지원합니다. 따라서 SVN은 개발자들이 끊임없이 서로 싸우면서 변화를하도록 강요합니다 .
  • SVN이 다운되면 다운됩니다. 개발자가 전혀 할 수 없다면 일을하는 것이 몹시 어려워집니다. 따라서 SVN은 개발자가 100 % 버그가없는 인프라에 의존하도록합니다 .
  • 요즘 git은 빠르게 정신을 공유하고 SVN은 빠르게 잃고 있습니다. SVN보다 DVCS를 사용하는 데 이점이 없다면 왜 프로그래밍 커뮤니티가 가능한 빨리 변경됩니까?

이 모든 것이 무엇입니까? DVCS에 정직한 시도를 한 개발자에게 아직 SVN을 선호하는 개발자를 만나지 못했습니다. 내가 더 성가신 대담한 진술을 할 수 있다면 SVN은 개발자들이 스스로 사용하도록 강요하는 "필요한 악"이다. Git은 개발자를보다 생산적이고 행복하게 만드는 도구입니다 .

(굵은 글씨는 당신이 중점을 두어야 할 구체적인 내용이라는 것을 지적해야합니다. 나머지는 단지 맥락을 제공합니다.)


5
-1-당신은 칭찬하고 당신이 쓴 것에 약간의 진실이 있지만, 그것은 합리적인 분석보다는 FUD에 영향을 미치기 위해 부정적으로 회전합니다. SVN이 느립니까? 저장소가 방대하고 네트워크 빙하 인 경우에만. SVN이 작동을 멈 추면 작동이 중지됩니다. 음, 컴퓨터가 소스를 편집 / 컴파일 / 실행하기 위해 저장소의 존재에 의존하지 않기 때문에 작동이 중지되고 NO를 기억할 수 없습니다. SVN 분기 및 병합이 좋지 않습니까? 와우 사람들은 기억이 짧습니다 ... DVCS가 왜 마음을 공유합니까? 개선 된 기능성, 그리고 솔직히 패션의 혼란.
Murph

1
@ 머프-좋아하든 그렇지 않든 사람들은 끔찍한 점으로의 변화를 싫어 합니다. 그들이 변화하도록 설득하려면 현 상태가 깨 졌음을 확신시켜야합니다. 그리고 그것은 된다 깨진. FUD는 두려워하고, 불확실하며, 의심 할만한 이유가없는 경우에만 나쁩니다. mindshare에 관해서는, 나는 당신에 동의합니다. 그러나 그것은 실제로 요점이 아닙니다. 결정을 내리는 사람들이 그것에 동의하는지 여부입니다. 그리고 내가 만난 모든 관리자는이 주장에 확신을 얻었습니다 ( git이 싫어 하더라도 ).
Jason Baker

2
제이슨이 당신의 주장이 제대로 이루어지지 않았다고 단지 제안한다고 반드시 동의하지는 않습니다. 특히 나는 당신이 효과를 발휘하기 위해 노력하고 있다고 생각합니다. 만약 당신이 그렇게된다면, 당신이 옳더라도 논쟁의 포인트를 잃는 경향이 있습니다. (물론 틀린 점을 제외하고 ... (
:)

2
모든 요점은 사실보다는 의견의 문제입니다. 나는 각각 열거하지만 의견에 충분한 공간이 없습니다. 손대지 않고 다시 대답하는 것은 어떻습니까?
Henry

1
@Henry-Programmers.se는 주관적인 질문과 답변을위한 것입니다. 주관적 == 의견의 문제.
Jason Baker

1

내가 생각할 수있는 유일한 것은 git이 네트워크 연결없이 작동한다는 것입니다. 다른 모든 것들은 종종 오랜 시간 동안 침수 또는 퍼 포스를 사용하는 기술 사용자에게 판매하기가 어렵습니다.


2
물론 Subversion은 네트워크 연결 없이도 대부분 작동합니다. (확실히 커밋하지는 않지만 작업 카피에 대한 정보를 얻거나 기본 개정판을 사용하는 것과 같은 일반적인 작업은 모두 작동합니다.)
j_random_hacker

@j_random_hacker : VCS의 요점은 코드 변경을 추적하는 것입니다. 커밋은 코드 변경을 추적합니다. 오프라인으로 커밋 할 수없는 경우 VCS가 오프라인 상태에서는 작동하지 않는다고 주장합니다.
데니스

1

문제가 생겼을 때의 차이 쇼

우리는 10 년 전의 저장소를 이식 한 후 6 개월 전에 자식으로 전환했습니다.

지금까지 약간의 실험을 거쳐 다음을 발견했습니다.

  • 분기 및 병합은 거의 고통이 없습니다. 이를 통해 서로 발가락을 밟지 않고도 별도의 기능과 버그 수정 작업을 훨씬 쉽게 수행 할 수 있습니다. 또한 특정 버그 수정을 다른 곳에 적용하는 것도 매우 쉽습니다.

  • 설계 상보다 견고 함-사용 가능한 중앙 서버에 100 % 의존하지 않으며, 그렇지 않은 경우 임시 복제본을 임시 교체로 임시로 사용할 수 있습니다. 이것은 중대한 실패 지점을 제거합니다. 어떤 이유로 든 SVN 서버가 다운되면 아무도 SVN 작업을 수행 할 수 없습니다. 어떤 이유로 든 중앙 git 리포지토리가 다운 된 경우에도 커밋이 복제되도록 로컬에서 작업 및 푸시 / 풀할 수 있습니다. 이 목적을 위해 여러 개의 오프 사이트 리포지토리를 가질 수도 있습니다.

  • 저장소 상호 작용이 단순화되었습니다. CVS의 경우 정보가 필요할 때마다 항상 액세스해야했습니다. 자식의 경우 전체 저장소를 로컬에서 사용할 수 있으므로 많은 작업을 더 빠르게 수행 할 수 있습니다.

따라서 이점은 일상 생활에서 그다지 중요하지 않지만 올바르게 작동하지 않는 순간이 매우 분명합니다!

따라서 비즈니스 사례의 경우 재난 발생시 수행 할 작업을 살펴 ​​보는 것이 좋습니다.


백업과 같은 주장입니다. 재난 발생시에만 필요합니다. 질문은 당신이 할 때 무엇을 할 것인지, 그리고 그때 일어날 것을 받아 들일 것입니다.

0

브랜치 및 병합의 용이성은 가장 확실한 이유이지만 누군가를 설득하여 그것이 어떻게 개선되는지에 대한 구체적인 예를 제시해야합니다.

앱의 성능 향상을 위해 노력하는 프로그래머가 몇 명 있는데 실험 단계에 있으며 작성중인 코드가 마스터 / 트렁크 브랜치의 일부인지 여부를 모릅니다. 그러나 그들은 종종 서로 코드를 공유하고 막 다른 아이디어를 시도해야합니다. Subversion에서 이러한 빈번한 분기 및 병합을 어떻게 관리합니까? 짧은 대답은 당신이하지 않는 것입니다. dvc를 사용하면 정말 쉽습니다. 프로그래머는 새로운 아이디어를 신속하게 시도하고 다른 아이디어를 공유하기 전에 다른 아이디어를 공유 할 수 있습니다.


-1

SubVersion을 버리는 비즈니스 사례는 분기 지원이 제품 안정화 및 유지 관리에 대한 장벽이라는 것입니다. 제품을 출시 한 다음 개발을 계속해야 할 경우 지점이 필요합니다. Subversion을 사용하면 개발자는 분기를 올바르게 사용하지 않으므로 벙크에 대한 개발을 유지하지 못하고 실제로 버그 수정으로 트렁크와 분기 모두에 해당 버그를 수정해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.