포스트

Vison control

Vison control

Objectives

  • version control이 무엇이고 왜 사용하는지 파악하기
  • 어떻게 git이 version history를 그래프로 저장하는지 이해
  • version history를 사용하고 읽고 만드는것을 연습

Introduction

  • Version control 시스템은 소프트웨어 공학에선 필수적인 도구입니다. 대부분의 오픈, 취미 등등에서 사용.
  • version control 없이 팀원의 모든 코드를 조절하는 것은 매우 어렵다.

version control 없는 버전 제어

  • 드롭박스
  • undo/redo
  • 파일에 번호를 붙여 저장

Inventing version control(버전 컨트롤의 발명)

엘리스 혼자서 개발할때

  • version control 없이 혼자 개발할경우 백업파일을 만든다고 가정
  • Hello.java1, Hello.java2….
  • 그리고 이걸 Cloud에 올린다.
  • 만약 노트북에서 작업한 HelloL.java 와 데스크탑에서 작업한 HelloD.java
  • 만약 실수로 파일을 덮어 쓴다면…? (ex: HelloL.java → HelloD.java)
  • 데스크탑에서 작업한 소중한 파일을 잃어버렸다…

앨리스와 밥이 개발할때

  • 서로 다른 컴퓨터에서 작업하기에 클라우드 서버에 엄격한 규율을 적용
  • 또한 효율적인 관리를 위해 로그 작성

Muliple branches

  • 새로운 기능을 추가하기 위해 브랜치에서 작업
  • 기능이 완전하게 작업되기 전까지 pull 되는건 누구도 원하지 않음
  • 혼자 개발하더라도 이러한것은 동일함
  • 이러한 기능은 높은 유연성을 제공

Distributed vs centralized

  • 중앙집중식
    • 마스터 서버 하나에서 관리
    • 모든 사용자는 마스터서버와 작업을 공유
  • 분산식
    • 개인적인 사용자가 개인 저장소를 가지고 있음
    • 개인 저장소에서 변경된다면 팀 저장소는 그에 대한 변경 내용을 결정해야함

Version control 용어

  • Repository : 로컬 또는 원격 저장소
  • Working copy : 작업 또는 프로젝트의 편집 가능한 복사본
  • File : 단일 파일
  • Version : 프로젝트의 한 시점을 기록
  • diff : 두 버전간의 차이
  • Head : 현재 버전

version control system의 특징

  • Realibable : 안전하게 백업
  • Multiple files : 프로젝트의 여러 버전을 추적
  • Meaningful Version : 어떤 변화가 있고 어디서 만들어졌는지
  • Revert : 이전 버전으로 복원
  • Compare version
  • Review history : 전체 프로젝트 또는 개인 파일에 대한 컴토
  • Not just for code : 산문, 이미지….
  • Merge : 이전 버전과 다른 버전을 결합
  • Track respnsibillity : 누가 변화를 가지고, 누가 코드 라인을 만졌는지
  • Work in parallel : 한명의 프로그래머가 다른 사람에 상관없이 혼자 버전관리 가능하다.
  • Work-In-Progress : 다수의 프로그래머가 서로 완료되지 않은 작업을 공유 가능

Git

  • Command Line에서 작동
  • 자세한 내용은 PS0에서…

git object graph

  • git에서 수행하는 모든 작업은 우리의 프로젝트 안 파일에 그래프 형식으로 저장된다.
  • git clone은 이러한 그래프를 로컬로 가져오는것
  • 일반적으로 directed acyclic graph(DAG) 형태
  • 커밋은 일반적으로 16진수로 표시되는 고유 ID로 식별
  • 각 커밋에는 부모 커밋에 대한 포인터가 있다.
  • 부모가 둘인 커밋도 있을수 있음

git commit

  • 작업 디렉토리 내용을 기반으로 커밋을 생성 그래서 편집을 하면 스냅샷에 변경 사항 포함
  • git은 마지막 준비 영역이 staging area에 저장
  • staging area는 프로토 커밋과 같다. git add 를 사용하여 새로운 스냅샷을 만드는것은 다음과 같다.
  1. 작업 디렉토리와 스테이징 영역 Head commit 모두 같다.
  2. 파일을 변경
  3. git add 를 사용해서 Stage 변경
  4. git commit 을 사용해서 새 커밋 만들기

Sequences, trees, and graphs

  • 단일 컴퓨터에서 혼자 작업할 경우 DAG는 일반적인 시퀸스로 보임 (commit1 → commit2 → commit3…)
  • 하지만 다수의 프로그래머가 동시에 변화를 만든다면? ( 여러 커밋이 하나의 부모 커밋을 가리킬때)
  • 이러한 과정으로 git push, git pull이 있음

merging

  • A라는 파일을 각자 다른 두 사람이 B 와 C파일을 생성
  • B가 업데이트된 A를 push
  • C가 업데이트된 A를 push할 경우 push가 거절됨
  • C는 B로 인해 업데이트 된 A를 pull 하고 자신의 업데이트된 A를 병합하여 새로운 A+를 생성
  • C는 A+를 push하고 B또한 A+를 pull 한다.
  • 이러한 방식은 서로 다른 파일을 수정했기에 가능하다…
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.