버전 관리 시스템(Vesion control System)
텍스트 에디터를 종료한 이후에 다시 들어가서 실수를 고칠 방법이 없음
☞ 이전에 작성했던 내용을 보존해 주는 시스템 (버전 관리 시스템)
스냅샷: 특정 시점에 생성된 백업 복사본
commit: 하나하나 스냅샷을 만들어 주는 작업
버전 관리를 사용하는 이유
- 파일 변경 이력을 저장할 수 있음
- 이전 버전으로 돌아갈 수 있음
- 어떤 변경 사항이 있는지 알아보기 쉬움
- 협업에 편리
- 백업용
Git
Git 은 강력한 버전 관리 시스템
버전 관리와 협업 시스템
실제로 실무에서 많이 사용
분산형 버전 관리 시스템
코드 뿐만 아니라 텍스트 파일의 변경점도 하이라이트로 한눈에 볼 수 있음
Github
▷ Git Repository(저장소)를 관리할 수 있는 클라우드 기반 서비스
▷ Git Repository: Git으로 관리되는 폴더
▷ Git으로 버전을 관리하는 폴더에 대해서 Github를 통해 여러 사람들이 공유하고 접근할 수 있음
▷ 개발자들의 SNS
▷ 깃허브에서 code review 등을 통해 협업이 가능
▷ 수많은 오픈 소스 프로젝트들 호스팅
▷ 오픈 소스는 누구나 자유롭게 기능 추가 개선 ☞ 기여(contribute)라고 함
Git Repository
Remote Repository와 Local Repository 제공
로컬 저장소에서 작업한 소스를 원격 저장소에 올림
contribute하기
기여할 원격 저장소를 내 원격 저장소로 가지고 와야함 (Fork)
로컬 저장소로 코드를 옮겨옴 (Clone)
변경된 내용을 commit을 통해 저장해주고 원격 저장소에 반대로 올려주는 작업 (Push)
Pull request : 내가 제안한 코드 변경사항에 대해 반영 여부를 요청
Pull : 원격 저장소에서 변경사항이 있을 때 로컬 저장소로 가져오는 작업
Git 설치하기
Mac: 터미널에서 git 입력하면 자동으로 설치됨
Windows: https://gitforwindows.org 에서 설치
Ubuntu: 터미널에서 sudo apt install git 입력하면 설치됨
git --version 으로 설치한 깃 버전 확인
Git 환경설정
사용자 정보 등록
git config --global user.name "나의 사용자 이름"
git config --global user.email "내 이메일 주소"
Git의 에디터
Git에서 commit 기록할 때 (merge commit 확인 메시지가 나올 때) 텍스트 에디터 열림
기본값 vi로 설정되있는데 편의성을 위해 nano로 변경하기
git config --global core.editor nano
참고)깃 최초 설정
https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95
SSH 등록
SSH 란?
- Secure shell의 약자
- 보안이 강화된 shell 접속을 뜻함
- CLI 환경에서 다른 PC에 접속하거나 요청할 때 사용
- 비대칭키를 이용해 사용자 인증
- 터미널에서 SSH를 이용해 git clone 할 수 있음
터미널에서 ssh키 생성하기
ssh-keygen
경로 ~/.ssh/ 에 두 파일 id_rsa 와 id_rsa.pub 생성
id rsa.pub는 공개해도 되는 공개키(public key)
id_rsa는 공개되면 안되고 보관하고 있어야 하는 키(private key, secret key)
public key를 github에 등록하기
터미널에 cat ~/.ssh/id_rsa.pub 입력하고 출력된 공개키 복사
깃허브 → 우측 상단에 프로필 클릭 → Settings → 왼쪽에서 SSH and GPG keys 선택 → New SSH Key 클릭
→ title 작성하고 Key 박스에 붙여넣기 → Add SSH key → 깃허브 계정 비번 입력
여기까지 마쳐야 git clone이 정상적으로 된다.
CLI 사용을 위한 인증 방법
OAuth (Device Authorization) 인증 방법 이용
GitHub CLI 설치
☞ macOS는 homebrew 설치 후 명령어 brew install gh 입력
gh auth login 명령어를 통해 로그인 시도
아래 항목들 선택 후 엔터키
What accout do you want to log into? ☞ GitHub.com
What is your preferred protocol for Git Operations? ☞ HTTPS
Authenticate Git with your GitHub credentials? ☞ Yes
How would you like to authenticate GitHub CLI? ☞ Login with a web browser
잘못 선택한 경우 Ctrl + C (^ + C) 를 눌러 중단할 수 있음
Login with a web browser 옵션 선택하면 one-time code 화면에 나옴
코드 복사 → Enter 키 → Device Activation 창에 코드 입력 → 인증 완료!
Git repository workflow
Fork
깃허브에서 다른 계정의 Remote Repository를 내 Remote Repository로 가지고 오기 (Fork)
Fork 버튼 클릭
git clone
터미널에서 작업을 원하는 폴더 내에서 git clone [repository 주소]
내 컴퓨터(Local Repository)로 가져와짐
git status
gjit status 명령어로 현재 staging area와 untracked files 목록에 어떤 것들이 있는지 확인
수정된 파일은 modified라고 되어있음
충돌 시 어떤 파일이 충돌했는지 확인 가능
git add
git status로 출력한 화면에서 modified(변경된 상태) 이지만 changes not staged 인 파일은 git add 명령어로 staging area에 올려줌
git add [파일이름]
git add . ☞ 폴더 내의 모든 파일 한 번에 staging area로 올림
Staging area 란? Repository에 올라가기 전에 commit 하기 위해 거치는 단계
Staging are에 올린 후 파일을 수정하면? modified 된 파일을 git add 명령어로 다시 Staging area에 올려줘야 함
git restore
Local Repository에서 작업한 내용을 모두 취소하고 clone 받았던 상태로 되돌리는 명령어
commit 되지 않은 Local Repository의 변경 사항을 폐기
git restore [파일이름]
git commit
git add 로 staging area에 올라간 파일은 commit 가능
commit 할 때 옵션 -m 을 통해 간단한 메모 가능 (날짜, 변경자, 버전 변경 기록 등)
git commit -m '메시지'
충돌 후 merge 한 commit을 자동으로 올릴 때 명령어 git commit 입력함
좋은 commit 메시지를 작성하기 위해 참고할만한 링크
https://cbea.ms/git-commit/
git reset
아직 Remote Repository에 올라가지 않은 commit을 취소하는 명령어
git reset HEAD^ / git reset HEAD~1 : 가장 최신의 commit을 취소
HEAD : 현재 branch를 가리키는 포인터, 현재 branch에 마지막 commit의 스냅샷
git reset --hard 와 git reset --soft 의 차이
hard는 Staging area까지 비우기 때문에 신중하게 써야함!
git reset 더 알아보기
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0
git push
Local Repository에 저장되어 있는 commit 기록들을 내 Remote Repository에 업로드
git push [저장소명] [브랜치명]
git log
현재까지 commit 된 내역들을 터미널 창에서 확인하는 명령어
q 입력하면 종료됨
Pull Request
내 Remote Repository에 Push 해놓은 변경 사항에 대해서 함께 작업하는 다른 사람들에게 알리는 것
줄여서 PR이라고 함
Push 한 후에 내 Remote Repository에 가면 Pull Request 할 수 있는 버튼 생김
git init
내 컴퓨터에 존재하는 디렉토리를 Git의 관리하에 들어가게 만들어주는 명령어
Git Repository로 변환
새로운 Repository를 초기화 할 때도 사용
git remote
현재 저장소의 모든 리모트 저장소를 조회
git remote add [저장소 이름] [Remote Repository 주소]
☞ Local Repository를 Remote Repository에 연결, 다른 사람의 Remote Repository와도 연결 가능
git remote -v
☞ 현재 Local Repository와 연결된 모든 Remote Repository 목록 확인
git pull
git pull [저장소명] [브랜치명]
Remote Repository에 있는 작업내용을 불러옴
받아온 내용은 자동 병합(merge) 됨
충돌
동시에 같은 부분을 변경하고 push 하면 충돌이 발생할 수 있음 → 보통은 자동 병합(merge)되지만 실패하는 경우도 있음
터미널에 Merge conflict가 발생해서 Automatic merge에 실패했다고 메시지 뜸
충돌한 파일을 수정 완료 했다면 stagining area에 파일 추가
충돌 해결후 staging area에 올리면 자동으로 commit 메시지가 생성됨 (그대로 사용하거나 수정 가능)
Remote Repository에 다시 업로드