세리프 따라잡기

git의 버전 관리에 대해 [시작, 만들기, 명령어, 설정, 깃허브 연동 등…] 본문

Git

git의 버전 관리에 대해 [시작, 만들기, 명령어, 설정, 깃허브 연동 등…]

맑은 고딕 2021. 2. 7. 16:36

시작하기

 

문서 폴더에 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

Comments