1. 용도
Github는 코드를 공유하고 협업하는 데 사용되는 웹 기반 호스팅 서비스입니다. 버전 관리, 이슈 추적, 코드 검토 및 브랜치 관리와 같은 기능을 제공합니다. 개인 및 기업에서 사용되며 오픈 소스 프로젝트에 특히 인기가 있습니다.
- 소스코드 저장 (버전 관리)
- 소스코드 공유
- 협업하는 공간
💡 다양한 대기업 코드들이 오픈소스로 있다
💡 github 사용법 관리법 유튜브 링크
2. Git, GitHub 차이
Github는 정보가 저장되는 공간이고 소스코드를 내 컴퓨터에서 인터넷으로 올려주는 역할은 git이 한다.
- git
- git은 내 모든 파일의 변화를 추적
- 같은 파일에 대한 각기 다른 버전 저장 가능
- 변경사항을 다른 버전들 간에 한번에 적용 가능
- 같은 파일로 여러 사람과 협업 가능
- git server 와 git client 로 나뉜다
- github
- 클라우드에 있는 git 제공자
- 내 컴퓨터에서 깃 히스토리를 가져와서 깃허브 웹사이트에 push한다
3. Git을 활용할 수 있는 방법
- github desktop 어플리케이션 보다는 source tree 어플리케이션이 많이 사용됨
- 순수 명령어를 활용하는게 제일 좋다
- 화려한 UI를 선호한다면 Git Kraken도 있다
💡 git을 처음 배운다면 terminal로 배우자
- terminal 도구
- Mac OS : iTerm2
- Windows : cmder
4. Git 초기 설정
- 에디터 설정
git config --global core.editor "code --wait"
- 터미널에서 에디터를 열때 “code” 만 입력하면 에디터가 열린 상태에서도 터미널을 사용 가능하다 하지만 “code —wait”을 입력하면 에디터 창이 닫히기 전까지는 터미널을 사용할 수 없다.
- 사용자 관련 설정
git config --global user.name "**사용할 이름**"
git config --global user.email "**사용할 이메일**"
git config user.name
git config user.email
- core.autocrlf 설정
git config --global core.autocrlf true
git config --global core.autocrlf input
- Windows 사용자의 경우 값을 true로, Mac OS 사용자의 경우 값을 input으로 설정해주면 됩니다.
- 운영 체제마다 에디터에서 줄바꿈을 할 때 들어가는 문자열이 다르다. windows 는 \r\n 이 동시에 들어간다(\r : carriage return, \n : line feed) Mac OS 에서는 \n 하나만 들어간다. 이때, git repository를 다양한 운영체제에서 쓸때 수정하지 않아도 줄바꿈 문자열이 달라져서 git history 를 볼 때 문제가 생길 수 있다.
- 이를 해결하는 방법이 core.autocrlf 이고 이 값을 true로 하면 Windows에서 git에 저장할때는 \r 를 제거해서 올리고 git에서 받아올 때는 \r 을 포함에서 온다. Mac OS 에서는 git에서 받아올 때는 수정을 안하지만 저장할 때는 /r을 삭제해준다.
5. Git 명령어 형식
💡 git 홈페이지에서 Documentation > Reference에 들어가면 각종 명령어가 있다
- 원하는 위치에 git 폴더를 생성한다
mkdir git
- git을 초기화 하려면
#폴더에 들어가서
git init
- git을 제거하고 싶으면
rm -rf .git
git status
- 명령어를 단축해서 쓰고 싶다면 alias를 활용
git config —global alias.*축약된 명령어* *축약할 명령어*
명령어를 간단하게 활용할 수 있다
git 명령어 --h
ex) git config --h
6. Git의 workflow
🖥️git에는 크게 3가지의 작업환경이 나눠져 있습니다
- working directory
- 기본 정보
- 프로젝트의 파일들을 수정하는 위치
- 우리가 작업하고 있는 위치
- untracked/tracked
- git이 이미 알고 있는 파일은 tracked 카테고리에 들어간다
- 새로 만들어진 파일이거나 기존에 존재하던 프로젝트에서 git을 초기화하게 되면 git이 파일에 대한 정보가 없어서 untracked 한 상태이다
- git이 tracked하고 있는 파일 중에서도 지금 시점에서 수정이 되었는지 유무에 따라 unmodified, modified로 나뉜다
- unmodified는 이전 버전과 비교해서 수정되지 않았기 때문에 수정이 된 modified 파일들만 staging area로 옮길 수 있다.
- staging area
- 어느 정도 작업하다 version history에 저장할 준비가 된 파일들을 옮겨 놓는 위치
- commit 이라는 명령어로 .git version history에 저장
- .git directory
- version의 history를 가지고 있는 .git repository 혹은 .git directory
- .git directory에 저장된 version들은 언제든지 checkout 이라는 명령어를 이용해서 언제든 원하는 version으로 돌아갈 수 있다.
7. Git의 대표적인 명령어
📌 add 명령어를 이용해서 working directory에 있는 파일들을 staging area로 보낼수 있다.
📌 프로젝트 폴더에서 파일을 수정하다 어느정도 완성이 되면 일부 파일을 staging area로 옮긴다.
이후 commit 명령어를 이용해서 staging area의 파일들을 git version history에 저장하게 된다.
나머지 파일들도 준비가 되면 다시 staging area로 옮기고 commit을 하면 다시 history에 저장할 수 있다.
이렇게 directory에 저장된 파일들은 언제든 checkout 을 통해 원하는 버전으로 돌아갈 수 있다.
하지만 이렇게 저장된 git history는 나의 local pc에만 저장이 되어있다.
📌 그래서 github 같은 서버에 push라는 명령어를 통해서 나의 .git directory를 서버에 저장할 수 있다.
서버에서 다시 로컬로 다운받고 싶으면 pull 명령어를 사용하면 된다.
📌 각각의 commit에는 고유한 hash code가 부여된다. 이 정보로 버전 정보를 참조할 수 있다.
commit에는 id뿐만 아니라 어떤 버전인지, 버전에 관련된 메시지, 누가 언제 작성했는지도 포함이 되어있다.
📌 clone : clone repository 는 원격 저장소를 복제한 저장소다. 이건 다른사람의 소스코드 복사본을 생성하는 것과 같으며,
개발을 할 때 보통 클론 저장소에서 작업을 진행하게 된다. 이런 상황에 원격 저장소에 변경 사항이 생기면,
그 내용을 가져와 클론 저장소를 최신 상태로 유지해야 한다.
📌 fetch : 로컬 git에게 원경 저장소에서 최신 메타데이터 정보를 확인하라는 명령을 전달한다.
단, 원격 저장소에 변경사항이 있는지 확인만 하고, 변경된 데이터를 로컬 git에 실제로 가져오지는 않는다.
(기능을 확인하려고 있는 것, working directory에는 영향을 주지 않는다.)
📌 pull : 원격 저장소에서 변경된 메타데이터 정보를 확인할 뿐만 아니라 최신 데이터를 복사해서 로컬 git에 가져온다.
git 명령어
- start a working area (see also: git help tutorial)
- clone Clone a repository into a new directory
- init Create an empty Git repository or reinitialize an existing one
- work on the current change (see also: git help everyday)
- add Add file contents to the index
- mv Move or rename a file, a directory, or a symlink
- restore Restore working tree files
- rm Remove files from the working tree and from the index
- examine the history and state (see also: git help revisions)
- bisect Use binary search to find the commit that introduced a bug
- diff Show changes between commits, commit and working tree, etc
- grep Print lines matching a pattern
- log Show commit logs
- show Show various types of objects
- status Show the working tree status
- grow, mark and tweak your common history
- branch List, create, or delete branches
- commit Record changes to the repository
- merge Join two or more development histories together
- rebase Reapply commits on top of another base tip
- reset Reset current HEAD to the specified state
- switch Switch branches
- tag Create, list, delete or verify a tag object signed with GPG
- collaborate (see also: git help workflows)
- fetch Download objects and refs from another repository
- pull Fetch from and integrate with another repository or a local branch
- push Update remote refs along with associated objects
한줄 요약
git init
git remote add origin "저장소 주소"
git pull origin main
git add --all
git commit -m "커밋할 내용"
git push origin main
👉 전체적인 Git 사용 순서
git clone or git init
git branch feature/'name'
git checkout feature/'name'
git add .
git commit -m "message"
git push origin feature/'name'
compare pull&request
merge
conflict발생시
git checkout master
git pull origin master
git checkout feature/'name'
git merge master
수정 후...
git add .
git commit -m "something"
git push