버전관리 시스템의 한 종류
버전관리 시스템(형상관리):
Configuration Management Systems
Version Control Sysyems
버전관리
Source Data와 History를 통해 협업, 작업 추적, 복구 등이 가능.
버전 관리 시스템 발명 전에는 로컬 컴퓨터에 폴더와 파일을 버전별로 복사하여 관리
Local Version Control Sysyems(로컬 버전관리 시스템)
데이터가 망가지면 복구 어려움
버전은 관리되지만 협업은 어려움
Centralized Version Control Systems(중앙 버전 관리 시스템)
협업 가능하지만
comnmit하는 순간 배포되어 다수에게 버그 유발 가능
자신만의 version history를 가질 수 없음
인터넷 안되면 작업 불가
Distributed Version Control Sysyems(분산식 버전 관리 시스템)
commit해도 개인 저장소 내에 적용
원하는 순간 배포(Push)가능
오프라인 작업 가능
자신만의 history 가짐
CVCS: CVS, SVN 등
DVCS: Mercurial, Git 등
cvs: 1980년댈 개발되었으나 현재 SVN으로 대체됨
SVN(https://subversion.apache.org/): 중앙 관리 시스템이지만 단점을 많이 보완하여 현재도 사용 중.
Git(https://git-scm.com/): SVN보다 빠른 속도와 많은 기능을 지님
GitHub(https://github.com/): Git을 호스팅해주는 비설치형 웹 서비스. 협업을 위한 기능 제공. ※ 소스코드 보안이 중요한 경우 사용 기피(host 버전이 나와 사내에서 사용 증가)
GitLab(https://about.gitlab.com/): 설치형 버전 관리시스템으로 소스코드 보안이 중요한 기업에서 주로 사용. 클라우드 버전 관리 시스템 제공(10명 이하 무료)
git 설치는 Git 사이트 다운로드 페이지에서 다운 받아 설치
git을 설치했으면 git bash를 실행하여 아래 같은 형식으로 글로벌 유저 네임과 이메일 등 설정
git config --global user.name wonder1ng
git config --global user.email wonder1ng@velog.io
# 윈도우 한정 아래 코드 실행
git config --global core.autocrlf true
# 윈도우와 유닉스 기반 os의 차이로 윈도우는 autocrlf(자동 개행)를 설정해야 함.
# 윈도우는 cr(\r)lf(\n)가 개행. 유닉스 기반은 lf(\n)이 개행
git config --global core.editor vim
git config --list # 현재 설정값 확인 가능. q로 탈출이라는데 나는 자동 탈출함.
★Push: Local의 commit을 Remote에 보내 반영하는 것. ★ Push하는 순간 다른 개발자도 영향 받음. 검증된 것만 할 것.
Local Repository 생성과 커밋
cd c:/Users # git bash에서 원하는 경로로 이동
mkdir git_ws # 작업폴더 생성
git init # 이제부터 Local Repository.
ls -all # 숨긴 파일 포함 모든 경로 출력
touch test.txt # test.txt 생성
git status # Git에 존재하는 파일 확인
git add test.txt # Index에 파일 추가
git commit -m 'first commit' test.txt # 커밋과 설명(-m)
Remote repositoty 생성할 때 .gitignore는 git 버전 관리에서 제외할 확장자 지정하는 파일. .gitignore에 기입한 조건에 해당하는 폴더 및 파일은 git status에서 미인식.
# 기본 등록
git remote add origin 주소 붙여넣기(Shift+Insert) # 주소는 https://github.com/닉네임/노트명.git 형식. origin 지금 설정하는 저장소 이름
# 토큰 등록
git remote add origin https://닉네임:토큰@github.com/닉네임/노트명.git
git remote -v # Remote repository 정보 확인
# Git Push. github에서 Remote Repository에 들어가거나 새로고침하면 push된 파일 확인 가능.
git push origin master # git push 저장소이름 branch이름
git remote remove origin # 인덱스 제거
Git Pull
Remote repository에서 파일 하단의 Add a README 녹색 버튼 클릭 -> 하단의 Commit new file 선택 후 아래 코드 실행
git pull origin master # git pull 저장소이름 branch이름
# 완료 후 폴더 확인
Git Clone
git clone repository코드(URL.git)
Branch 명령어
git branch # Local branch 조회
git branch -r # Remote branch 조회
git branch -a # All branch 조회
git branch branchname # Local branch 생성
git checkout master # branch 이동
git checkout -b master # branch 생성 및 이동
git push origin branchname # Remote branch 생성
git branch -d branchname # Local branch 삭제. 현재 사용 중인 branch는 삭제 불가.
git push origin -d branchname # Remote branch 삭제.
VSC 설치 완료 상태에서 아래 실행
# git bash에서 로컬 리포지토리에 접속한 상태로 아래 코드 입력시 VSC 실행
code .
# 열린 VSC의 Extension에서 Git Graph 설치
cat > hello.py # hello.py 생성 및 진입
print('hello, world') # 입력. 저장 및 탈출은 Crtl+D
git log # 해당 branch의 로그 확인
git config --global core.editor 'code' # editor를 VSC로 변경
git config --global -e # vim으로 접속한 경우 아래의 설명에 따라 행동
# config에 아래 코드 기입하여 저장 후 편집기 종료
[diff] # diff는 버전 간 차이 조회
tool = vscode
[difftool "vscode"]
cmd = "code --wait --diff $LOCAL $REMOTE"
git bash editor vim 편집 탈출 명령
vim 상태에서 esc는 명령 모드 'I(알파벳 아이)'는 기입(insert) 모드. 저장 없이 탈출은 'q!', 저장 후 종료는 'q'. 명령어는 리눅스 명령어 참고.
git diff branch1 branch2 # 두 branch 내용 비교
git difftool branch1 branch2 # difftool로 설정된 편집기로 diff 실행
y # 위 코드 실행 후 y 선택
git diff commithash1 commithash2 # commithash = git log했을 때 commit 다음에 나오는 문자열
git difftool head head^ # 최종 commit과 그 전 commit 비교
git config --global -e
# 아래 코드 삽입
[merge]
tool = vscode
[mergetool "vscode"]
cmd = "code --wait $MERGED"
# 설정 저장 후 시작. Branch: master, dev
git merge dev # merge 실행. 정상 실행 시 Fast-forward, 충돌 시 CONFLICT 출력.
# 충돌 시
git mergetool # 충돌한 파일 실행. 실행 시 mater 내용엔 <<<<<<< HEAD, 병합하는 쪽 내용엔 >>>>>>> dev(브랜치명)으로 표시
# 내용을 맞게 수정(충돌 표시도 다 제거) 후 저장.
git add test.txt # 새로 add
git commit # commit Message 열리는데 저장 후 편집 종료.
git tag 태그명 # 마지막 commit에 tag 생성
git tag 태그명 커밋해시 # 해당 commit에 tag 생성
git push 저장소명 태그명 # remote tag 삭제
git tag # tag 목록
git show 태그명 # tag 상세 정보
git tag -d 태그명 # tag 삭제
git push -d 저장소명 태그명 # remote tag 삭제
프로젝트에 대한 설명, 사용법, 라이센스, 설치법 등을 기술하는 파일.
GitHub에선 README 파일이 마크다운 문법이 적용되어 노출됨.