VCS
: 소프트웨어의 파일(코드, 구조 등)에 가해진 변경을 추적하여 관리하는 소프트웨어.
SCM(Source Code Management System)
이라고도 불린다.
다양한 종류의 VCS가 사용되고 있음.
역할 :
Repository
: SW의 변경사항들을 기록해주는 Database중앙집중식 버전 관리 시스템
: 가장 일반적인 방법분산형 버전 관리 시스템
:git
:
Linus Torvalds가 linux kernel을 개발하기 위해 만들어 졌다.
지금은 많은 SW 회사들이 사용하고 있다.
delta storage
:snapshot storage
:Three states
git repository (Commited)
:working directory (Modified)
:staging area (Staged)
:Basic workflow
https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
On Ubuntu
: sudo apt-get install githttps://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup
Your Identity
:Your Editor
: 주로 사용하는 editor 지정Checking your settings
:A basic workflow
:Init a repository
or Cloning an existing repository
Edit files
:Stage the changes
: Review your changes
:Commit the changes
:View history
: 현재까지의 변경사항을 보여준다우리가 개발하는 SW에 main line이 있는데,
main line에서 벗어나 별도로 다른 방향으로 SW를 개발할 때, branching
한다고 한다.
branching한 작업을 main line으로 합치는 과정을 merging
이라고 한다.
➡️ non-linear하게 동시에 여러가지 일을 개발할 수 있기 때문에 사용함
시나리오 1
git commit -m "my first commit"git commit
git commitgit checkout -b bug123 ➡️ 기존의 master에서 bug123으로 branch하겠다.
git branch ➡️ "master, bug123(*)" 출력git commit
git commit
git checkout master ➡️ pointer를 master branch로 옮기기
git merge bug123 ➡️ 현재 branch와 bug123 branch를 merge하라.git branch -d bug123 ➡️ bug123 branch를 없애라.
시나리오 2
:
master branch와 bug456 branch는 서로 다른 작업으로 진행되고 있다.
git checkout mastergit merge bug456만약 두 branch를 merge할 때,
master branch의 D, E 변경과 bug456의 F, G 변경이 disjoint하다면 문제 없이 merge된다.
예를 들어, mastser branch에서는 func1을 update했고, bug456은 func2를 update 하면? 문제 없음.
하지만 두 branch에서 동일한 함수에 대해서 변경이 있었다면, merge가 자동적으로 될 수 없다.
이렇게 conflict가 발생한다면, 우리는 conflict가 발생한 부분을 직접 고쳐야 한다.
그리고나서
git branch -d bug456
clone
하여 project 가져오기git log
git log -p
git log --oneline
git log --oneline --graph
git log --stat
git checkout d379
git branch
:git branch myexp
:git checkout myexp
:git status
:git add
:git commit
:git checkout main; git merge(myexp)
:git branch -d myexp
:git branch -M <바꿀 branch명>
:git init
include/funcs.h 생성하고, initial commit하기.
Makefile 생성하고, commit하기
git restore --staged bin/myapp obj/*.o
:.gitignore
file 생성 :zoo() 함수 추가하기.
zoo() 함수 추가하기 전으로 branching해서, koo() 함수 만들고,
master branch와 merging하기.
git remote add origin <생성된 github 원격 repository link>
:git branch -M main
:git pull main == git fetch origin; git merge origin/main
:git pull main
git fetch origin; git merge origin.main