경희대학교 이성원 교수님의 '오픈소스 SW 개발 방법 및 도구 수업'을 기반으로 본인이 이해한 바로 새롭게 정리한 글입니다.

들어가기 앞서

대다수의 개발자들은 공유된 프로젝트를 수행하기 위해서 어떻게 할까?

  • GitHub
  • Google Docs

Software Maintenance Tools

  • Version Control
  • Concurrent Versions System (CVS)
  • Apache Subversion (SVN)
  • Git
  • Github

Version Control

누가, 언제, 무엇을, 어떻게 변경하였는지를 확인하고, 저장하는 것을 지칭한다.

변화에 대한 관리는 문서(documents), 컴퓨터 프로그램, 웹 사이트, 혹은 다른 정보의 집합체로 보관된다.

변경된 사항들은 수정번호(revision number), 수정단계(revision level)으로 일컫는다.

각각의 변경 사항들은 time-stamp, 수정한 사람의 이름 등과 연관되어 진다. 즉, 어느부분을 누가, 언제, 어떻게, 무엇을, 왜, 수정했는지가 보여지면, 동료(co-worker)에게 비교당하고, 저장되고, 합병된다.

Version Control on Single Machine

  • 로컬 컴퓨터에서 이루어지며, 사용자가 저장하거나 수정한 파일을 Version Database에 넣는 행위를 'Check in' 또는 'Commit'이라 부른다.

  • 반대로 version Database에서 필요한 version의 정보 및 데이터를 가져오는 행위를 'Check out'이라 한다.

    Version Control on Multiple Machine

(Centralized Version Control Systems)

  • 중앙의 하나의 Version Control Database에서 함께 저장하며, 각각의 Working computer(computer A/B)에서 수정한 파일을 넣거나, 추출하여 사용한다.

(Distributed Version Control Systems)

  • Server Computer의 Version Database에서 완전히 똑같은 Version Database를 각각의 local 환경에서도 구축한다.

  • 각각의 사용자 (computer A/B)는 자신이 작업한 작업물 혹은 수정사항들을 자신의 local computer에 저장하면 local Version Database와 연결된 Server Computer Version Database에서도 수정이된다.

    Version Control

  • 수정은 일반적으로 일련의 개발과정에서 발생하며, 각각의 분기점에서 뻗어나가, 새로운 기능을 추가한다. 이때 분기점(Branches)에서 기존 계획에 필요하거나 추가해야할 기능이라면, 더해지지만(merges) 그렇지 않은 경우 사라진다.

Concurrent Version System (CVS)

동시에 여러 개발자들이 자신들의 개발을 관리하도록 만든 시스템이다.

  • Free Software로써, client-server revision control system이다.
  • 파일에 관한 모든 변화와 모든 작업의 추적을 유지하는 version control system이며, 동시에 여러 명의 개발자가 사용이 가능하다.

Apache Subversion (SVN)

Apache Lincense 하의 오픈 소스로써, 원격으로 Software의 버전과 수정을 관리하는 시스템이다.

  • Software 개발자들은 Subversion을 통해, 현재 그리고 과거의 버전(소스코드, 웹 페이지, 문서)을 관리한다.

  • 오픈 소스 커뮤니티는 Subversion을 널리 사용하고 있다.

Git

free와 open source의 distributed version control system이다.

  • Git은 대량의 사람들 사이의 컴퓨터 파일과 그러한 파일을 관리하는 작업의 변화를 추적하는 version control system이다.

  • 주로 소스코드의 관리를 위해 사용되지만, 모든 파일의 변화를 추적하기 위해 사용되곤 한다.

  • 대표적인 분산 버전 관리 시스템으로 속도와 data의 통합을 목표로 발전하였다.

  • Linus Torvalds(리눅스 개발자)가/이 2005년에 Linux kernel의 개발을 위해 만들었으며, 다른 리눅스 개발자의 초기 개발자들과 함께 협력하여 만들었다.

    Git - Distributed Version Control

  • Distributed Version Control은 버전 관리의 한 형태로, 개발자의 컴퓨터(로컬 환경)를 사용하여, 소스코드, 프로젝트의 버전들을 관리한다.

  • Centrailized Version Control System

    • 중앙엔 Central server이 있다. : 모든 팀의 소스코드가 저장되는 장소이다.
    • 각각의 멤버는 서버로 부터 직접적으로 'Check out'을 한다.
    • 그들의 로컬 환경에서 수정을 거친 후, 개발자들은 그들의 변경사항들을 server code에 실어 중앙 서버로 적용(commit)시킨다.

  • Distributed Version Control System (DVCS)

    • 모든 팀의 소스 코드는 원격의 central server에 저장된다.

    • 각각의 멤버는 중앙 서버로 부터 'Check out'을 하기 위한 메시지(pull)를 보낸다.

    • 로컬 환경에 각각의 중앙서버와 동일한 local 저장소가 있다. 따라서 개발자는 일시적으로 작업물에 대한 변경 사항들을 로컬 서버에 적용시킨다.

    • 개발자들은 그들의 작업물을 완전히 적용시킬길 원한다면, 로컬 서버에서 중앙 서버로 밀어(push)달라는 메시지를 보낸다.

    • 3단 구조로, 모든 프로젝트는 중앙 저장소로 가기전 프로젝트의 유지관리자들의 로컬 저장소에 저장된다.

    • 개발자들은 동일한 로컬 복사본을 만들 수 있다.

    • 중앙 저장소의 소스 코드의 변화들은 정기적으로 로컬 저장소와 융합된다.

    • 개발자들은 새로운 분기점(branch)를 만들때, 자신의 로컬 저장소에서 만들고, 분기점의 소스 코드를 수정한다.

    • 개발이 완료되면, 변화는 중앙 저장소에 통합된다.

Git - Distributed Version Control 용어

  • Pull requsets
    • 소스 코드에 대한 Contributions을 지칭한다.
    • Contributor는 중간 관리자(유지 관리자)에게 소스 코드에 대한 변경 사항들을 "pull"해줄 것을 요청한다.
    • pull requests은 대부분 코드의 변환에 대해 집중한다.
    • pull requests은 중간 관리자(유지 관리자)에 의해 허락되고 거절된다.
    • 일단 pull requests가 승인되면, 저장소에 코드들이 합쳐진다.

    Git의 저장하는 과정

  • Remote Repository

    • 여러 사람이 함께 공유하기 위한 파일을 보관하는 전용 저장소
  • Local Repository

    • 내 PC에 파일이 저장되는 개인 저장소 (Commit 하는 저장소)
  • Staging Area

    • Working Directory 에서 Repository로 정보가 저장되기 전 준비 영역
    • 파일 상태를 기록, 스테이징을 한다. (Working Directory = 작업 영역)
    • 실제 코드를 수정하고, 추가하는 변경이 이루어진다.
    • 실제 프로젝트 디렉토리, git 이력과 관련된 정보가 저장되어있는 .git을 제외한 모든 영역이다.
  • git init

    • high level의 새로운 깃 저장소를 시작하기 위해 사용된다.
    • 새로운 빈 git 저장소를 만든다.
    • 새로운 저장소를 위한 메타데이터를 포함하는 subdirectory를 만든다.
  • git clone

    • 새로운 깃 저장소를 시작하기 위해 사용된다.
    • git clone은 git init에 종속된다. 내부족으로 git clone은 git init을 호출한 후 새로운 저장소를 만든다.
    • 유저의 로컬 컴퓨터에 존재하는 git 저장소를 다운로드한다.
  • git pull

    • 원격 git 저장소에 상응하는 local git 저장소를 업데이트한다.
  • git fetch

    • 원격 git 저장소에 상응하는 local git 저장소를 업데이트 하지만, 유저의 workspace에는 없는 완전히 새로운 변경 사항만을 업데이트한다.
    • git pull = git fetch + git merge
  • git add

    • workspace에서 staging area로 변경 사항들을 추가한다.
  • git commit

    • staging area에서 local Git repository로 변경 사항들을 추가한다.
  • git push

    • local Git repository에서 Remote repository로 변경 사항들을 추가한다.

GitHub

git을 사용하는 웹 기반의 hosting 서비스이다.

  • Readme를 통해 자동 렌더링된 문서화와, 라벨, 마일스톤과 함께, issue를 tracking할 수 있다.
  • 코드 리뷰와 comments와 함께 pull requests를 가능하다.
  • commits 이력을 추적할 수 있다.
profile
처음이고 서툴지만 방향을 잡아 노력하는 개발자

0개의 댓글