3. 버전 관리 시스템(VCS)

서주홍's avatar
Aug 17, 2024
3. 버전 관리 시스템(VCS)
💡
기존 폴더에서 파일을 직접 관리하는 방식은 시간과 용량이 많이 소요되며, 파일의 변경 이력을 추적하기 어렵습니다. 이러한 문제를 해결하기 위해 버전 관리 시스템(VCS)이 등장했습니다.
💡
VCS는 파일의 변경 이력을 데이터베이스에 저장하며, 변경된 부분만 추적하여 업데이트합니다. 이를 통해 이전 버전으로 쉽게 돌아갈 수 있으며, 파일의 변경 사항을 효율적으로 관리할 수 있습니다.

■ 1. 로컬 버전 관리 시스템 (Local VCS)

  • 로컬 버전 관리 시스템은 주로 한 사용자가 자신의 컴퓨터에서 파일의 버전을 관리할 때 사용됩니다.
    • 장점
      • 간단하고 로컬에서 모든 변경 사항을 쉽게 관리할 수 있다는 점입니다.
    • 단점
      • 로컬에서만 관리되기 때문에 협업이 어렵습니다.
 

■ 2. 중앙 집중형 버전 관리 시스템 (CVCS)

  • 중앙 집중형 버전 관리 시스템(CVCS)은 SVN(Subversion)과 같은 도구가 대표적입니다.
  • 중앙 컴퓨터(C)를 두고, 사용자 A와 B가 중앙 컴퓨터에서 파일을 업로드하고 다운로드합니다.
  • 중앙 서버에 모든 데이터베이스를 저장하기 때문에 모든 변경 사항이 중앙 서버에 기록됩니다.
    • 장점
      • 여러 사용자가 중앙 서버를 통해 파일을 공유하고 협업할 수 있습니다.
    • 단점
      • 사용자 B가 파일을 수정하고 중앙 서버에 업로드했을 때, 사용자 A는 이를 알지 못할 수 있습니다. 이로 인해 버전 충돌이 발생할 수 있으며, 협업 시 의사소통이 매우 중요합니다.
      • 중앙 서버가 고장 나거나 데이터가 손실되면 모든 파일이 사라질 위험이 있습니다.
      • 파일의 최종 버전만 기록되며, 이전 버전이 덮어쓰기로 교체됩니다.

■ 3. 분산 버전 관리 시스템 (DVCS)

  • 분산 버전 관리 시스템(DVCS)의 대표적인 예로 Git이 있습니다.
  • 이 시스템에서는 각 사용자가 로컬에서 모든 파일의 히스토리를 관리하며,
  • 중앙 저장소에도 동일한 히스토리가 기록됩니다.
    • 장점
      • 중앙 서버뿐만 아니라 각 사용자의 로컬 저장소에도 모든 히스토리가 저장되므로,
      • 중앙 서버에 문제가 생겨도 로컬 저장소를 통해 복구가 가능합니다.
      • 파일의 각 버전이 개별적으로 관리되며, 모든 버전이 로컬 및 중앙 서버에 저장됩니다.
    • 단점
      • 로컬과 중앙 서버 간의 동기화가 필요하며,
      • 일부 사용자가 최신 버전을 갖고 있지 않을 수 있습니다.
 

■ 4. Git의 기본 원리와 작업 영역

  • Git은 분산 버전 관리 시스템으로, 다음과 같은 세 가지 주요 영역이 있습니다:
    • 작업 영역(Working Directory)
      • Git이 관리하는 폴더로, 사용자가 작업하는 파일들이 위치합니다.
    • 인덱스 영역(Index)
      • 변경된 파일이 기록되는 영역으로, 트리(Tree) 구조로 파일의 목차를 관리합니다.
        • notion image
    • 기존 파일을 변경하면 index영역에서 기존 tree가 변경되지않고
    • 새로운 tree가 생성되는데 기존 파일도 포함되어있다.
    • notion image
       
    • 헤더 영역(Head)
    • 커밋(Commit)된 기록이 영구적으로 저장되는 영역으로,
    • 각 커밋은 고유한 해시값을 갖습니다.
 
 

■ 5. Git의 작업 과정

  • Git 초기화
    • Git으로 관리할 폴더를 선택하고 git init 명령어를 사용해 Git 폴더로 선언합니다.
  • 변경 감지
    • 폴더에 파일을 생성하거나 수정하면 Git이 이를 감지합니다.
  • 변경 기록 추가
    • git add 명령어를 사용해 변경된 파일을 인덱스 영역에 추가합니다.
    • 인덱스 영역에는 파일의 트리 구조가 기록됩니다.
  • 커밋:
    • git commit 명령어를 사용해 변경된 내용을 영구적으로 저장합니다.
    • 각 커밋은 브랜치(branch)로 관리되며,
    • 커밋은 이전 트리 구조를 포함하고 새로운 트리 구조를 생성합니다.
 

■ 6. Git의 형상 관리(SCM)

  • Git은 형상 관리를 통해 기존 파일의 내용을 안전하게 관리하며,
  • 수정된 내용이 기존 트리 구조를 대체하지 않고 새롭게 기록됩니다.
  • 이를 통해 모든 변경 사항이 추적 가능하고,
  • 필요한 경우 언제든지 이전 상태로 복구할 수 있습니다.
 
 
 
 

■ 7. 기본 명령어 정리

💡
Git을 설치하고 나서 가장 먼저 해야 하는 것은 사용자이름과 이메일 주소를 설정하는 것이다. Git은 커밋할 때마다 이 정보를 사용한다. 한 번 커밋한 후에는 정보를 변경할 수 없다. git config —global user.name “이름” git config —global user.email “이메일”

■ 1. git init : 작업영역 설정

notion image
 

■ 2. git status : 작업영역의 변화 감지

notion image
 

■ 3. git add . : 변경된 파일을 전부 기록한다.

💡
. 대신 직접 파일 이름을 적어도 된다.(git v add v .) v는 띄어쓰기 표기
notion image
 

■ 4. git commit -m “내용” : head에 옮긴다.

notion image
 

■ 5. git config list : 설정한 모든 것을 보여주어 바로 확인할 수 있다.

notion image
 

■ 6. git log :

notion image
 

■ 7. git config <key> : 명령으로 Git이 특정 Key에 대해 어떤 값을 사용하는지 확인할 수 있다.

notion image
 

■ 8. 기존 디렉토리를 Git 저장소로 만들기

💡
버전관리를 하지 아니하는 기존 프로젝트를 Git으로 관리하고 싶은 경우 우선 프로젝트의 디렉토리로 이동한다. 이러한 과정을 처음 해보는 것이라면 시스템마다 조금 다른 점을 주의하자.
  • Linux:
    • $ cd /home/user/my_project
  • Mac:
    • $ cd /Users/user/my_project
  • Windows:
    • $ cd /c/user/my_project
 

■ 9. git clone <url> : 프로젝트에 참여하거나 Git 저장소를 복사하고 싶을 때

notion image
Share article

maestrojava