

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
출처: https://git-scm.com/
Git이란 무료/오픈소스 분산형 버전 컨트롤 시스템으로 모든 프로젝트를 빠르고 효율적으로 관리하기 위한 프로그램이다. Github는 Git의 원격 저장소 역할을 하는 곳이다.
Git의 가장 큰 특징은 비동기적(Asynchronous)이라는 것이다.
실시간으로 원본에서 개발하는 것이 아니라 오프라인으로 개발이 가능하다.
각기 다른 개발 과업의 성질과 버전의 관리에 맞춰 분기점을 골라 가지(Branch)를 나누어 작업한다.
가지에 생기는 변경사항에 세이브 포인트를 자동적으로 기록하고, 세이브 포인트로 다시 되돌릴 수 있는 기능도 있어서 개발에 유동적이다.
모든 변경사항이 유효하다는 확신이 들면 원본으로 합칠 수 있고, 합칠 때 생기는 변경사항을 개발자가 선택적으로 수정 또한 가능하다.
Git은 개인 저장소(Local Repository)에서 사용자의 파일을 지속적으로 추적하여 개발할 때 수정에서 완성 단계까지 세분화하여 작업하는 것을 기록한다.
크게 Staged 전, Staged 후, 그리고 이를 원격 저장소인 Github에 동기화하는 Push, 개인 저장소를 원격 저장소의 기록과 동기화 하는 Pull(Fetch & Merge) 로 나뉜다.
Staged 전
개인 저장소에서 추적을 지정한 디렉토리 내에서 파일이 생성될 경우 Untracked로 명시한다.
개인 저장소에서 추적을 지정한 디렉토리 내에서 파일은 Unmodified로, 해당 파일이 변경될 경우 Modified라 명시한다.
변경사항은 Stage에 기능 개발 단위로 추가(Add)하여 저장한다.
Staged 후
Push
Pull(Fetch & Merge)
Gitflow is an alternative Git branching model that involves the use of feature branches and multiple primary branches.
출처: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
Gitflow란 Git을 사용하기 위해 약속된 방법론 중 하나로 Git으로 개발할 때 가장 유용한 Workflow이다.
main branch를 포함해 총 다섯 종류의 branch(Main, Develop, Feature, Hotfix, Release)들을 기능과 작업의 성질에 맞추어 가지를 쳐서 사용한다.
<Gitflow Branch>
- Main: 프로젝트 주요 Branch.
- Hotfix: Main Branch에서 긴급하게 변경사항이 필요한 경우 사용한다.
- Develop: 프로젝트 개발에 사용한다.
- Feature: 프로젝트 개발 중 기능 개발에 사용한다.
- Release: 개발 후 릴리즈할 때 사용한다.
Git-bash를 열어 기존의 git 저장소를 초기화하고 gitflow의 사용을 시작한다.
main/master branch에서 develop branch로 이동된다.
user ~/Document/Workplace$ git flow init
user ~/Document/Workplace$ git branch
시작하고자 하는 작업의 branch를 생성한다. 생성된 branch로 이동된다.
user ~/Document/Workplace$ git flow {feature name} start {new branch name}
작업 후 $ git status 를 통해 Untracked/Modified 기록을 확인하고, stage에 하나씩 추가$ git add {file name}한다.
다시 $ git status를 입력하여 staging area에 추가가 잘 되었는지 확인한다.
만약 변경 또는 수정 사항이 생겨서 stage에서 내려야 할 때는 $ git restore {file name}을 사용한다.
stage가 완료되면 $ git commit 을 한다. commit 메시지를 작성하기 위한 에디터 창이 나타나면 규격과 의미에 유의하여 작성한다.
메시지를 수정해야 하면 $ git commit --amend를 통해 가장 최근 메시지만 수정이 가능하다.
개발 완료한 기능을 다시 develop branch에 병합(Merge)한다.
user ~/Document/Workplace$ git flow {feature name} finish {branch name}
작업하던 branch는 삭제되고, develop branch로 이동된다.
병합된 내용을 온라인 저장소(github)에 push한다.
user ~/Document/Workspace$ git push {branch name} {repository remote address}
$ git status 와 $ git branch 를 잘 써먹어서 실수를 줄인다.$ git reset을 할바에는 $ git revert를 사용해서 commit history를 남기는게 낫고, 애당초 두 명령어를 안 쓰고 실수없이 하는게 가장 중요하다.$ git init은 팀장급이 아니면 쓸 일이 드물다. $ git clone을 애용한다.처음에는 강사님이 까만 터미널에 입력하시고, 드르륵 드르륵하고 하얀 알파벳들이 솟아오르며 무언가가 진행되는 걸 보면, 내 머리도 똑같이 드르륵 거렸다.
그래도 자세하고 눈높이에 맞춘 설명과 배려가 마음이 꺾이지 않게 도움이 많이 되었다.
특히, 현업에서 협업 과정과 커뮤니케이션이 왜 중요한지만 알려주시기보다는, 어떻게 중요해지는지 설명해주셔서 감사했다.
개인 블로그 작성은 처음이지만 마크다운 연습도 되고, 복습도 되서 도움이 많이 되는 것 같다. 다른 사람들 블로그도 자주 훑어봐야겠다.
문제는, 강의를 들을 때는 이해가 되는가 싶으면서도, 막상 설명하려고 하면 안되는 걸로 보아 이해를 제대로 못하고 있는 것 같다. 자율적이어야 할 자습과 복습시간이 시간표에 추가된 이유만은 확실히 이해한 것 같다.