Git 사용자가 Subversion에 모든 소스 코드가 로컬로 없다고 말하는 이유는 무엇입니까?


23

나는 내가 읽은 것에 대해서만 진행하고 있으므로 용서하십시오. 그러나 Subversion에 대한 Git의 주요 이점 중 하나는 Git이 개발자에게 모든 소스 코드를 로컬로 제공한다는 것입니다. 서버.

SVN과 TortoiseSVN을 제한적으로 사용하면서 모든 소스 코드가 있거나 적어도 내가 생각했다고 생각합니다. 예를 들어 웹 사이트가 있습니다. SVN에 업로드합니다. 나는 여전히 내 웹 사이트를 로컬로 운영하고 있습니까? 누군가 변경 사항을 제출했는데 연결되지 않은 경우 서버에 다시 연결할 때까지 Git이 있는지 여부는 중요하지 않습니다.

난 이해가 안 돼요. 나는이 점을 제외하고 하나 대 다른 것의 리 해시를 요구하지 않습니다.


2
모든 소스 코드가 로컬에있는 것이 아니라 전체 리포지토리 기록이 로컬에 있다는 것입니다. 따라서 서버 동기화 이외의 모든 리포지토리 상호 작용이 훨씬 빨라집니다.
stonemetal 2009 년

답변:


69

당신이 실제로 질문하는 전제는 잘못되었습니다.

Subversion보다 Git의 주요 장점 중 하나는 Git이 모든 소스 코드를 개발자에게 로컬로 제공한다는 것입니다

Subversion과 Git을 모두 사용하면 소스 코드가 로컬에 있습니다. Git을 사용하면 로컬 컴퓨터에 소스 코드와 리포지토리모두 있습니다 .

이런 식으로 진행됩니다.

파괴:

귀하의 코드 <-> 리포지토리

힘내 :

코드 <-> 로컬 저장소 <-> 원격 저장소 (... <-> 다른 원격 저장소 등)

이 구조에서 얻을 수있는 이점 중 하나는 다른 팀 구성원 (원격 저장소를 공유하는 사람)의 작업을 방해하지 않고 소스 제어를 사용하고 로컬 변경 사항을 로컬 저장소에 커밋 할 수 있다는 것입니다.

Subversion을 사용하면 다른 사람을 위해 빌드를 깨뜨릴 위험이 있거나 소스 제어없이 장기적인 로컬 개발에 어려움을 겪어야합니다.

반면에 Git을 사용하면 이러한 변경 사항을 로컬 리포지토리에 커밋하고 로그 및 diff 또는 변경 사항을 볼 수 있으며 팀과 공유 할 준비가되었다고 느낄 때만 로컬에서 변경 사항을 푸시합니다 원격 저장소.


10
이것은 매우 좋은 답변이며 실제로 "... 다른 사람들을위한 빌드를 깨뜨 리거나 소스 제어없이 장기간 지역 개발을 겪고있다"는 말로 집에 닿습니다.
Charles Sprayberry

1
@ cspray : 감사합니다! 다른 이점도있을 것이라고 확신하지만 Svn에서 가장 큰 고통입니다.
Goran Jovic

git FTW (8 more to go ...)
Trevor Boyd Smith

2
@ DanNeely : 실제로 그렇습니다-OP는 어딘가에서 읽은 주장에 대해 물었고 그 대답은 단순히 사실이 아니라는 것입니다 (내 대답의 첫 부분 참조). 두 번째 부분은 주장을 한 사람이 말하고 싶었던 이유와 이유에 대한 설명 일뿐입니다.
Goran Jovic

1
@Giorgio : 시도해 보시면 알 것입니다.) 진지하게, 나는 도구 없이도 완전히 수동으로 병합하는 것 외에는 문제없이 그렇게 할 수 있다고 생각하지 않습니다.
Goran Jovic

17

Git 또는 Mercurial은 모든 리포지토리 및 명명 된 분기와 함께 전체 리포지토리를 로컬로 저장합니다. Subversion은 하나만 저장합니다 (일반적으로 헤드 리비전). 따라서 Git 및 Mercurial을 사용하면 네트워크가 SVN으로 고장날 때에도 전체 저장소 (즉, 현재 소스 코드 히스토리)에 액세스 할 수 있습니다 . 업데이트 한 마지막 개정으로 제한됩니다.


1
@ 머프 감사합니다. 그것은 본질적으로 내가 의미 한 것입니다. 나는 명확히하려고 노력했다.
Amenti

서버에 네트워크로 연결되어 있는지 여부는 문제가 아닙니다. 로컬 IO는 네트워크 IO보다 훨씬 빠르고 대기 시간이 짧으므로 기록을 검사하거나 파일을 훨씬 빠르게 비난 할 수 있습니다 (TrotiseSVN의 비난 경고 "잠시 기다려주십시오. 심각합니다!"). 트레이드 오프는 모든 히스토리를 로컬에 두려면 더 큰 저장소에 더 많은 디스크 공간이 필요할 수 있습니다. 작은 비은행 용 SSD를 보완하기 위해 추가 드라이브를 추가 할 수 없다는 점에서 랩톱에서 문제가 될 수 있습니다.
Dan Neely

@DanNeely의 의견은 2012 년에 합리적 이었을지 모르지만 4 년 후 SSD의 모든 부분을 차지할 수있는 자식 프로젝트를 찾는 것은 거의 불가능합니다.
Igor Stoppa

7

짧은 대답은 이것입니다 : git을 사용하면 모든 소스 코드가 있고 subversion을 사용하면 최신 버전 의 소스 코드가 모두 있습니다.

Git은 저장소의 전체 히스토리 사본을 로컬에 보관합니다. Subversion을 사용하면 전체 기록이 서버에 있습니다.


2

SVN을 사용하면 GIT와 달리 서버와의 모든 통신이 필요합니다. SVN을 사용하면 분기하려는 경우 서버에서 분기하고 해당 분기를 끌어 내립니다. GIT를 사용하면 "서버"에 대해 알 필요없이 로컬 지점을 만들 수 있습니다.

SVN과 GIT가 모두 포함 된 소스 코드를 가지고 있지만 GIT를 사용하면 소스 코드가 포함 된 중앙 집중식 서버가 없어도됩니다. GIT를 사용하면 소스 코드를 가진 유일한 사람 일 수 있지만 여전히 일반적인 VCS에서 수행하는 모든 기능을 수행 할 수 있습니다.

나는 GIT에 대한 주장을 들었고 이것이 중앙 저장소에 커밋 할 필요가 없기 때문에 커밋하고 서버에 푸시 할 때까지 소스 코드를 소유하고 있다고 말하는 데 도움이 될 것이라고 생각합니다. 너가 하나 가지고 있네. SVN을 사용하면 버전을 제어 할 수있는 유일한 방법은 서버에 커밋하는 것 뿐이지 만 GIT를 사용하면 잠재적으로 로컬 컴퓨터에 모든 것을 유지할 수 있고 잘못 될 경우 쉽게 할 수 있지만 "모든 것을 잃을 수 있습니다" 커밋하지 않고 HDD가 충돌하면 SVN으로 모든 변경 사항을 잃게됩니다.


1

중앙 저장소에 커밋 할 필요가 없으므로 소스 코드가 있으면 커밋하고 서버에 푸시 할 때까지 소스 코드를 소유합니다. SVN을 사용하면 버전을 제어 할 수있는 유일한 방법은 서버에 커밋하는 것 뿐이지 만 GIT를 사용하면 잠재적으로 로컬 컴퓨터에 모든 것을 유지할 수 있고 잘못 될 경우 쉽게 할 수 있지만 "모든 것을 잃을 수 있습니다" 커밋하지 않고 HDD가 충돌하면 SVN으로 모든 변경 사항을 잃게됩니다.

매일 밀면 위험이 적습니다. 그러나 매일 SVN 서버에 커밋 해야하는 경우 하루가 끝나면 하나의 큰 변경 세트로 모든 것을 만들 수 있으며 모든 변경 사항을 작은 단계로 분리하지는 않습니다. git을 사용하면 여러 개의 작은 커밋을 수행하는 것이 좋습니다. 푸시 할 때 병합이 필요한 경우 병합 및 푸시를 시도하십시오. 현재 병합 할 수없는 경우 서버의 새 브랜치 또는 다른 리포지토리로 푸시 할 수 있습니다.

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