세리프 따라잡기
git의 버전 관리에 대해 [시작, 만들기, 명령어, 설정, 깃허브 연동 등…] 본문
시작하기
문서 폴더에 git이라는 하위 디렉토리를 만들고, test 폴더를 만들었다.
이에 대한 버전 관리를 시작하려고 한다면 git init . 를 사용하자. git에게 현재 디렉토리(.)를 초기화해주는 것(initialize)
위가 실행 결과 화면이다.
즉, git init는 initialize repository를 해주는 것이고
.git은 git repository이다. = 지우면 안된다! 😁
버전으로 만들기
working tree : 파일을 만들고 수정하는 작업들 (버전으로 만들기 전 단계)
staging area : 버전을 만드려고 하는 몇 가지 항목을 올려두고 git에게 이 area에 있는 파일만 모아서 하나의 버전으로 만든다.
repository : 버전에 대한 저장소
- 명령어
git init | 이 명령은 .git 이라는 하위 디렉토리를 만든다. .git 디렉토리에는 저장소에 필요한 뼈대 파일(Skeleton)이 들어 있다. |
git status | git 저장소의 상태 확인 |
git add 파일명 | staging area에 올리기 = git이 파일을 추적하도록 한 것 |
git add . | 현재 디렉토리 밑에 있는 모든 파일을 추가한다는 뜻. git add 디렉토리명 → 디렉토리명 하위 모두를 추가 |
git commit | 기본값으로 지정된 편집기가 뜨고, 거기에 메시지를 작성한 뒤 저장하고 나오면 커밋이 된다. |
git commit -m " " | " "에 메시지를 적어서 커밋하게 함 |
git commit -am " " | add와 커밋을 한 번에 해주는 것. [이때 최초 한 번은 add로 트랙해주어야 사용할 수 있다] |
git log | 버전이 잘 만들어졌는지 기록을 확인함. |
git log --stat | 하나의 버전에 관련된 여러 개의 파일을 그룹핑하여 보여주는 것 |
git log -p | 버전에 대한 패치 내역을 보여준다 |
git diff | 작업한 것에 대해 이전과의 차이점을 보여준다. |
git reset --hard | 이전 작업과 이번 작업을 비교했을 때 마음에 들지 않는다! 라면 이번 작업물을 날려버리는 것. (즉 이전으로 되돌린다) + 강력한 명령이기 때문에 함부로 쓰진 말자. 커밋한 적이 없다면 복구할 수 없게 완전히 날라가는 것이기 때문 |
git reset --soft/mixed | soft나 mixed는 버전만 지워버리고 수정하고 있던 작업은 살리고 싶을 때 사용하면 된다. |
git reset --hard 커밋번호 | 이 커밋번호로 리셋하겠다는 의미. = 이 버전(커밋번호)으로 가겠다. |
git revert 커밋번호 | 지금의 버전을 그대로 두면서 이전 버전으로 돌아가는 것. 이때 커밋번호는 역순으로 차례대로 해야한다. = 처음으로 돌아가고 싶으면 최신 커밋번호부터 역순으로 revert 시켜야함. 안 그러면 충돌(conflict)이 일어난다. |
git checkout 커밋번호 | git log를 통해 확인한 commit 번호를 복사하여 이 명령어에 붙여주고 확인을 누르면, 이 버전을 만든 시점으로 돌아가게 된다. (head가 가리키는 곳이 달라짐) = 과거와 현재를 탐색할 수 있다! |
git checkout master | 최신 상태로 돌아간다. (head -> master) |
git config | Git에 관한 설정을 추가하거나 바꾸거나 삭제하는 명령어 |
git branch | branch 목록 확인 |
git branch -d 브랜치명 | 해당 브랜치 삭제 |
git branch -a | 모든 branch 확인 (로컬, 원격 등) |
git fetch --prune | 리모트 저장소에서 지워진 branch를 로컬에 유지할 필요가 없으므로 삭제해준다. |
※ git add (파일명)을 해주면 이런 경고 메시지가 뜨는 것을 볼 수 있다.
warning: LF will be replaced by CRLF in (파일명).
The file will have its original line endings in your working directory
이는 유닉스 시스템에서는 한 줄의 끝이 LF(Line Feed)로 이루어지고, 반면에 윈도우에서는 줄 한 개가 CR(Carriage Return)과 LF(Line Feed), 즉 CRLF로 이루어지기 때문에 발생하는 에러이다.
= 어느 한 쪽을 선택할지 Git에게 혼란이 온 것!
해결 방법은 아래와 같다.
☞ 윈도우 버전 (windows)
git config --global core.autocrlf true
☞ 리눅스, 맥 버전 (Linux, MAC)
git config --global core.autocrlf input
그런데 이후에도 이 경고 메시지가 계속 뜨는 것을 볼 수 있다😭
이 해결 방법은 이와 같다.
☞ 아래와 같이 core.safecrlf 설정을 해지하면 된다.
git config --global core.safecrlf false
※ git commit -m "메시지"를 해주면 아래와 같은 경고가 뜨는 것을 볼 수 있다.
내 정보에 대해 설정해주지 않아서 뜨는 메시지이다. 그리고 해결 방법을 친절하게 설명해주는데 이를 그냥 따라해주면 된다.
☞ 자신만 사용하는 컴퓨터일 경우 'global'
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
☞ 공용 컴퓨터인 경우 'local'
git config --local user.email "you@example.com"
git config --local user.name "Your Name"
☞ 제대로 되었는지 확인 코드
git config --list
- 에디터 바꾸기
git config --global core.editor "editor" → " "란에 원하는 에디터명을 쓰고 확인을 누르면 된다.
- Untracked files
git이 모든 파일을 자동으로 관리해주지 않는다. 때문에 협업 or 백업하고 싶지 않은 파일은 언트랙 파일로 내버려두면 된다.
※ git checkout 을 쓰면 다음과 같은 오류가 뜰 수 있다.
error: Your local changes to the following files would be overwritten by checkout:
파일명
Please commit your changes or stash them before you switch branches.
Aborting
이를 보면 해결 방법 또한 나와있다. switch branch 이전에 변경사항을 commit 하거나 stash 하라고.
말 그대로 git stash 명령어를 사용해주자!
☞ git stash 이용하면 기존에 작업하던 소스코드가 있는데, 다른 요청이 들어와서 잠시 브랜치를 변경해야하는 상황일 때, 기존에 하던 작업을 이 명령어를 이용해 잠시 저장해둘 수 있다. 스택에 stash 하나가 생성이 되면서 현재 작업중인 파일이 저장되고, working directory는 깨끗해진다.
☞ 저장된 stash 목록 확인은 git stash list 명령어를 이용한다.
☞ 저장된 stash를 다시 working directory에 적용하려면 git stash apply 명령어를 사용한다. [이름을 지정하지 않으면 가장 최근에 추가된 stash를 적용] 이때 apply 옵션은 단순히 Stash를 적용하는 것이므로 Stash는 여전히 스택에 남아 있다. git stash drop 명령을 사용하여 해당 Stash를 제거한다. git stash pop 이라는 명령도 있는데 이 명령은 Stash를 적용하고 나서 바로 스택에서 제거해준다.
참고: https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning
깃허브와 연동하기
먼저 저장소를 만들거나, 만들어진 저장소의 링크를 따오기
git remote 를 통해 현 폴더의 저장소를 확인하기
☞ 아무것도 안 뜬다면 = 설정한 적이 없어서! 아래와 같이 하자.
git remote add origin https://github.com/사용자명/저장소명.git
= 원격 저장소를 생성하는 명령어, 이를통해 내 컴퓨터의 작업 디렉토리와 깃허브의 온라인 저장소와 연동된다.
git push -u origin master
= 브랜치의 기본명인 master와 원격 저장소의 기본 이름인 origin을 넣어준다. 본격적인 연결을 위한 명령어
이때 처음한다면 아이디와 패스워드를 물어보는데, 그냥 본인의 정보를 입력해주면 된다.
연동이 완료되면 이 컴퓨터(로컬)를 추적한다는 메세지가 제일 마지막에 뜨고, 자신의 깃헙 저장소를 리로드하면 제대로 옮겨진 것을 볼 수 있다! + 이 모든 작업은 사실 gitbub에서 new repository 만들때 영어로 다 알려준다는 것!!
※ 순서를 정리하자면!
1. git init
2. git add .
3. git commit -m "ooo"
4. git remote add origin https://github.com/사용자명/저장소명.git [이때 복붙X 타이핑!! = fatal 오류가 뜬다.]
5. git push -u origin master
이후는 push 와 pull을 이용하기만 하면 된다! 끝~😁
.gitignore 이란?
Project에 원하지 않는 Backup File이나 Log File , 혹은 컴파일 된 파일들을 Git에서 제외시킬수 있는 설정 File이다. 즉, 버전 관리를 안 할 파일들은 .gitignore 사용하면된다.
☞ 만드는 방법은 간단하다!
1. 해당 프로젝트가 있는 폴더 혹은 작업 툴 내의 최상위 디렉토리에서 새 파일을 생성하고 .gitignore을 확장자로 지정해주면 된다.
2. 에디터에 제외할 디렉토리명 혹은 파일명을 적어준다. (GUI에서 작업할 때는 txt로 에디터가 지정)
→ 폴더 bin을 제외시키고 싶다면 그저 bin 이라고 적어주면 된다.
이후 gitignore 파일까지 push해주면 된다.
※ 만약 push 해줬는데 적용이 안된다면 아래를 따라하자!
git rm -r --cached .
git add .
git commit -m "ㅁㅁㅁ"
+ 버전 관리의 핵심은 비교이다. 되돌아볼 수 있다는 것이 핵심!
diff tool [여러 가지 툴 소개]
branch
tag 이름 설정
backup
'Git' 카테고리의 다른 글
git branch의 모든 것 (0) | 2022.06.06 |
---|---|
git bash here이 작동 안 할 때/ 안 뜰 때 (0) | 2021.03.08 |
branch&conflict 에 대해 정리 (0) | 2021.02.07 |
CLI를 이용해 git을 사용하는 이유 및 다운로드 방법 (윈도우 버전) (0) | 2021.02.05 |
git에 대해 간단한 정리 (0) | 2021.02.05 |