SW개발을 하다보면 버전관리를 해야 하는데 Git과 같은 VCS이 있기 이전에는 여러명이 동시에 한 시스템을 개발할 때 매 버전별로 새로 백업해 두거나 다른 사람들과 소스코드 및 결과물들을 합치는게 어렵고 번거로운 문제였다. 버전을 rollback 하거나 변경사항을 확인할 때도 버전이 많아지면 일일히 찾아서 유효성 검증하는 것도 까다로운 문제였다. 그래서 나온 것이 VCS(Version Control System)이고 아래와 같은 특징을 갖고 있다.
이 VCS는 처음엔 local에서 관리가 되었다가 회사나 연구실 프로젝트의 경우엔 각 회사 및 연구실에서 중앙서버를 두고 사용 되었다.
하지만 로컬이나 중앙서버를 두는 방식은 어느 한쪽이 문제가 생기면 모든 작업에 영향을 줄 수 있으므로 위와 같은 구조로 각 파일과 Version db를 나눠서 관리를 하게 되었는데 개인이나 기업이 위와 같은 시스템을 완성하기에는 시간과 돈이 많이 소요가 될 수 있어 비효율 적이다. 요즘엔 다행이도 git/github 가 이 방식을 잘 만들어 두었고 개인이나 기업이 널리 사용하고 있다.
git의 설치 환경은 OS에 따라 다르지만 조금만 구글링 해보거나 공식 사이트를 참고하면 금방 해결 할 수 있는 문제이므로 여기선 생략.
git의 repository 는 크게 local repository 와 remote repository 가 있다.
git init
현재 경로에 대해 git repository로 설정하기 위한 명령어 실제 git을 사용해 보기 위해 아래와 같이 진행하였다.
$ git init
$ ls -la
drwxr-xr-x 3 YB staff 96 2 12 19:44 .
drwxr-xr-x+ 89 YB staff 2848 2 12 19:51 ..
drwxr-xr-x 9 YB staff 288 2 12 19:51 .git
git clone
특정 remote repository로 부터 보통 local에 아무것도 없을 경우 프로젝트를 새로 시작하고자 할 때 아래와 같은 명령어로 git repository가 설정되어 있는 파일을 모두 복제하여 갖고 올 수 있다.
$ git clone <git remote repository>
github repository에서 위와 같은 버튼을 누르거나 새 repository를 생성하면 URL을 바로 확인 할 수 있는데 (.git으로 끝남) 그것을 복사하면 된다.
정리 : git repository를 생성하는 명령어는 다음과 같이 정리 할 수 있다.
$ git init # 내부 저장소 생성
$ git add remote <remote_repo_name> <remote repository url> # 새로운 원격저장소 로컬에 추가
$ git remote -v # 연결된 원격저장소 확인
git을 본격적으로 사용하기 앞서 git에서 실제 파일 버전 관리를 할 때 크게 3가지의 상태가 있는데 Modified(Unmodified), Staged, Committed 상태이다.
Staged : git add
명령어를 통히 staging area 에 올라와 있는 상태. 일종의 중간 저장 상태로 커밋 직전의 상태 중간 상태가 존재하는 이유는 commit 전에 충분히 수정할 수 있는 여지를 두기 위함이고 개발이나 수정이 제대로 되지 않고 commit이 무분별하게 이뤄질 경우 이력관리(history)도 복잡해지고 commit을 되돌릴 수 있지만 그 과정이 까다롭기 때문에 과정이 안정되게끔 중간 저장 과정을 두게 된 것이다. commit은 특정 개발이 테스트가 끝나고 완전히 완료가 되었을 경우 하는 것이 좋다.
$ git diff
$ git diff --cached # 만약 커밋하려고 Staging Area에 넣은 파일의 변경 부분을 보고 싶으면 해당 옵션 사용
이 staging 개념을 활용하여 Git에서의 버전관리 flow를 정리하면
git add
로컬에서 작업한 파일을 staging area에 올리는 명령어
$ git add test.txt
$ git status
현재 브랜치 master
아직 커밋이 없습니다
커밋할 변경 사항:
(스테이지 해제하려면 "git rm --cached <파일>..."을 사용하십시오)
새 파일: test.txt
git commit
staged 된 수정 및 완료된 파일을 git local repository에 commit하는 명령어 주로 -m
옵션하고 같이 사용하여 해당 작업 내용을 상세하면서도 간단하게 기술해 준다
$ git commit -m "test.txt file has made"
[master (최상위-커밋) adf9c1d] test.txt file has made
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.txt
git remote add origin [remoterepository-url]
local repo와 remote repo를 연결시켜주는 명령어 아래와 같이 작성 가능하다.
$ git remote add origin https://github.com/ybear90/git_test.git
git push
local repo에 있던 작성 파일들을 remote repo에 올려주는 명령어
$ git push origin<실제 리모트 저장소> master<master 브랜치>
오브젝트 나열하는 중: 3, 완료.
오브젝트 개수 세는 중: 100% (3/3), 완료.
오브젝트 쓰는 중: 100% (3/3), 215 bytes | 215.00 KiB/s, 완료.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/ybear90/git_test.git
* [new branch] master -> master
git log
git repo에서 진행했던 commit log를 확인할 수 있다.(commit history) 이 명령어의 개선된 버전으로 tig
같은 tool이 많이 사용되는 편이다.
$ git log
commit adf9c1d2972037d391fccef86c89edf4281a0ec2 (HEAD -> master, origin/master)
Author: ybear90 <chunggryu@gmail.com>
Date: Wed Feb 12 20:58:14 2020 +0900
test.txt file has made
$ tig
2020-02-12 20:58 +0900 ybear90 I [master] {origin/master} test.txt file has made
... ...
[main] adf9c1d2972037d391fccef86c89edf4281a0ec2 - commit 1 of 1 100%
commit adf9c1d2972037d391fccef86c89edf4281a0ec2
Refs: [master], {origin/master}
Author: ybear90 <chunggryu@gmail.com>
AuthorDate: Wed Feb 12 20:58:14 2020 +0900
Commit: ybear90 <chunggryu@gmail.com>
CommitDate: Wed Feb 12 20:58:14 2020 +0900
test.txt file has made
---
test.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..e69de29
git diff
프로젝트 파일들에서 어떤 수정 사항들이 적용되었는지 전후를 비교해서 보여주는 명령어. staged된 파일들은 확인할 수 없고 아직 staged에 올라가지 않은 수정된 파일들만 확인 할 수 있다.
이 밖에 여러가지 명령어가 많지만 git을 사용하면서 필요하다고 생각이 될 때 마다 꾸준히 정리하면 될 듯 하다.