버전관리
버전관리 시스템(형상관리)
- Configuration Management Systems
 
- Version Control Systems(vcs)
 
- 버전관리 시스템, 형상관리 시스템, vcs 뭐써봤냐?
 
버전관리
- Source Data + History
 
- 협업, 작업추적, 복구 등이 가능
 

Git
https://git-scm.com/
Git 기반의 서비스
Github
Gitlab
- https://gitlab.com
 
- 설치형 버전관리 시스템 - 소스코드 보안이 중요한 기업에서 주로 사용
 
- 클라우드 버전 관리 시스템 - 10명 이하 무료 (Github 와 유사)
 
- Issue tracker, Git Remote Repository, API, Team, Group 기능 제공
 
Git 프로그램 설치 후 실행
- git bash -> 마우스 우클릭 -> 관리자 권한으로 실행하는 것을 추천\
 
- 버전확인 : git --version
 
Git Global Configuration
- 이 설정을 하면 git을 사용할 때 매번 작성해줄 필요가 없다.
 
- 터미널에서 기본 설정함.(cmd도 되는데 Git Bash가 mac이랑 명령어가 거의 같아 Git Bash에서 설정)
 

줄바꿈 문자가 윈도우에서는 CR과 LF로 이루어져 있고 mac은 LF로 이루어져 있다. 그렇기 때문에 사실 같은 버전인데도 윈도우에서 불러오는지 mac에서 불러오는지에 따라 다른 버전으로 인식한다. 근데 윈도우 유저 설정이 100%문제라고 함.
(Git은 두 파일에 다른 부분이 있으면 버전을 다르게 인식함.)



기본적으로 vim 에디터인데 디폴트 에디터 설정을 변경하고 싶으면






Git 기본용어
Repository
- 소스코드가 저장되어 있는 여러 개의 Branch 가 모여있는 디스크상의 물리적 공간
 
- Local Repository 와 Remote Repository 로 구분(로컬에도 서버에도 있다.)
 
Checkout
- 특정 시점이나 Branch 의 소스코드로 이동하는 것을 의미
 
- Checkout 대상 - Branch, Commit, Tag
 
- Checkout 을 통해 과거 여러 시점의 코드로 이동이 가능
 
Stage
- 작업할 내용이 올라가는 임시저장영역
 
- 이 영역을 이용하여 작업한 내용중 commit 에 반영할 파일만 선별하여 commit 을 수행할 수 있음
 
commit (버전을 매기는 행위)
- 작업할 내용을 Local Repository 에 저장하는 과정
 
- 각각의 commit 은 의미있는 변경단위이고, 변경에 대한 설명을 commit log 로 남김
 
- 권장 - commit 을 아끼지 마세요. (게임의 save point, 아끼면 똥됩니다.)
 
- 참고 - commit 단위나 commit log format 을 정해놓은 회사나 팀도 있음 (빌드 서버를 사용하는 경우)
 
Tage (의미있는 버전에 사용)
- 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
 
- Tag 가 붙은 commit 은 commit id (version) 대신 tag name 으로 쉽게 checkout 가능
 
- 몇년뒤에도 갈 만큼 의미가 있는 버전들을 태그를 붙여놓는다.
 
Push (로컬에서 작업한 걸 공유)
- Local Repository 의 내용 중, Remote Repository 에 반영되지 않은 commit 을 Remote Repository 로 보내는 과정
 
- 권장 - Push 하는 순간 다른 개발자들도 영향을 받음. 검증되지 않은 코드는 Push 하지 않도록 함.
 
Pull (다른 개발자가 변경한 변경 내용을 다시 로컬로 가져와서 싱크를 맞추고 싶을 때 pull)
- Remote Repository 에 있는 내용 중, Local Repository 에 반영되지 않은 내용을 가져와서 Local Repository 에 저장하는 과정
 
- 다른 팀원이 변경하고 Push 한 내용을 Local Repository 에 가져올 수 있음
 
- 참고 - Push 과정에서 Conflict (충돌)이 일어나서 Push 가 거절된 경우, Pull 을 통해 Remote Repository 의 변경 내용을 Local Repository 에 반영하여 Conflict 를 해결 한뒤 다시 Push 를 시도해야 함.
 
- Conflict: 서로가 같은 부분을 수정했을 때 그 사실을 알려주고 니들이 알아서 판단하라고 알려줌.
 
Branch
- 특정 시점 (commit 단위) 에서 분기하여 새로운 commit 을 쌓을수 있는 가지를 만드는 것
 
- 개발의 주축이 되는 branch 를 master branch (혹은 main branch) 라고 함
 
- 모든 branch 는 최종적으로 다시 master branch 에 merge (병합) 되는 형식으로 진행 됨
 
Merge (Branch해서 병행으로 개발하다가 다시 합치는 것)
- Branch 의 반대개념으로 하나의 Branch 를 다른 Branch 와 합치는 과정
 
- Merge 되는 두 Branch 는 주종관계가 성립. 예 - dev  branch 를 main branch 에 merge
 
- Merge 되는 과정에서 Confict (충돌) 이 발생하는 경우 Diff 를 수정하여 Conflict 를 해결한 뒤 Merge 를 진행 할 수 있음