Git을 사용하여 버전 제어 탐색

완료됨

다양한 유형의 VCS(버전 제어 시스템)가 있지만 일반적으로 중앙 집중식 및 분산으로 분류할 수 있습니다. 최근 몇 년 동안(DevOps의 인기 증가로 인해 부분적으로) 후자의 범주는 상당한 인기를 얻었으며 Git은 최신 소프트웨어 개발에서 사실상 표준이 되었습니다. 특히 DevOps 전환의 대상 플랫폼으로 GitHub를 사용하려는 의도를 고려할 때 이 특정 VCS는 샘플 시나리오에서 조직에 가장 적합한 선택입니다. 이 단원에서는 Git을 버전 제어로 사용하는 것을 탐색합니다.

중앙 집중식 및 분산 버전 제어 시스템의 이점을 비교하는 테이블의 스크린샷.

중앙 집중식 및 분산 버전 제어

CVCS(중앙 집중식 버전 제어 시스템)와 DVCS(분산 버전 제어 시스템)는 소프트웨어 개발 프로젝트의 변경 내용을 관리하고 추적하는 기능을 제공합니다. 둘 사이의 주요 차이점은 리포지토리 및 협업을 구현하는 방법과 관련이 있습니다. 특히 다음 사항에 주의하십시오.

  • 리포지토리 위치: 중앙 집중식 시스템에는 프로젝트의 전체 기록을 포함하는 리포지토리의 중앙 집중식 인스턴스가 하나 있습니다. 분산 시스템에서 각 팀 구성원은 일반적으로 전체 버전 기록을 포함하여 전체 리포지토리의 완전한 기능을 갖춘 로컬 복사본을 하나 포함합니다.
  • 네트워크 연결: 중앙 집중식 시스템에서는 업데이트 및 기록 검색을 비롯한 많은 작업을 수행하려면 리포지토리의 중앙 집중식 인스턴스에 액세스해야 합니다. 분산 시스템에서는 리포지토리의 로컬 복사본에 대해 모든 활동을 수행할 수 있습니다.
  • 공동 작업 모델: 중앙 집중식 시스템에서 개발자는 수정하고 변경 내용을 커밋하기 전에 네트워크를 통해 연결된 상태에서 리포지토리의 중앙 집중식 인스턴스에서 파일을 체크 아웃합니다. 이렇게 하면 다른 사람이 변경 사항을 파일에서 체크 아웃하는 것을 방지할 수 있습니다. 분산 시스템에서 개발자는 리포지토리의 로컬 복사본을 변경하고 커밋합니다. 이 복사본은 나중에 다른 복사본과 동기화됩니다.
  • 분기 및 병합 모델: 중앙 집중식 시스템에서 분기 및 병합은 일반적으로 다른 사용자와 조정해야 합니다. 분산 시스템에서 분기는 로컬 복사본에서 독립적으로 만들고 나중에 병합할 수 있습니다.

분산 모델은 중앙 리포지토리를 갖는 데 의존하지 않지만(기존 의미로), GitHub, GitLab 또는 Bitbucket과 같은 서비스에서 호스트하는 리포지토리의 복사본 하나를 구현하는 것이 일반적이라는 다는 점을 주목할 필요가 있습니다. 이 인스턴스는 공동 작업 및 동기화의 초점 역할을 합니다.

중앙 집중식 및 분산 버전 제어 시스템 리포지토리 및 공동 작업의 스크린샷

Git 용어

Git 작업에 능숙하게 작업하려면 해당 용어에 익숙해지는 것이 중요합니다. 일부 개념은 Git에 고유하여 다른 DVCS와 구별됩니다. 가장 기본적인 Git 용어는 다음과 같습니다.

  • 작업 트리: 프로젝트의 모든 파일을 포함하는 디렉터리 구조입니다.
  • 리포지토리 (일반적으로 리포지토리라고 함): 작업 트리의 최상위 수준에 있는 디렉터리로, 이러한 파일의 버전 기록과 함께 프로젝트의 모든 파일을 호스팅합니다.
  • 복제: 액세스 권한이 있는 프로젝트에서 작업하기 위해 로컬 컴퓨터에 원격 리포지토리의 복사본을 만드는 작업입니다.
  • 포크: 액세스 권한이 없는 프로젝트에서 작업할 원격 리포지토리의 GitHub 호스팅 복사본을 만드는 작업입니다. 포크는 일반적으로 다른 사람의 프로젝트에 기여하거나 해당 프로젝트의 고유한 버전을 만들려는 경우에 사용됩니다. 원래 리포지토리에 대한 쓰기 액세스 권한은 없지만 포크를 완전히 관리할 수 있습니다.
  • 커밋: 특정 시점에 리포지토리의 파일에 대한 변경 내용의 스냅샷입니다. 커밋은 변경 내용을 기록하고 저장하는 데 사용됩니다.
  • 스테이징 영역은(는) 작업 트리의 파일 변경 사항이 커밋되기 전에 준비되는 중간 위치로, 리포지토리의 일부가 아닙니다. 이를 통해 개발자는 커밋하려는 변경 내용을 선택할 수 있습니다.
  • 브랜치: 연결된 커밋들의 명명된 일련. 간단히 말하면 분기는 프로젝트의 고유한 버전을 나타냅니다. 이렇게 하면 주 버전에 영향을 주지 않고 프로젝트의 여러 부분에서 동시에 작업할 수 있습니다. 분기 내에서 가장 최근의 커밋을 헤드라고 합니다. 리포지토리를 초기화할 때 자동으로 생성되는 기본 분기를 main 또는 master라고 합니다.
  • 병합: 한 분기(또는 커밋)의 변경 내용을 다른 분기로 결합하는 프로세스입니다. 이렇게 하면 한 분기의 변경 내용이 다른 분기로 통합됩니다.
  • 개체: 리포지토리에서 사용할 수 있는 네 가지 유형의 엔터티 중 하나입니다. 이러한 엔터티에는 개별 파일을 나타내는 Blob , 작업 트리를 나타내는 트리 , 특정 버전의 작업 트리를 나타내는 커밋 및 개별 커밋에 할당된 레이블인 *tag가 포함됩니다.
  • 해시: 개체의 내용을 나타내는 자동으로 생성된 고유한 고정 길이 식별자입니다. 해당 개체가 변경되면 해당 해시도 변경됩니다. 이렇게 하면 Git에서 리포지토리 내에서 업데이트된 콘텐츠를 확인할 수 있습니다.
  • 원격: 일반적으로 리포지토리의 서비스 호스팅 인스턴스를 가리키는 다른 리포지토리(로컬 리포지토리가 아닌)에 대한 참조입니다. 이는 밀어넣기 및 끌어오기 작업의 기본값으로 사용됩니다.
  • 끌어오기: 원격 리포지토리에서 변경 내용을 가져와 현재 분기에 병합하는 작업입니다.
  • 푸시: 로컬 커밋을 원격 리포지토리로 전송하여 로컬로 변경한 내용으로 업데이트하는 작업입니다.
  • Fetch: 원격 리포지토리에서 변경 내용을 자동으로 병합하지 않고 검색하는 작업입니다. 이렇게 하면 병합을 적용하기 전에 검토할 수 있습니다.
  • 끌어오기 요청: 개발자가 변경 내용을 제안하고 대상 분기에 병합하도록 요청할 수 있는 Git 기반 호스팅 플랫폼(예: GitHub)의 기능입니다.

또한 Git에는 Linux Bash 또는 Windows 명령 프롬프트와 같은 명령 셸을 통해 버전 제어를 완전히 구현하고 관리하는 기능을 제공하는 광범위한 명령 집합이 있습니다. 또는 GitHub Desktop과 같은 데스크톱 애플리케이션을 통해 Git을 관리할 수 있습니다. Git 기반 호스팅 플랫폼은 서비스 쪽 리포지토리와의 상호 작용을 용이하게 하는 웹 인터페이스를 제공합니다.

Git 대 GitHub

앞서 설명한 것처럼 Git은 원격 리포지토리와 동기화할 수 있는 로컬 리포지토리를 사용하여 공동 작업을 용이하게 하는 다중 플랫폼 오픈 소스 DVCS입니다. GitHub는 Git 리포지토리에 대한 호스팅 플랫폼을 제공하는 클라우드 기반 서비스입니다. 다음에 대한 지원을 포함하여 Git 기능의 범위를 확장합니다.

  • 원격 리포지토리: 분산 팀 간의 상호 작용을 용이하게 합니다.
  • 공동 작업 도구: 문제, 토론, 끌어오기 요청, 알림, 레이블, 작업, 포크, 위키 및 프로젝트와 같은 기능을 제공합니다.
  • 웹 기반 인터페이스: Git 명령을 사용할 필요 최소화
  • 분기 보호: 병합이 수행되기 전에 충족해야 하는 조건 적용(예: 완료된 끌어오기 요청 검토).