-
1. 버전관리 - Git CLI | 생활코딩INFO/Git 2020. 2. 25. 01:49반응형
[출처 : https://opentutorials.org]
1. 버전관리란 무엇일까요?
Version Control System (버전관리시스템, 형상관리, 소스관리)
- 파일의 이름은 바뀌지 않고 파일 내용이 바뀌는 변경 사항을 컴퓨터가 관리한다.
- 추가 효용 : ㆍBackup ㆍ Recovery ㆍ Collaboration
※ version : 의미있는 변화들 (기능 개선, 버그 수정)
2. 설치 (Windows)
git을 설치하는 방법을 알려드립니다.
# git 설치하기
설치가 완료되면 git bash 실행 → "git" 엔터를 치면 설치 확인 가능
3. 버전관리의 시작
저장소(repository)를 만드는 방법을 소개합니다.
> ls -al
현재 디렉토리의 목록을 보여준다.
> git init .
현재 디렉터리를 초기화 (git에게 버전관리를 시킨다.)
> cd .git
.git 디렉토리의 부모 디렉토리(프로젝트의 파일을 보관하는 디렉토리)에서 생성되는 여러가지 변화의 버전 정보가 저장되는 곳
4. 버전의 생성
버전을 생성하는 방법들을 살펴봅니다.
※ Working tree : 파일을 수정하는 곳 (수정한 파일들) * 작업 디렉토리
※ Staging Area : 워킹트리에 있는 파일 중 버전으로 만들려는 파일이 있는 곳 (버전을 만들려는 파일들) * 인덱스(스테이지)
※ Repository : Staging Area에 있는 파일을 하나의 버전으로 저장하는 곳 (만들어진 버전) *저장소(히스토리)
> nano 파일이름
> 파일 내용 입력
> Ctrl+x
> y> cat 파일이름
파일이름의 내용을 화면에 출력
> git status
현재 git의 상태를 확인한다.
- No commit yet : 아직 버전이 없습니다. *commit = 버전
- Untracked Files : Working tree에 있는 파일 목록 (git에게 버전 관리를 한 번도 요청하지 않은 파일들)
- Changes to be committed : Staging Area에 있는 파일 목록 (버전이 될 파일들)
- nothing to commit, working tree clean : 버전으로 만들 것이 없으며, 버전이 되지 않은 수정사항이 없다
> git add 파일이름
Working tree에서 수정된 파일이름을 Staging Area에 보낸다.
> git commit -m "메세지"
메세지와 함께 버전 생성 (Staging Area에 있는 파일을 Repository에 보낸다.)
> git log
Repository의 기록(역사)를 보여준다
5. 여러개의 파일을 하나의 버전으로 만들기
- Changes not staged for commit : 한 번이라도 버전 관리(커밋)를 했던 파일 목록
* 협업(백업)하고 싶지 않은 파일은 Untracked Files에 있다. git은 모든 파일을 자동으로 tracked(관리)하지 않는다.
> git log --stat
커밋의 변경 사항을 보여준다.
6. 버전간의 차이점 비교
버전관리를 하게 되면 버전과 버전 사이의 비교를 할 수 있습니다. 이를 통해서 의사결정을 하는데 큰 도움을 받을 수 있습니다.
> git diff
워킹 트리의 파일을 비교한다.
+초록색 : 워킹트리의 수정된 파일에서 추가된 내용
-빨간색 : 워킹트리의 마지막 파일에서 삭제된 내용
> git reset --hard
지금까지 작업한 내역을 삭제한다.
> git log -p
버전의 차이점을 기록으로 보여준다
7. checkout과 시간여행
checkout은 특정 버전으로 working tree를 변경시키는 방법입니다. 이를 통해서 버전과 버전을 넘나드는 방법을 소개합니다.
# git log를 보면 (HEAD -> master)가 있는 커밋이 현재 최신 버전이다.
> git checkout 커밋아이디
저장소는 커밋아이디가 가리키는 버전을 만든 시점으로 돌아간다.
- git checkout 하고 git log를 보면 checkout한 커밋이 (HEAD)가 된다 * (HEAD -> master)였던 커밋은 삭제가 아닌 숨김.
> git checkout master
가장 최신 버전으로 돌아간다. * (HEAD -> master)였던 커밋으로 돌아간다.
8. 보충수업
add를 커밋할 때마다 하지 않는 방법, commit 메시지를 작성할 때 실행되는 기본 에디터를 변경하는 방법등을 소개합니다.
> git add .
현재 디렉토리 안에 있는 모든 파일을 add 한다.
> git add 디렉토리명
디렉토리명 밑에 있는 모든 파일을 add 한다.
> git commit -am "메세지"
add와 commit을 동시에 한다.
* 최초 한 번은 add가 되어서 tracked 상태가 된 파일만 가능
> git commit
설정한 기본 에디터가 뜬다.
* 여러 줄의 메시지를 작성할 수 있다.
> git config --global core.editor "에디터이름"
기본 에디터를 변경한다.
* VS Code 기본 설정
> git config --global core.editor "code --wait"
9. 버전 삭제 - git reset
버전을 삭제하는 방법으로서 reset을 살펴봅니다.
> git reset [--hard] 커밋아이디
커밋 아이디로 리셋한다.
* 리셋한다 : 커밋 아이디의 버전이 되겠다. (커밋 아이디를 삭제한다는 뜻이 아님)
--hard : 버전과 수정하고 있었던 것도 리셋한다.
--soft/--mixed : 버전만 지우고 수정하고 있는 것은 유지하고 리셋한다.
※ 협업을 할 때는 이미 다른 사람들과 공유된 버전은 reset하면 안된다. 공유되기 전 단계의 버전만 reset 해야 한다.
10. 버전 되돌리기 - git revert
버전을 삭제하지 않으면서, 되돌리는 방법으로서 revert를 소개합니다.
> git revert "커밋아이디"
커밋아이디를 revet 한다.
* revert한 기존의 커밋은 유지하고 revert한 커밋의 변화를 취소한다. => revert한 커밋의 이전 버전으로 돌아간다.
# "Message 3" 커밋의 상태로 돌아가고 싶다면 "Message 4" 커밋를 revert를 해야한다.
# git revert는 해당 커밋아이디 이후의 모든 변화를 되돌리는 것이 아니라 해당 커밋아이디가 커밋할 때의 변화만 되돌린다.
ex) "Message 2" 커밋의 상태로 돌아가려면 "Message 4" 커밋을 revert하고 "Message 3" 커밋을 revert한다.
commit 684790981c674656441dad6684b73f3372b989da (HEAD -> master) Author: egchoi <43027774+egchoi@users.noreply.github.com> Date: Tue Feb 25 18:43:05 2020 +0900 Message 4 commit 300fae8e62e822a4a4f845997c788f9c8d0f8a03 Author: egchoi <43027774+egchoi@users.noreply.github.com> Date: Tue Feb 25 18:26:49 2020 +0900 Message 3 commit 7f73a7b4065acbf4a4f58205efd3979d81a3d50a Author: egchoi <43027774+egchoi@users.noreply.github.com> Date: Tue Feb 25 18:26:10 2020 +0900 Message 2
수업을 마치며
> rm -rf .git
로컬 저장소의 git 히스토리 삭제
# 여러 diff tool의 차이점을 비교·분석
# 버전 관리를 하지 말아야 할 파일은 .gitignore 라는 파일을 만들고 그 파일에 파일의 이름을 적는다.
# branch는 우리의 저장소를 여러가지 상태로 공존할 수 있게 해준다.
- 저장소 전체를 복사해서 디렉토리를 만들어서 각 각 작업하듯, 하나의 저장소에서 다양한 작업을 할 수 있다.
# tag는 버전의 커밋 아이디와 이해하기 쉬운 이름을 붙여서 그 이름으로 버전을 찾아갈 수 있다.
# git은 자체적으로 backup 장치를 가지고 있어서 지금까지 작업한 것을 인터넷에 업로드해서 백업할 수 있다.
반응형'INFO > Git' 카테고리의 다른 글
Git Flow를 이용한 브랜치 전략 | 정아마추어 (0) 2020.07.10 5. Cherry-pick & rebase - Git CLI | 생활코딩 (0) 2020.03.01 4. 협업 - Git CLI | 생활코딩 (0) 2020.02.28 3. Backup - Git CLI | 생활코딩 (0) 2020.02.27 2. Branch & Conflict - Git CLI | 생활코딩 (0) 2020.02.26