>개발 도구 >자식 >GIT와 SVN의 차이점에 대한 자세한 설명

GIT와 SVN의 차이점에 대한 자세한 설명

Guanhui
Guanhui앞으로
2020-07-18 17:44:175305검색

GIT와 SVN의 차이점에 대한 자세한 설명

GIT는 버전 관리 시스템일 뿐만 아니라 콘텐츠 관리 시스템(CMS), 작업 관리 시스템 등도 갖추고 있습니다. SVN 사용에 대한 배경 지식이 있는 사람이라면 GIT에서 제공하는 일부 개념과 기능에 적응하기 위해 약간의 정신적 변화가 필요합니다. 따라서 이 글의 주요 목적은 GIT가 무엇을 할 수 있는지, SVN과 어떻게 다른지 좀 더 심층적으로 소개하여 이해를 돕는 것입니다.

1. GIT는 분산되지만 SVN은 그렇지 않습니다.

이것이 GIT와 SVN, CVS 등과 같은 기타 비분산 버전 제어 시스템의 핵심 차이점입니다. 이 개념을 이해할 수 있다면 절반은 온 것입니다. 약간의 면책 조항이 필요합니다. GIT는 현재 최초 또는 유일한 분산 버전 제어 시스템이 아닙니다. Bitkeeper, Mercurial 등과 같이 분산 모드에서도 실행되는 일부 시스템도 있습니다. 그러나 GIT는 이와 관련하여 더 나은 작업을 수행하고 더 강력한 기능을 제공합니다.

GIT는 SVN과 마찬가지로 자체 중앙 저장소나 서버를 가지고 있습니다. 그러나 GIT는 분산 모드에서 사용하는 것을 선호합니다. 즉, 각 개발자는 중앙 저장소/서버에서 코드를 체크아웃한 후 자신의 컴퓨터에 자신의 저장소를 복제합니다. 비행기 안, 지하실, 엘리베이터 안 등 인터넷 접속이 불가능한 장소에 갇힌 경우에도 파일 제출, 기록 버전 기록 보기, 프로젝트 브랜치 생성 등이 가능하다고 할 수 있습니다. 누군가에게는 별로 쓸모가 없어 보일 수도 있지만, 갑자기 네트워크가 없는 환경에 직면했을 때 큰 문제를 해결할 수 있습니다.

마찬가지로 이 분산 운영 모드는 오픈 소스 소프트웨어 커뮤니티 발전을 위한 큰 선물이기도 합니다. 더 이상 이전처럼 패치 패키지를 만들어 이메일로 보낼 필요가 없습니다. 프로젝트 팀이 푸시 요청을 보냅니다. 이렇게 하면 코드가 최신 상태로 유지되고 이동 중에 분실되지 않습니다. GitHub.com은 정말 훌륭한 사례입니다.

향후 버전의 Subversion도 분산 모드를 기반으로 할 것이라는 일부 소문이 퍼졌습니다. 그러나 적어도 아직은 보이지 않습니다.

2. GIT는 콘텐츠를 메타데이터로 저장하고 SVN은 콘텐츠를 파일로 저장합니다.

모든 리소스 제어 시스템은 .svn, .cvs 등과 같은 폴더에 파일의 메타정보를 숨깁니다. .git 디렉토리의 크기를 .svn의 크기와 비교해 보면 둘이 매우 다르다는 것을 알 수 있습니다. .git 디렉터리는 컴퓨터에 있는 저장소의 복제된 버전이므로 태그, 분기, 버전 레코드 등과 같은 모든 것이 중앙 저장소에 있습니다.

3. GIT 브랜치는 SVN 브랜치와 다릅니다.

브랜치는 SVN에서 전혀 특별하지 않으며 저장소의 또 다른 디렉터리입니다. 브랜치가 병합되었는지 알고 싶다면 svn propget svn:mergeinfo와 같은 명령을 수동으로 실행하여 코드가 병합되었는지 확인해야 합니다. 이 기능을 지적한 동급생 Ben에게 감사드립니다. 따라서 일부 분기가 누락되는 경우가 종종 발생합니다.

그러나 GIT 브랜치를 사용하는 것은 매우 간단하고 재미있습니다. 동일한 작업 디렉터리의 여러 분기 간에 빠르게 전환할 수 있습니다. 병합되지 않은 브랜치를 쉽게 찾을 수 있으며 이러한 파일을 빠르고 쉽게 병합할 수 있습니다.

4. GIT에는 글로벌 버전 번호가 없지만 SVN에는 다음이 있습니다.

지금까지 이것이 SVN에 비해 GIT에 부족한 가장 큰 기능입니다. 또한 SVN 버전 번호는 실제로 해당 시점의 소스 코드 스냅샷이라는 것도 알고 있습니다. CVS에서 SVN으로의 진화에 있어 가장 큰 돌파구라고 생각합니다. GIT와 SVN은 개념적으로 다르기 때문에 GIT의 어떤 기능이 이에 해당하는지 모르겠습니다. 단서가 있다면 댓글로 모든 사람과 공유해 주세요.

업데이트: 일부 독자들은 GIT의 SHA-1을 사용하여 코드 스냅샷을 고유하게 식별할 수 있다고 지적했습니다. 이는 SVN의 읽기 쉬운 숫자 버전 번호를 완전히 대체하지는 않습니다. 그러나 목적은 동일해야 합니다.

5. GIT의 콘텐츠 무결성은 SVN보다 우수합니다.

GIT의 콘텐츠 저장소는 SHA-1 해시 알고리즘을 사용합니다. 이는 코드 콘텐츠의 무결성을 보장하고 디스크 오류 및 네트워크 문제가 발생할 경우 저장소의 중단을 줄여줍니다. 여기에 GIT 콘텐츠 무결성에 대한 좋은 토론이 있습니다 - http://stackoverflow.com/questions/964331/git-file-integrity

이것이 GIT와 SVN의 유일한 5가지 차이점인가요? 물론 그렇지 않습니다. 나는 이 5가지가 단지 "가장 기본적"이고 "가장 매력적인" 것들이라고 생각한다.

git과 svn의 차이점 소개

버전 관리가 필요한 이유

git과 svn은 모두 프로그래머가 코드를 관리하는 데 사용하는 것이어서, 한 사람이 프로젝트를 개발하면 버전 관리가 전혀 사용되지 않습니다. 하지만 기업에서 개발할 때 한 사람이 프로젝트를 책임지는 것은 거의 불가능합니다. 요구 사항 검토, UI 디자인, 프런트엔드 개발, 백엔드 개발, 테스트까지 전체 프로세스에는 여러 사람의 협력이 필요합니다. 팀. 이때 버전 관리가 특히 중요합니다.

Difference

git과 svn의 차이점에 대해 이야기해 봅시다:

svn은 중앙 집중식 버전 관리 시스템이고, git은 분산 버전 관리 시스템입니다.
이 문장은 많은 분들이 들어보셨을 텐데요, 중앙집권화와 분산화란 무엇일까요? 분명히 말 그대로 svn에서는 모두가 서버의 프로그램을 수정하게 되는데, 누군가가 같은 부분을 수정하면 충돌이 발생하게 됩니다. 따라서 일반 팀은 프로그램의 공개 부분에 대해 개발자의 고유 ID를 표시하거나 상단에서 A를 하단에서 B를 추가하는 데 동의합니다.
Git은 개발자가 자신의 브랜치를 생성한다는 것을 의미합니다. 이 브랜치는 로컬 시스템에서 소스 코드를 복사하는 것과 같습니다. Git은 언제든지 동기화를 위해 서버 코드를 가져올 수 있습니다. 수정된 코드를 제출해야 하므로 충돌 가능성이 훨씬 줄어듭니다.
SVN은 서버와 직접 상호 작용하는 반면 git은 프로젝트를 로컬로 캐시한 다음 서버로 푸시합니다.
SVN은 인터넷 연결이 있어야 작동하지만 git은 인터넷 연결 없이도 개발이 가능합니다.
SVN은 충돌이 발생하기 쉽지만 git은 충돌이 발생하지 않습니다.
svn은 프로젝트 관리용으로 설계되었으며 git은 코드 관리용으로 설계되었습니다.
svn은 다중 프로젝트 병렬 개발에 적합하고, git은 단일 프로젝트 개발에 적합합니다.
SVN은 프로젝트 관리자가 여러 프로젝트의 전반적인 개발을 조정하는 내부 기업에 적합합니다. git은 여러 사람이 네트워크를 통해 동일한 프로젝트를 개발하는 데 적합합니다.

git과 github

둘 사이의 관계를 반영하는 문장 만들기
mio는 git을 사용하여 github에 프로젝트를 제출했습니다
즉, git은 도구이고 github는 플랫폼입니다.

마지막으로

이전에 누구한테 들었는지는 모르겠지만, 기술 블로그를 쓴다는 의미는 기억하는 것이 아니라 가르치는 것입니다. 지금 제가 쓰는 말이 굉장히 비전문적이고 일반인처럼 보이지만 최선을 다하겠습니다

다음은 바이파오 준님의 보충설명입니다

첫 번째 요점을 이해하고 제자리에 놓을 때만 생각하세요. 모두 함께 목표를 달성할 수 있으며 다른 항목을 사용할 때만 실현할 수 있습니다

1) 핵심 차이점은 Git이 배포되고 Svn은 배포되지 않는다는 것입니다. 이것을 이해하면 시작하기가 쉬울 것입니다. 현재 Git이 유일한 분산 버전 관리 시스템은 아니므로 Mercurial 등도 거의 동일합니다. Svn과 마찬가지로 Git에는 자체 중앙 집중식 저장소와 서버가 있지만 Git은 분산 개발에 더 선호됩니다. 왜냐하면 모든 개발자는 자신의 컴퓨터에 로컬 저장소가 있어서 네트워크가 없어도 기록 보기 버전을 커밋할 수 있기 때문입니다. 기록, 프로젝트 브랜치 생성 및 기타 작업을 수행하고 네트워크가 다시 연결될 때까지 기다린 후 서버에 푸시합니다.

GIt은 위에서 보면 정말 좋아 보이지만, 두 개의 리포지토리(로컬 리포지토리와 원격 리포지토리)를 구축해야 하고 지침이 많기 때문에 처음 사용하면 약간 혼란스러울 것입니다. 또한 어떤 지침이 로컬 저장소에 있는지, 원격 저장소에 어떤 지침이 있는지 알아야 합니다.

2) Git은 콘텐츠를 메타데이터로 저장하고 SVN은 콘텐츠를 파일로 저장합니다. .git 디렉터리는 컴퓨터에 있는 저장소의 복제된 버전이고 태그, 분기, 버전 레코드와 같은 모든 것이 중앙 저장소에 있기 때문입니다. , 등. .git 디렉토리의 크기와 .svn 디렉토리의 크기를 비교하면 둘 사이에 큰 차이가 있음을 알 수 있습니다.

3) Git에는 글로벌 버전 번호가 없지만 SVN에는 있습니다. 지금까지 Git에는 SVN에 비해 부족한 가장 큰 기능이 있습니다.

4) Git 콘텐츠의 무결성은 SVN보다 우수합니다. GIT의 콘텐츠 저장소는 SHA-1 해시 알고리즘을 사용합니다. 이는 코드 콘텐츠의 무결성을 보장하고 디스크 오류 및 네트워크 문제가 발생할 경우 저장소의 중단을 줄여줍니다.

5) Git을 다운로드하면 오프라인 상태의 모든 로그를 볼 수 있지만 SVN은 볼 수 없습니다.

6) 처음에 매우 짜증나는 점은 커밋하기 전에 SVN을 업데이트해야 한다는 것입니다. 병합하는 것을 잊어버리면 git에서는 이런 상황이 비교적 드물게 발생합니다.

7) 완전히 새로운 디렉터리를 복제합니다. 예를 들어 브랜치가 5개라면 SVN은 동시에 5개 버전의 파일을 복사합니다. 이는 동일한 작업을 5번 반복한다는 의미입니다. Git은 파일의 각 버전의 요소를 가져온 다음 기본 분기(마스터)만 로드합니다. 내 경험에 따르면 복제본에는 거의 10,000개의 커밋(커밋)이 있고 5개의 분기가 있으며 각 분기에는 약 1500개가 있습니다. 한 시간! 그리고 Git은 단 1분밖에 걸리지 않았습니다!

8) 저장소: SVN은 지정된 중앙 저장소를 하나만 가질 수 있습니다. 이 중앙 저장소에 문제가 발생하면 저장소가 복구되거나 새 저장소가 구축될 때까지 모든 작업 구성원이 마비됩니다. Git은 저장소를 무제한으로 가질 수 있습니다. 또는 더 정확하게 말하면 모든 Git은 저장소이며 차이점은 활성 디렉터리(Git Working Tree)가 있는지 여부입니다. 기본 저장소(예: GitHub에 있는 저장소)에 문제가 발생하더라도 작업 구성원은 여전히 ​​로컬 저장소에서 커밋하고 기본 저장소가 복원될 때까지 기다릴 수 있습니다. 실무 멤버는 다른 저장소에 커밋할 수도 있습니다!

9) 브랜치 SVN에서 브랜치는 완전한 디렉터리입니다. 그리고 이 디렉토리에는 완전한 실제 파일이 있습니다. 직원이 새로운 지점을 시작하고 싶다면 "전 세계"에 영향을 미칠 것입니다! 모두가 당신과 같은 가지를 갖게 될 것입니다. 귀하의 브랜치가 파괴 작업(보안 테스트)에 사용된다면 마치 전염병과 같을 것입니다. 브랜치를 변경하면 다른 사람들이 브랜치를 다시 잘라서 다시 다운로드해야 하는데 이는 매우 피비린내 나는 일입니다. Git을 사용하면 각 작업 구성원은 자신의 로컬 저장소에서 무제한 브랜치를 열 수 있습니다. 예를 들면 다음과 같습니다. 내 프로그램(보안 테스트)을 중단하고 수정된 파일을 나중에 사용할 수 있도록 보관하려면 브랜치를 열고 원하는 작업을 수행하면 됩니다. 다른 직원에게 방해가 될까봐 걱정할 필요가 없습니다. 메인 저장소에 병합하고 커밋하지 않는 한 직장에 있는 어느 누구도 영향을 받지 않습니다. 이 브랜치가 더 이상 필요하지 않으면 로컬 저장소에서 삭제하면 됩니다. 통증이 없고 가려움증이 있습니다.

Git 브랜치 이름은 다른 이름을 사용할 수 있습니다. 예: 내 로컬 브랜치의 이름은 OK이지만 기본 저장소의 이름은 실제로 master입니다.

가장 언급할 가치가 있는 점은 Git의 어느 커밋 지점에서든 브랜치를 열 수 있다는 것입니다! (방법 중 하나는 gitk –all을 사용하여 전체 커밋 기록을 관찰한 후 언제든지 브랜치를 여는 것입니다.)

10) 커밋 SVN에서는 완성된 제품을 제출하면 커밋에 직접 기록됩니다. 중앙 버전 라이브러리. 완성된 제품에 심각한 문제가 있는 것을 발견하면 문제가 발생하는 것을 막기 위해 할 수 있는 일이 없습니다. 네트워크가 다운되면 전혀 제출할 수 없습니다! Git 제출은 전적으로 로컬 저장소에서의 활동입니다. 그리고 메인 저장소로 "git push"하면 됩니다. Git의 "푸시"는 실제로 "동기화"(Sync)를 수행하고 있습니다.

마지막으로 요약하자면:

SVN은 단순함이 특징이며 코드를 넣을 곳만 필요할 때 사용해도 괜찮습니다.

Git의 기능 버전 제어는 네트워크에 의존하지 않고 무엇이든 할 수 있으며 분기 및 병합에 대한 더 나은 지원을 제공합니다(물론 개발자가 가장 우려하는 부분입니다). 하지만 더 잘 사용하려면 약간의 비용을 지출해야 합니다. 시도해 볼 시간이야.

위 내용은 GIT와 SVN의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제