※ 유튜브 유노코딩 채널의 '깃과 깃허브가 처음인 당신에게' 라는 강의 영상을 참고한 게시글입니다.
https://www.youtube.com/watch?v=PwIei1tdHSU&list=PLFeNz2ojQZjv9dU2Z0YOfCGLI4CK3GSPd&index=1
ㅇ 로컬환경에서 새 폴더를 생성하여 git 저장소로 초기화 시키기
# 로컬환경에 깃이 설치되어 있는지 확인하는 명령어
git
# 터미널에 표시된 내용을 정리한다
clear
# git의 전역설정으로 사용자 이름을 설정한다
git config --global user.name "9mans"
# 아래 명령어로 현재 이름을 조회 가능하다
git config --global user.name
# git의 전역설정으로 사용자 이메일을 등록한다
git config --global user.email "rbska1234@naver.com"
# git 저장소(repository)를 생성하는 명령어 현재 디렉토리를 git으로 버전 관리가 가능한 저장소로 초기화시킨다
git init
# git init 명령어를 사용하여 디렉토리를 저장소로 초기화하면 .git(숨김파일) 폴더가 생성된다
# 숨김폴더(a)를 포함한 현재 디렉토리에 있는 모든 파일을 자세히(l) 출력한다
ls -al
# ls -al 명령어를 사용하여 .git 폴더가 생성되었는지 확인한다
ㅇ 깃 저장소의 이력 관리하기
깃 프로젝트 내부에는 가상의 관리 영역이 존재한다. 각 영역마다 파일의 상태를 구분하고 버전을 관리한다
Working Directory | Staging Area | Repository |
개발자가 생성한 폴더 개발자가 이곳을 통하여 작업을 진행한다. | 수정 이력을 기록할 파일을 대기시키는 장소 git이 관리하는 영역이다. | Staging Area에서 대기 중이던 파일들의 수정 이력이 최종적으로 저장되는 장소 git이 관리하는 영역이다 |
git은 Working Directory 내 문서들의 수정사항을 추적(Tracking)한다. git은 문서를 상황에 따라 다음과 같이 표현한다.
- untracked file : 새로 생성된 파일로, 추적이 되고 있지 않은 상태
- unmodified file : 추적 중인 파일이지만, 수정 사항이 없는 상태
- modified file : 추적 중인 파일이며, 수정 사항이 감지된 상태
git 사용자는 Working Directory에서 감지된 신규, 수정 문서들을 Staging 영역으로 이동 시키고 Commit 작업을 통해 Repository에 기록시킨다.
Repository는 Commit한 내용을 기록하고 기록을 쌓아간다. Commit의 기록을 상세히 구분해 기억한다.
# git을 이용한 프로젝트 버전 관리란..
문서의 작업 이력을 쌓아나가기 위해 git 명령어로 파일의 상태와 영역을 변경하는 작업을 뜻한다.
git 저장소 내부에 쌓여있는 이력들을 기반으로 과거의 특정 시점으로 변경하거나, 이력 간 변경사항을 모니터링 하는 등 다양한 작업들을 진행할 수 있게된다.
# git 프로젝트의 상태를 확인하는 명령어
git status
# Working Directory 내 문서를 스테이징 영역에 추가하는 명령어
git add 파일명
# 스테이징 영역 내 대기 중인 문서를 Repository에 추가하는 명령어
git commit
# commit한 수정 이력을 확인하는 명령어
git log
# 문서를 생성하는 명령어
touch 파일명
# 터미널에서 파일을 실행하는 명령어
vim 파일이름
---
# vim을 실행하면 명령모드로 시작된다 i를 입력하면 편집모드로 전환
# esc를 입력하면 다시 명령모드로 전환
# 저장 후 종료 = :wq
# 저장하지 않고 종료 = :q!
# 저장만 하기 = :w
---
# git add 명령어를 사용하면 간혹 아래와 같은 에러가 발생할 수 있다.
# 에러의 의미는 git이 파일의 줄 끝 문자를 자동으로 변환할 것임을 나타내는 것이다.
# git은 운영체제에 따라 줄 끝 문자를 자동으로 처리한다
# 필자는 touch 명령어를 통하여 리눅스 환경에서 파일을 생성했고, 실제 파일이 존재하는 디렉토리의 환경은 윈도우기 때문에 줄 끝 문자 형식의 불일치를 경고하는 메세지이다
# 큰 문제가 되지 않는다면 무시해도 괜찮다.
warning: in the working copy of 'text1.txt', LF will be replaced by CRLF the next time Git touches it
git add .
# 현재 디렉토리에 존재하는 수정사항, 추적되지 않는 파일등을 한번에 Staging Area에 추가하는 명령어
git commit -m "(commit message)"
# vim을 이용하지 않고 commit message를 입력하는 명령어
ㅇ .gitignore
gitignore는 git의 설정파일이다. 프로젝트 내 문서 중 수정 이력에서 제외하고 싶은 문서가 있다면 이를 gitignore를 사용해 추적 대상에서 완전히 제외시킬 수 있다. 필요한 경우 직접 생성하여 추적 대상을 관리할 수 있다.
# vim이나 nano를 사용하여 .gitignore 파일을 실행한다.
vim .gitignore
혹은
nano .gitignore
# vim으로 화면이 바뀌면 secret.txt를 추가한다.
궁금했던 점: gitignore를 사용하여 파일을 제외시키는 것과 직접 직접 제외시키는 것이 차이가 있는지?
gitignore :
- 추적에서 완전히 제외된다(영구적)
- 공유가 가능하다 : gitignore 파일은 git 저장소의 일부이기 때문에 협업하는 모든 사용자가 공유한다 모든 사용자가 동일한 파일을 무시하도록 할 수 있다.
- 장기적 설정 : 프로젝트에서 장기적, 영구적으로 제외하려는 파일 관리에 유용하다.
- 변경 사항의 추적 불가 : gitignore에 추가된 파일은 git이 추적하지 않기 때문에 변경사항이 기록되지 않는다.
직접 제외시키고 commit 하기 :
- 한 번만 적용된다 : 이 방법은 커밋을 할 때마다 직접 파일을 선택, 제외해야 한다 (일시적)
- 세밀한 제어가 가능하다 : 특정 파일을 포함 혹은 제외시키는 경우 유리하다. (일부만 commit)
- 이미 추적중인 파일에 적용시키는 경우 : git이 추적하고 있는 파일을 제외할 때 유용하다.(설정 파일의 일시적 제외)
- 변경 사항이 게속 추적된다 : 추적이 제외된 파일이 아니기 때문에 이후 commit에서 다시 포함될 수 있다. 파일의 변경사항은 git에 의해 게속 추적중이다.
ㅇ commit 이력 자세히 확인하기
git log 명령어를 사용하여 log를 확인해보면
commit 해시 (HEAD참조자 -> 브랜치명)
작성자
날짜
commit message 의 내용을 확인할 수 있다
# log 옵션 및 커밋 이동 명령어
# 커밋의 변경사항까지 함께 출력하는 옵션
git log -p
# 명시한 숫자만큼만 commit 내역을 보여준다
git log -숫자( -p -숫자 가능)
# 각 커밋을 요약해 한 줄씩 출력하는 옵션
git log --oneline
# 문서 내용을 특정 커밋의 내용으로 되돌리는 명령어
git checkout 커밋해시
# HEAD 포인터의 참조 이력을 출력하는 깃 명령어
git reflog
checkout 명령어를 통해 과거 commit 내용으로 이동했다. 이 후 git log 명령어를 사용하면 되돌아간 과거 이후의 commit 내역이 표시되지 않아 최신 commit의 해시를 확인할 수 없다. 이 때 git reflog를 사용하면 해결할 수 있다.
commit 해시를 알았다면 checkout 명령어를 통해 다시 이동하면 되돌아갈 수 있다.
ㅇ 실수에 대응하기
# 명령어를 통해 git 저장소를 실수하기 전 상태로 되돌릴 수 있다.
git reset 파일명 or commit해시
# git reset commit해시 명령어를 사용할 경우 3가지 옵션을 사용할 수 있다.
# 옵션을 명시하지 않으면 default는 --mixed다.
git reset commit해시 --soft
git reset commit해시 --mixed
git reset commit해시 --hard
# 수정사항을 되돌린 이력을 남기고 싶을 때 사용하는 명령어(reset은 이력을 남기지 않는다.)
git revert commit해시
- 아직 작업중인 문서를 실수로 add 했을 경우(Staging Area → Working Directory로 되돌리기)
- 실수로 commit 명령을 수행하여 원하지 않는 commit 이력이 추가된 경우(Repository → Staging Area)
Working Directory | Staging Area | Repository | |
--soft | 현 상태 유지 | 현 상태 유지 | 커밋 이동 |
--mixed | 현 상태 유지 | 스테이징 초기화 | 커밋 이동 |
--hard | 이동한 커밋의 상태로 변경 | 스에티징 초기화 | 커밋 이동 |
주의할 점: revert 명령어를 사용할 때 commit해시의 값을 돌아가고자 하는 commit해시의 값이 아닌 되돌리고자 하는 commit해시 값을 입력해야된다.
ㅇ Branch 관리하기
branch란 기존 저장소에서 분기된 저장소의 복사본이다.
코드를 통째로 복사하여 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있도록 하는 것이 브랜치의 사용 목적이다.
master 혹은 main이라는 이름의 기본 브랜치가 프로젝트 생성시 만들어지며, 이를 바탕으로 여러 브랜치를 분기하여 작업을 진행한다.
# 현재 브랜치 목록을 볼 수 있는 명령어
git branch
# 새로운 브랜치를 생성하는 명령어
git branch 브랜치명
# 작업중인 브랜치를 변경하는 명령어
git checkout 브랜치명
# 현재 브랜치에 다른 브랜치의 내용을 병합하는 명령어
git merge 브랜치명
# 사용한 브랜치를 삭제하는 명령어
git branch -d 브랜치명
ㅇ git hub 원격 저장소 이용해보기
git hub는 git 저장소 호스팅을 지원하는 웹 서비스다.
# 현재 git 프로젝트에 등록된 원격 저장소를 확인하는 명령어
git remote -v
# 현재 git 프로젝트에 원격 저장소를 등록하고, 이름을 붙히는 명령어
git remote add 원격저장소이름 원격저장소주소
# 로컬 저장소의 내용을 원격 저장소에 공유할 때 사용하는 명령어
git push
# 원격 저장소의 내용을 로컬 저장소에 가져와 자동 병합하는 명령어
git pull
# 원격저장소에 있는 repo를 로컬 저장소로 clone 하는 명령어
git clone 원격저장소 주소
# 원격저장소의 이름과 브랜치명을 명시한 push 명령어
git push -u 원격저장소이름 브랜치명
# -u 명령어는 --set-upstream 명령어의 줄임말로 로컬브랜치와 원격브랜치를 연결하는 역할을 한다. 이를 통해 다음 명령어를 입력 시 브랜치명을 생략할 수 있다.
# 로컬저장소와 원격저장소를 연결한 후 로컬에서 브랜치를 생성 후 새로운 브랜치에 push하는 코드 작성하기
git branch dev (로컬에 dev 브랜치생성)
git checkout dev (현재 사용하는 브랜치를 dev로 전환)
touch testbranch.txt (dev 브랜치에 파일생성)
git add . (생성한 파일을 staging 영역으로 이동)
git commit -m "branch test commit" (커밋)
git push -u origin dev(원격저장소 origin의 dev 브랜치로 push)
'Git' 카테고리의 다른 글
Git 충돌 해결하기 (2) | 2024.09.21 |
---|---|
Git merge와 rebase의 차이 (1) | 2024.09.09 |
Git 일단 해보기(branch 이동) (0) | 2024.09.09 |
Git commit에 대해서 (6) | 2024.09.06 |
Git flow (0) | 2024.08.29 |