버전 제어란?

완료됨

VCS(버전 제어 시스템)는 파일 컬렉션의 변경 내용을 추적하는 프로그램 또는 프로그램 세트입니다. VCS의 한 가지 목표는 개별 파일 또는 전체 프로젝트의 이전 버전을 쉽게 회수하는 것입니다. 또 다른 목표는 여러 팀원이 서로의 작업에 영향을 주지 않고 동시에 한 프로젝트, 동일한 파일에서도 작업할 수 있도록 하는 것입니다.

VCS의 또 다른 이름은 SCM(소프트웨어 구성 관리) 시스템입니다. 두 용어는 서로 바꿔서 사용되는 경우가 많습니다. 실제로 Git 공식 설명서는 git-scm.com에 있습니다. 기술적으로 버전 제어는 SCM과 관련된 방법 중 하나일 뿐입니다. 책과 온라인 자습서를 포함하여 소프트웨어 이외의 프로젝트에 VCS를 사용할 수 있습니다.

VCS를 사용하면 다음을 수행할 수 있습니다.

  • 프로젝트의 모든 변경 내용, 변경된 시간 및 변경한 사용자를 확인합니다.
  • 각 변경 내용과 함께 변경 이유를 설명하는 메시지를 포함합니다.
  • 전체 프로젝트 또는 개별 파일의 이전 버전을 검색합니다.
  • 실험적으로 변경할 수 있는 분기를 만듭니다. 이 기능을 사용하면 기본 분기에 영향을 주지 않고 여러 사람이 동시에 다양한 변경 작업(예: 기능 또는 버그 수정)을 수행할 수 있습니다. 나중에 유지할 변경 내용은 기본 분기에 다시 병합할 수 있습니다.
  • 예를 들어 새 릴리스를 표시하기 위해 버전에 태그를 연결합니다.

Git은 빠르고 스케일링 성능이 뛰어난 다목적 무료 오픈 소스 VCS입니다. 주 작성자는 Linux의 작성자인 Linus Torvalds입니다.

분산형 버전 제어

CVS, SVN(Subversion), Perforce를 비롯한 이전 VCS 인스턴스는 중앙 집중식 서버를 사용하여 프로젝트 기록을 저장했습니다. 이 중앙 집중식 구성에서는 한 서버가 잠재적으로 단일 실패 지점이기도 했습니다.

Git은 ‘분산형’이므로 프로젝트의 전체 기록이 클라이언트와 서버에 ‘모두’ 저장됩니다. 네트워크에 연결하지 않고 파일을 편집하고, 로컬로 체크 인하고, 연결할 수 있을 때 서버와 동기화할 수 있습니다. 서버가 다운되는 경우에도 프로젝트에 로컬 복사본이 있습니다. 엄밀히 말하면 서버가 없어도 됩니다. 변경 내용을 메일로 전달하거나 이동식 미디어를 사용하여 공유할 수 있지만, 실제로 Git을 이 방식으로 사용하는 사람은 없습니다.

Git 용어

Git을 이해하려면 용어를 이해해야 합니다. Git 사용자가 자주 사용하는 간단한 용어 목록은 다음과 같습니다. 지금은 세부 정보까지 몰라도 됩니다. 이 모듈의 연습을 진행하는 과정에서 모든 용어에 익숙해질 것입니다.

  • 작업 트리: 작업 중인 프로젝트를 포함하는 중첩된 디렉터리 및 파일 세트입니다.

  • 리포지토리(repo): 작업 트리의 최상위 수준에 있는 디렉터리로, Git은 프로젝트의 모든 기록 및 메타데이터를 여기에 보관합니다. 리포지토리(repository)는 거의 항상 ‘리포지토리(repo)’라고 합니다. ‘bare 리포지토리’는 작업 트리에 포함되지 않는 리포지토리로, 공유 또는 백업에 사용됩니다. 일반적으로 bare 리포지토리는 이름이 .git으로 끝나는 디렉터리(예: project.git)입니다.

  • 해시: 해시 함수에서 생성된 숫자로, 파일 또는 다른 개체의 콘텐츠를 고정 자릿수로 나타냅니다. Git은 160비트 길이의 해시를 사용합니다. 해시를 사용하는 이점 중 하나는 Git은 해당 콘텐츠를 해시하고 결과를 이전 해시와 비교하여 파일이 변경되었는지 여부를 알려 줄 수 있다는 것입니다. 파일 시간 및 날짜 스탬프가 변경되었지만 파일 해시는 변경되지 않은 경우 Git은 파일 내용이 변경되지 않았다는 것을 알고 있습니다.

  • 개체: Git 리포지토리에는 각각 SHA-1 해시를 통해 고유하게 식별되는 네 가지 ‘개체’ 유형이 포함됩니다. blob 개체는 일반 파일을 포함합니다. 트리 개체는 디렉터리를 나타내며, 여기에는 이름, 해시 및 권한이 포함됩니다. commit 개체는 특정 버전의 작업 트리를 나타냅니다. tag는 커밋에 연결된 이름입니다.

  • 커밋: 동사로 사용될 때 ‘커밋’은 커밋 개체를 만드는 것을 의미합니다. 이 작업은 커밋에서 데이터베이스로 이름을 가져옵니다. 즉, 다른 사용자도 볼 수 있도록 변경 내용을 커밋하는 것입니다.

  • 분기: 분기는 연결된 커밋의 명명된 시리즈입니다. 분기의 가장 최근 커밋을 ‘헤드’라고 합니다. 리포지토리를 초기화할 때 생성되는 기본 분기를 main라고 하며, Git에서는 흔히 master라고 합니다. 현재 분기의 헤드는 HEAD라고 합니다. 개발자가 분기에서 개별적으로(또는 함께) 작업하고 나중에 변경 내용을 기본 분기에 병합할 수 있기 때문에 분기는 Git의 매우 유용한 기능입니다.

  • 원격: 원격은 다른 Git 리포지토리에 관한 명명된 참조입니다. 리포지토리를 만들 때 Git은 밀어 넣기 및 끌어오기 작업의 기본 원격인 origin이라는 원격을 만듭니다.

  • 명령, 하위 명령, 옵션: Git 작업은 git pushgit pull과 같은 명령을 사용하여 수행됩니다. git은 명령이고 push 또는 pull은 하위 명령입니다. 하위 명령은 Git에서 수행하려는 작업을 지정합니다. 일반적으로 명령은 하이픈(-) 또는 이중 하이픈(--)을 사용하는 옵션과 함께 사용됩니다. 예: git reset --hard.

위의 용어와 pushpull과 같은 다른 용어에도 곧 익숙해질 것입니다. 하지만 어딘가에서 시작해야 하며, 모듈을 마친 후 돌아와 이 용어집을 검토하면 도움이 될 수 있습니다.

Git 명령줄 도구

GitHub 데스크톱을 포함하여 몇 가지 Git용 GUI를 사용할 수 있습니다. Microsoft Visual Studio Code를 비롯한 많은 프로그래밍 편집기에도 Git용 인터페이스가 있습니다. 인터페이스는 모두 다르게 작동하며 각기 다른 제한 사항이 있습니다. 모든 Git 기능을 구현하는 인터페이스는 없습니다.

이 모듈의 연습에서는 Git 명령줄, 특히 Azure Cloud Shell에서 실행되는 Git 명령을 사용합니다. 그러나 Git 명령줄 인터페이스는 사용하는 운영 체제와 관계없이 동일하게 작동합니다. 또한 명령줄을 사용하여 모든 Git 기능을 사용할 수 있습니다. GUI를 통해서만 Git을 보는 개발자는 때때로 해결할 수 없는 오류 메시지에 직면하게 되며, 다시 진행하기 위해 명령줄을 사용해야 합니다.

Git 및 GitHub

Git으로 작업하면서 Git에서 제공하는 기능과 GitHub에서 제공하는 기능 간의 차이점이 궁금할 수도 있습니다.

앞에서 설명한 것처럼 Git은 여러 개발자와 다른 참가자가 프로젝트에서 작업하는 데 사용할 수 있는 DVCS(분산 버전 제어 시스템)입니다. DVCS는 하나 이상의 로컬 분기로 작업한 후 원격 리포지토리에 밀어 넣을 수 있는 방법을 제공합니다.

GitHub는 Git을 핵심 기술로 사용하는 클라우드 플랫폼입니다. GitHub는 프로젝트에서 협업하는 프로세스를 간소화하고 개발자와 사용자가 함께 작업하는 데 사용할 수 있는 웹 사이트, 추가 명령줄 도구, 전체 흐름을 제공합니다. GitHub는 앞에서 설명한 원격 리포지토리 역할을 합니다.

GitHub에서 제공하는 주요 기능은 다음과 같습니다.

  • 문제
  • 토론
  • 끌어오기 요청
  • 알림
  • 레이블
  • 동작
  • 포크
  • 프로젝트

GitHub에 관한 자세한 내용은 GitHub 소개 Microsoft Learn 모듈이나 GitHub 시작 도움말 문서를 참조하세요.

다음 단계는 직접 Git을 사용해 보는 것입니다.