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.