>  기사  >  개발 도구  >  git과 svn의 차이점은 무엇입니까?

git과 svn의 차이점은 무엇입니까?

青灯夜游
青灯夜游원래의
2021-11-26 15:27:2832254검색

차이점: 1. SVN은 중앙 집중식 버전 관리 시스템인 반면, Git은 분산 버전 관리 시스템입니다. 2. SVN은 원본 파일 형식으로 저장되므로 크기가 더 큽니다. 반면 Git은 메타데이터 형식으로 저장됩니다. 3. Git의 브랜치 작업은 다른 개발자에게 영향을 미치지 않지만 SVN은 영향을 미칩니다.

이 튜토리얼의 운영 환경: Windows 7 시스템, Git 버전 2.30.0, Dell G3 컴퓨터.

svn 및 git 소개

SVN(중앙집중형 버전 관리 시스템)

SVN은 Subversion의 약자로 가장 일반적인 운영 체제를 지원하는 오픈 소스 버전 관리 시스템입니다. 오픈 소스 버전 제어 시스템인 Subversion은 시간이 지남에 따라 변경되는 데이터를 관리합니다. 이 데이터는 중앙 저장소에 저장됩니다. 이 아카이브는 일반 파일 서버와 매우 비슷하지만 모든 파일 변경 사항을 기억합니다. 이렇게 하면 파일을 이전 버전으로 복원하거나 파일의 변경 기록을 찾아볼 수 있습니다. Subversion은 프로그램 소스 코드를 포함하여 모든 유형의 파일을 관리하는 데 사용할 수 있는 범용 시스템입니다.

Workflow

중앙 집중식 관리의 작업 흐름은 다음과 같습니다.

중앙 집중식 코드 관리의 핵심은 모든 개발자가 새로운 작업을 시작하기 전에 서버에서 코드를 얻은 후 개발해야 합니다. 마지막으로 충돌을 해결하고 제출합니다. 모든 버전 정보는 서버에 저장됩니다. 서버와의 연결이 끊어지면 기본적으로 개발자가 작업을 할 수 없다고 할 수 있습니다. 예는 다음과 같습니다.

새로운 하루의 작업 시작:

  • 서버에서 프로젝트 팀의 최신 코드를 다운로드합니다.

  • 자신의 브랜치를 입력하고 작업한 후 매 시간마다 서버의 자신의 브랜치에 코드를 제출합니다. (많은 사람들이 이런 습관을 갖고 있습니다. 왜냐하면 때때로 코드를 계속해서 변경하다가 최종적으로는 이를 복원하고 싶기 때문입니다. 이전 버전) 시간별 버전을 확인하거나 이전 시간에 수정한 코드를 확인하려면 이 작업을 수행해야 합니다.

  • 곧 휴무 시간이 다가옵니다. 브랜치를 서버의 메인 브랜치에 병합하면 그날의 작업이 완료되어 서버에 반영됩니다.

SVN은 중앙 집중식 버전 관리 시스템입니다.

이 접근 방식은 특히 구식 로컬 VCS에 비해 많은 이점을 제공합니다. 이제 모든 사람이 프로젝트에 참여한 다른 사람들이 작업 중인 내용을 어느 정도 볼 수 있습니다. 관리자는 각 개발자의 권한을 쉽게 제어할 수도 있습니다.
모든 것에는 좋은 면과 나쁜 면이 있습니다. 이 작업의 가장 명백한 단점은 중앙 서버가 단일 실패 지점이라는 것입니다. 한 시간 동안 다운되면 이 시간 동안 누구도 업데이트, 복원, 비교 등을 제출할 수 없으며 공동 작업도 불가능해집니다. 중앙 서버의 디스크에 장애가 발생하고 백업이 이루어지지 않거나 백업이 적시에 이루어지지 않으면 데이터 손실의 위험이 있습니다. 최악의 시나리오는 클라이언트에서 추출한 일부 스냅샷 데이터를 제외하고 전체 프로젝트의 모든 이력 변경 기록을 완전히 잃어버리는 것인데, 모든 데이터가 추출되었다고 보장할 수 없기 때문에 여전히 문제가 됩니다.
원칙적으로 Subversion은 파일 내용의 구체적인 차이점에만 관심을 갖습니다. 매번 어떤 파일이 업데이트되었는지, 어떤 줄과 내용이 업데이트되었는지 기록됩니다.

Subversion의 기능

  • 각 저장소에는 고유한 URL(공식 주소)이 있으며 각 사용자는 이 주소에서 코드와 데이터를 얻습니다.

  • 코드 업데이트를 받고 이 고유한 주소 저장소에만 연결하고 동기화할 수 있습니다. 최신 데이터를 얻으세요.

  • 제출에는 네트워크 연결(비로컬 저장소)이 있어야 합니다.

  • 제출에는 승인이 필요합니다. 쓰기 권한이 없으면 제출이 실패합니다. 매번 성공합니다. 다른 사람이 먼저 제출하면 "변경 사항은 오래된 버전을 기반으로 합니다. 먼저 업데이트한 후 제출하세요"라는 메시지가 표시됩니다.

  • 충돌 해결은 제출 속도의 경쟁입니다. 빠른 사람은 제출하세요. 먼저 모든 것이 잘 될 것입니다. 느린 사람은 먼저 제출할 것입니다. 커밋한 후에 갈등 해결에 어려움을 겪을 수 있습니다.

  • GIT(분산 버전 제어 시스템)

  • Git은 크고 작은 프로젝트의 민첩하고 효율적인 처리를 위한 무료 오픈 소스 분산 버전 제어 시스템입니다.

Git은 오픈 소스 분산 버전 제어 시스템입니다. 소규모 프로젝트부터 대규모 프로젝트까지 효율적이고 빠른 버전 관리가 가능합니다. Git은 Linux 커널 개발 관리를 돕기 위해 Linus Torvalds가 개발한 오픈 소스 버전 제어 소프트웨어입니다.

분산형과 중앙형의 가장 큰 차이점은 개발자가 로컬로 제출할 수 있다는 점이며, 각 개발자는 git clone을 통해 전체 Git 저장소를 로컬 시스템에 복사합니다.

Workflow

아래 그림은 고전적인 Git 개발 프로세스입니다.

Git의 기능

일반 개발자

의 관점에서 git의 기능은 다음과 같습니다.

  1. 서버에서 단일 머신으로 전체 Git 저장소(코드 및 버전 정보 포함)를 복제합니다.
  2. 다양한 개발 목적에 따라 자신의 머신에서 브랜치를 생성하고 코드를 수정하세요.
  3. 단일 머신에서 생성한 브랜치에 코드를 제출하세요.
  4. 단일 머신에서 브랜치를 병합합니다.
  5. 서버에서 최신 버전의 코드를 가져온 다음 이를 메인 브랜치와 병합하세요.
  6. 패치를 생성하고 메인 개발자에게 패치를 보냅니다.
  7. 메인 개발자의 피드백을 살펴보면, 메인 개발자가 두 일반 개발자 사이에 충돌(협력하여 해결할 수 있는 충돌)이 있다고 판단하면 먼저 충돌을 해결하도록 요청한 후 하나를 수행합니다. 그 중 제출할 것입니다. 수석 개발자가 직접 해결할 수 있거나 충돌이 없으면 통과합니다.
  8. 개발자 간의 충돌을 해결하는 일반적인 방법은 개발자가 풀 명령을 사용하여 충돌을 해결한 다음 충돌이 해결된 후 메인 개발자에게 패치를 제출하는 것입니다.

메인 개발자 입장에서(메인 개발자가 코드를 개발할 필요가 없다는 가정하에) git에는 다음과 같은 기능이 있습니다.

  1. 이메일을 확인하거나 다른 방법을 통해 일반 개발자의 제출 상태를 확인합니다.

  2. 패치 적용 및 충돌 해결(직접 해결하거나 다시 제출하기 전에 개발자에게 해결하도록 요청할 수 있습니다. 오픈 소스 프로젝트인 경우 어떤 패치가 유용하고 어떤 패치가 유용하지 않은지도 결정해야 합니다).

  3. 결과를 공개 서버에 제출한 다음 모든 개발자에게 알립니다.

Git은 분산 버전 관리 시스템입니다

Git은 2005년 탄생 이후 점점 더 성숙해지고 완벽해졌습니다. 사용하기 매우 쉬우면서도 처음에 설정된 목표를 여전히 유지하고 있습니다. 이는 빠르고 대규모 프로젝트 관리에 매우 적합합니다. 또한 다양한 복잡한 프로젝트 개발 요구 사항에 대처할 수 있는 놀라운 비선형 지점 관리 시스템을 갖추고 있습니다.

SVN과 달리 Git은 버전 기록을 기록하고 전체 파일 데이터가 변경되었는지 여부에만 관심을 갖습니다. Git은 파일 내용 변경에 대한 차등 데이터를 저장하지 않습니다. 실제로 Git은 변경된 파일의 스냅샷을 찍어 이를 소형 파일 시스템에 기록하는 것과 비슷합니다. 업데이트가 제출될 때마다 모든 파일의 지문 정보를 검색하고 파일의 스냅샷을 찍은 다음 스냅샷을 가리키는 인덱스를 저장합니다. 성능 향상을 위해 파일이 변경되지 않은 경우 Git은 해당 파일을 다시 저장하지 않고 마지막으로 저장된 스냅샷에만 연결합니다.

Git 기능

  1. Git의 각 클론 저장소는 동일합니다. 원하는 저장소를 복제하여 자신만의 저장소를 만들 수 있으며 원하는 경우 저장소를 다른 저장소의 소스로 사용할 수도 있습니다.
  2. Git의 모든 추출 작업은 실제로 코드 저장소의 전체 백업입니다. 제출은 완전히 로컬에서 이루어지며, 누구도 귀하에게 권한을 부여할 필요가 없습니다. 귀하는 저장소의 마스터이므로 제출은 항상 성공적입니다.
  3. 이전 버전을 기반으로 한 변경 사항도 성공적으로 제출할 수 있으며, 제출하면 이전 버전을 기반으로 하는 새 브랜치가 생성됩니다.
  4. 작업에 완전히 만족할 때까지 Git 제출은 중단되지 않습니다. 다른 사람에게 PUSH를 수행하거나 저장소를 PULL로 처리하면 자동으로 해결할 수 없는 충돌이 발생하여 수동으로 완료하라는 메시지가 표시됩니다. .
  5. 충돌 해결은 더 이상 SVN과 같은 제출 경쟁과 같지 않지만 필요할 때 병합 및 충돌 해결이 수행됩니다.

svn과 git의 차이점

  • SVN은 중앙 집중식 버전 제어 시스템입니다. 부정확한 비유가 있습니다. SVN = 버전 제어 + 백업 서버 SVN을 사용하면 약간 아카이브 창고 같은 느낌이 들고 병렬 읽기 쓰기를 지원합니다. 파일 및 지원 버전 관리 기능에는 검색, 가져오기, 업데이트, 분기, 이름 바꾸기, 복원, 병합 등이 포함됩니다.

    Git은 분산 버전 관리 시스템입니다. 작업 명령에는 복제, 풀, 푸시, 분기, 병합, 푸시, 리베이스가 포함됩니다.

  • GIT는 SVN과 마찬가지로 자체 중앙 저장소나 서버를 가지고 있습니다. 그러나 GIT는 분산 모드에서 사용하는 것을 선호합니다. 즉, 각 개발자는 중앙 저장소/서버에서 코드를 체크아웃한 후 자신의 저장소를 자신의 컴퓨터에 복제합니다.

    비행기 안, 지하실, 엘리베이터 안 등 인터넷에 연결할 수 없는 장소에 갇혀 있어도 파일 제출, 이력 버전 기록 보기, 프로젝트 브랜치 등을 생성합니다. 누군가에게는 별로 쓸모가 없어 보일 수도 있지만, 갑자기 네트워크가 없는 환경에 직면했을 때 큰 문제를 해결할 수 있습니다.

  • 그리고 Git은 메타데이터 형태로 저장하는데, SVN은 상대적으로 큰 원본 파일 형태로 저장합니다.

    GIT는 콘텐츠를 메타데이터 형식으로 저장하는 반면 SVN은 콘텐츠를 파일 형식으로 저장합니다. 모든 리소스 제어 시스템은 .svn, .cvs 등과 유사한 폴더에 파일의 메타정보를 숨깁니다.

    .git 디렉토리의 크기와 .svn 디렉토리의 크기를 비교해 보면 둘 사이에 큰 차이가 있음을 알 수 있습니다. .git 디렉터리는 컴퓨터에 있는 저장소의 복제된 버전이므로 태그, 분기, 버전 레코드 등과 같은 모든 것이 중앙 저장소에 있습니다.

  • Branch는 SVN에서 특별한 것이 아니며 저장소의 또 다른 디렉터리일 뿐입니다. 브랜치가 병합되었는지 알고 싶다면 svn propget svn:mergeinfo와 같은 명령을 수동으로 실행하여 코드가 병합되었는지 확인해야 합니다.

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

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

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

  • 브랜치 운영의 영향

    Git의 브랜치 운영은 다른 개발자에게 영향을 미치지 않지만 SVN은 새 브랜치를 만들 때 모든 사람이 귀하와 동일한 브랜치를 갖게 됩니다.

svn과 git의 장단점

SVN의 장단점

SVN은 중국어 지원이 좋고, 조작이 간단하며, 아티스트, 제품 담당자, 테스터, 구현 담당자가 쉽게 시작할 수 있습니다. . 사용자 인터페이스가 통합되고 기능이 완벽하며 조작이 편리합니다.

Git의 장점과 단점

프로그램 소스 코드의 차별화된 버전 관리로 코드베이스가 아주 작은 공간을 차지합니다. 분기코드 관리가 용이합니다. 중국어를 지원하지 않고 그래픽 인터페이스 지원이 좋지 않으며 사용하기 어렵습니다. 홍보가 쉽지 않습니다.

svn과 git의 적용 범위 차이

  • 적용 가능한 객체가 다릅니다. Git은 오픈 소스 프로젝트에 참여하는 개발자에게 적합합니다. 높은 수준의 전문 지식으로 인해 사용 편의성보다 효율성에 더 중점을 둡니다. SVN은 다릅니다. 일반 회사 개발 팀에 적합합니다. 사용하기가 더 쉽습니다.

  • 사용하는 경우가 다릅니다. Git은 인터넷을 통해 여러 개발 역할을 가진 단일 프로젝트를 개발하는 데 적합하고, SVN은 프로젝트 관리자가 조정하는 기업 내 여러 병렬 프로젝트 개발에 적합합니다.

  • 권한 관리 전략이 다릅니다. Git에는 엄격한 권한 관리 제어 기능이 없습니다. 계정이 있으면 코드를 내보내고 가져올 수 있으며 롤백 작업도 수행할 수 있습니다. SVN은 엄격한 권한 관리를 갖추고 있으며 특정 하위 디렉터리에 대한 권한을 그룹 또는 개인별로 제어할 수 있습니다. 읽기 권한과 쓰기 권한을 구별합니다. 보다 엄밀하게 말하면 롤백 작업은 지원되지 않습니다. 코드가 항상 추적 가능한지 확인하세요.

  • 지점의 사용 범위가 다릅니다. Git에서는 전체 웨어하우스를 분기할 수만 있으며, 한 번 삭제하면 복원할 수 없습니다. SVN에서 분기는 기본적으로 복사 작업인 모든 하위 디렉터리를 대상으로 할 수 있습니다. 따라서 계층적 분기를 많이 생성하고, 필요하지 않을 때는 삭제하고, 나중에 필요할 때 이전 SVN 버전을 확인하면 됩니다.

  • 세 번째 점에 따르면 Git은 순수 소프트웨어 프로젝트, 일반적으로 Linux 커널, 비지박스 등과 같은 일부 오픈 소스 프로젝트에 적합합니다. 반대로 SVN은 다중 프로젝트 관리에 능숙합니다. 예를 들어 휴대폰 프로젝트의 bsp/디자인 문서/파일 시스템/응용 프로그램/자동 컴파일 스크립트를 SVN 웨어하우스에 저장할 수도 있고, 휴대폰 프로젝트 5개의 파일 시스템을 SVN에 저장할 수도 있습니다. n(프로젝트 수)*m(컴포넌트 수) 리포지토리를 git에 설정해야 합니다. SVN에서는 최대 n 또는 m만 필요합니다.

  • Git은 버전 번호로 128비트 ID를 사용합니다. 체크아웃할 때 어느 브랜치인지 표시해야 하는 반면, SVN은 전 세계적으로 고유한 버전 번호로 증분하는 일련 번호를 사용하므로 더 간결하고 쉽습니다. 이해하다. gittag를 사용하여 일부 리터럴 별칭을 만들 수 있지만 이는 결국 특수 버전에만 해당됩니다.

  • 추적성, git의 일반적인 개발 프로세스는 브랜치 설정, 개발, 로컬 마스터에 제출 및 브랜치 삭제입니다. 그 결과 이전 수정 세부정보가 손실됩니다. 그리고 세부 정보를 잃지 않고 SVN에서 동일한 작업을 수행합니다. 다음은 git의 일반적인 작업 방법을 보여주는 흥미로운 링크입니다. (마스터를 핵심으로, 지속적으로 새 브랜치를 생성하고 이전 브랜치를 삭제함)

  • 부분 업데이트, 부분 복원. SVN은 관리를 위해 각 폴더에 .svn 폴더를 생성하므로 부분 업데이트나 복원을 쉽게 구현할 수 있습니다. 특정 부분만 업데이트하고 싶다면 svn이 아주 잘 할 수 있습니다. 동시에 코드를 잘못 작성하면 부분복원이 쉽게 이루어질 수 있다. 물론, git은 히스토리 버전을 통해서도 복원이 가능하지만, 부분복원은 쉽지 않다.

프로젝트 관리에 SVN과 Git 중 어느 것이 더 적합합니까?

우선 저는 R&D팀의 프로젝트 매니저입니다. SVN과 Git을 모두 사용해봤습니다. 프로젝트 관리에는 SVN이 더 적합하고, Git은 코드 관리에만 적합합니다.

R&D 팀의 구성원은 일반적으로 요구 사항 분석, 디자인, 아티스트, 프로그래머, 테스트, 구현, 운영 및 유지 관리입니다. 각 구성원은 문서, 디자인 코드 및 프로그램 코드를 포함하여 작업에 결과물이 있어야 합니다. 프로젝트별로 중앙에서 관리됩니다. SVN은 디렉토리별로 명확하게 분류하고 관리할 수 있어 프로젝트 팀의 관리를 질서 있고 효율적인 상태로 유지할 수 있습니다.

추천 학습: "Git Tutorial"

위 내용은 git과 svn의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.