Git은 리눅스 창시자 리누스 토발즈가 리눅스의 소스 코드를 관리하기 위해 만들었다.
Git의 장점 : 분산 버전 관리 시스템이 주는 장점, 빠른 응답성, 브랜치 관리의 편리함 등으로 협업뿐만 아니라 개인 작업 시에도 좋다.
0장에서 간단한 CLI 명령어를 통해 Git, GitHub로 버전 관리하는 하나의 사이클을 실습.
고작 8개의 CLI 명령어를 사용하지만 실무에서 사용할 거의 모든 것.
1부에서는 GUI를 통해 0장에서 실습했던 명령어를 그래픽과 함께 원리를 파악하며 다시 실습.
2부에서는 CLI를 통해 어떤 환경에서도 빠르고 편안하게 Git을 사용할 수 있도록 훈련.
Q&A : https://github.com/Cat-Hanbit/README
ex) 이전 데이터를 불러와서 이어서 게임하기, Cmd + z : 되돌리기
이렇게 자신이 원하는 시점(버전)으로 이동할 수 있게 해 주는 것이 버전 관리, 이를 도와주는 툴이 버전 관리 시스템
개인 PC에서 혼자 사용하고 변경하는 프로그램이라면 버전 관리 시스템이 없어도 버전 관리가 가능,
하지만 다수가 함께 만드는 프로그램에서는 어떻게 할까?
가정)
팀 프로젝트에서 사용할 공용 폴더를 만들고 소스 코드를 업로드 : 00 버전 -> 팀원 A가 00 버전을 수정하여 01 버전으로 저장 -> 팀원 B가 01 버전을 수정해서 02 버전으로 저장.
이렇게 되면 버전 관리가 가능하지만 팀원 B와 C가 동시에 01 버전을 수정해서 02 버전으로 저장한다면?
팀 프로젝트에 참여하는 인원이 많을수록, 프로젝트 기간이 길수록 어느 파일이 최종 버전인지 확인할 길이 막막하다.
그래서 협업 프로젝트에서는 버전 관리가 필수인 것.
Git은 소스 코드 버전 사이를 오가는 시간 여행 이상의 기능을 제공.
Git은 데이터를 저장할 공간만 있다면 어디서나 사용 가능 -> 많은 개발자가 Git으로 협업하는 이유
이렇게 Git으로 관리하는 프로젝트를 올려둘 수 있는 대표적인 Git 호스팅 사이트 중 하나가 GitHub.
Git으로 관리하는 프로젝트를 올릴 수 있는 사이트는 GitLab, BitBucket 등 다양하다.
GitHub에 소스 코드를 올려 두면 시간, 공간의 제약 없이 협업 가능.
프로젝트를 공개 저장소로 만들면 전 세계 개발자와 협업 가능.
이렇게 누구든지 기여할 수 있는 공개 저장소 프로젝트를 오픈 소스라고 한다.
GitHub 접속 -> Sign Up -> Enter your email -> Continue -> Create a password -> Continue -> Enter a Username -> Continue -> y -> Continue -> Create account -> 이메일 수신 코드 복사 -> Enter Code -> Skip personalization
GitHub는 보안을 위해 사이트 외부에서 로그인할 때는 비밀번호 대신 Token을 사용한다.
필요에 따라 여러개 만들 수 있는 비밀번호라고 생각하면 된다.
GitHub 접속 -> Settings -> Developer settings -> Personal access tokens -> Tokens (classic) -> Generate new token -> Generate new token (classic) -> Note에 Token을 구별할 수 있는 내용을 적는다.(처음이면 'My first access token') -> Expiration -> No expiration(Token이 파기되지 않도록 만료일 없음), Token 사용이 익숙해지면 보안을 위해 만료일을 설정한다. -> Select scopes는 Token으로 로그인했을 때 접근 권한을 설정할 수 있는 옵션(ex. Notifications만 체크하면 코드 푸시나 저장소 삭제는 못하고 알람만 볼 수 있다. -> Generate Token -> 복사해서 메모장에 저장, 이후 학습할 CLI와 GUI에서 모두 사용
< 실습 과정 >
Google에 'git 다운로드' 검색
-> Downloads - Git 접속 -> Download for Mac
-> homebrew -> Install Homebrew 복사
-> Cmd + Space -> terminal 검색
-> 붙여넣기, Mac password 입력
-> 설치 후 brew help 명령어를 통해 설치가 됐는 지 확인
-> M1 Mac 사용자는 "zsh: command not found: brew" 라는 오류가 발생할 수 있다.
-> "eval $(/opt/homebrew/bin/brew shellenv)" 라는 명령어로 해결
-> brew install git 명령어로 Git을 설치
-> git --version 명령어로 버전 확인과 함께 정상적인 설치를 확인
Git과 연결할 로컬 저장소를 만든다.
로컬 저장소는 실제로 Git을 통해 버전 관리가 이뤄질 내 컴퓨터에 있는 폴더이다.
MacOS는 기본앱인 TextEdit(텍스트 편집기)를 사용하여 생성한다.
/Users/chanuk/Git_Study/iTshirt-cat 경로로 폴더 생성
-> [iTshirt-cat] 폴더에 'README' 라는 이름의 텍스트 파일 생성
-> 텍스트 파일 안에 "개발자 티셔츠 쇼핑몰 오픈 소스" 라고 작성 후 저장
-> [iTshirt-cat] 폴더를 우클릭 -> 서비스 -> 폴더에서 새로운 터미널 열기
-> git init 명령 입력 -> "(경로명)/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다" 라는 문구가 나오면 [iTshirt-cat] 폴더에 [.git]이라는 폴더가 생성된 것.
-> [git.] 폴더는 파일 기본 속성이 '숨김'이어서 "Shift + Cmd + ." 단축키로 볼 수 있다.
- [.git] 폴더에는 Git으로 생성한 버전들의 정보와 원격 저장소 주소 등이 들어있다.
- [.git] 폴더 = 로컬 저장소(local repository)
- 일반 프로젝트 폴더에 git init 명령하는 것 = Git 초기화 과정 -> 이 폴더에서 버전 관리 할 수 있게 된 것.
앞서 생성한 'README' 파일을 하나의 버전으로 만들기 = Commit한다
커밋(Commit) : 만들어진 하나의 버전
먼저 버전 관리를 위해 나의 정보를 등록해야 한다, 각 버전을 누가 만들었는지 알아야 협업하기 편하기 때문.
[iTshirt-cat] 폴더를 우클릭 -> 서비스 -> 폴더에서 새로운 터미널 열기 -> 다음 명령어 입력
git config --global user.email "ghkd1330@gmail.com" git config --global user.name "ghkd1330"
- GitHub 계정 정보와 동일하게 입력
버전으로 만들 파일을 선택 : 'README' -> 다음 명령어 입력
git add README.rtf
- Commit에는 상세 설명 작성 가능, 작성하면 파일 생성 이유, 수정 이유, 해당 버전으로 전환도 수월해진다.
다음 명령으로 첫 번째 Commit을 생성git commit -m "사이트 설명 추가"
'README' 파일 내용 수정 : "변경 1" 추가
-> 다음 명령으로 'README' 파일을 다시 추가git add README.rtf
다음 명령어로 다시 Commit 생성
git commit -m "설명 업데이트"
- 다음 메시지가 나오면 Commit 완료
[master a5eb19c] 설명 업데이트 1 file changed, 12 insertions(+), 2 deletions(-)
- "git add RE" 까지만 입력 후 Tab하면 자동 완성
현재 'README.rtf' 파일의 내용은 두 번째 만들었던 '설명 업데이트' Commit이고 텍스트 문서의 내용은
'개발자 티셔츠 쇼핑몰 오픈 소스
변경 1' 이다.
이것을 제일 처음 만든 Commit 버전인 '사이트 설명 추가'로 돌려 보내기
다음 명령으로 지금까지 만든 Commit을 확인
git log
- 노란색 글씨는 Commit의 ID
- 최신 Commit부터 출력된다
첫 번째 Commit ID의 앞 7자리를 안다면 git checkout으로 첫 번째 Commit으로 코드를 되돌린다.
git checkout 542a81a4
다시 최신 Commit으로 돌아가려면 " - " 만 입력하고 ID는 생략 가능하다.
git checkout -
- 다시 'README' 텍스트 파일에는 "변경 1" 이라는 텍스트가 존재하는 최신 Commit으로 돌아왔다.
- 원하는 Commit으로 파일을 되돌리는 것을 "Checkout한다" 라고 한다.
- checkout 명령어로 Commit ID를 지정해서 되돌아가는 명령어는 위험해서 잘 사용하지 않는다.
GitHub에 협업 공간인 Repository를 만들기 = 웹사이트에 공용 폴더를 만드는 것.
원격 저장소 = 레포지토리(Repository)
GitHub 접속 -> 로그인 -> 오른쪽 상단 " + " -> New repository
-> Repository name(원격 저장소 이름) : iTshirt
-> Description(원격 저장소에 대한 간단한 설명) : description test
-> Create repository
- Repository의 주소를 통해 원격 저장소에 접속 가능
이제 GitHub에서 만든 [iTshirt] 원격 저장소 주소를 내 컴퓨터의 [iTshirt-cat] 로컬 저장소에 알려 주고, 로컬 저장소에 만들었던 Commit들을 원격 저장소에 올려보자.
[iTshirt-cat] 폴더에서 Terminal 접속
-> iTshirt Repository 주소와 git remote add origin 명령으로 로컬 저장소에 연결할 Repository 주소를 알려 준다.git remote add origin https://github.com/ghkd1330/iTshirt.git
지금까지 만든 Commit을 저장할 곳인 main이라는 방을 만든다.
"방 = branch" 라고만 이해하고 넘어가기.
git branch -M main
이제 Local 저장소에 있는 Commit들을 git push 명령으로 Repository에 올리기
git push origin main
- "Repository(origin)의 main이라는 방에 내 Commit들을 올려라(push)" 라는 뜻
Username for 'http://github.com': ghkd1330 Password for 'http://ghkd1330@github.com': [Personal Access Token]
- GitHub에서 비밀번호 변경이나 토큰이 파기되면 다음 명령어로 컴퓨터에 저장된 계정 정보(git config)를 업데이트 해야한다.
즉, Remote(Github) Auth 정보 변동이 있으니, Local Auth 정보도 변경을 해주어야 한다.
안그러면 Push할 때 'fatal authentication failed for github' Error가 발생할 수 있다.git config --system --unset credential.helper
GitHub의 Global Variables 확인
# git config 확인 git config --list # git config 설정 git config --global user.name "ghkd1330" git config --global user.email "ghkd1330@gmail.com" # config 삭제 git config --unset --global user.name git config --unset --global user.email
인증 관련 오류가 발생한다면 GitHub에서 PAT(Personal Access Token)을 발행할 떄 권한 옵션들(Scopes)을 체크하지 않았기 때문.
- GitHub의 [iTshirt] Repository에서 확인하면 Commit과 README.rtf 파일이 올라온 것을 확인할 수 있다.
- 우리는 Local 저장소에서 만들었던 Commit들을 Repository에 올렸다 = Push한다
기본 Branch Main, Master
- GitHub에서 New 버튼으로 Project Repository를 생성하면 기본 Branch가 Main으로 생성.
- CLI 환경에서 git init 명령으로 Project를 시작하거나 SourceTree를 이용해서 새로운 Git Project를 생성하면 Master Branch를 기본으로 지정해서 생성된다.
- Git, GitHub에 익숙해지면 Master, Main Branch를 의도대로 생성할 수 있다.
- GitHub 설정에서 기본 Branch를 변경하는 것도 가능.
- 일단은 CLI 환경에서는 Main Branch로 바꾸어 실습 권장.
Repository의 코드와 버전 전체를 Local로 내려받는 것을 Clone이라고 한다.
Repository를 Copy하는 것.
Clone하면 Repository 주소와 이전 버전부터 최신 버전까지 Local에 저장된다.
/Users/chanuk/Git_Study/iTshirt-oct 경로로 폴더 생성
-> [iTshirt-cat] 폴더를 우클릭 -> 서비스 -> 폴더에서 새로운 터미널 열기
-> iTshirt Repository -> Code -> HTTPS 주소 복사
- Download ZIP으로 받으면 Repository와 버전 정보가 제외되니 Clone으로 받아야 한다.
# git clone [Repository web URL] . git clone https://github.com/ghkd1330/iTshirt.git . Username for 'https://github.com': ghkd1330 Password for 'https://ghkd1330@github.com': [Token]
- URL 뒤에 띄어쓰고 마침표를 붙이지 않으면 [iTshirt-oct] 안에 [iTshirt] 라는 쓸모없는 상위폴더가 생성되고 그 안에 'README.rtf'과 [.git] 이 생성된다.
[iTshirt-oct] 의 'README.rtf' 를 수정
# 'README.rtf'를 Commit git add README.rtf # 'README.rtf' 파일의 Commit에 '변경2 추가' 설명 추가 git commit -m "변경2 추가" # Repository에 Push git push origin main Username for 'https://github.com': ghkd1330 Password for 'https://ghkd1330@github.com': [Token]
-> Repository 새로고침 후 '변경2 추가' Commit이 Push됨을 확인
- Commit Log 확인 가능
앞서 [iTshirt-oct] 폴더에서 새로운 Commit을 Push했다.
따라서 [iTshirt-oct] 폴더의 'README.rtf' 에는 '변경 2' Commit이 반영됨.
하지만 [iTshirt-cat] 폴더의 'README.rtf' 에는 '변경 2' Commit이 반영되지 않음.
[iTshirt-cat] Terminal 열기
-> 다음 명령어를 통해 Repository에 새로운 Commit이 있다면 Local로 Pullgit pull origin main Username for 'https://github.com': ghkd1330 Password for 'https://ghkd1330@github.com': [Token]
- 1 file changed = [iTshirt-cat]의 'README.rtf' 파일 1개가 변경됨
- '변경2 추가' Commit의 상태로 Pull
복습
- Git : Version Management Sys
- GitHub : Git으로 관리하는 Project를 올릴 수 있는 호스팅 사이트
- GUI(Graphic User Interface) : 마우스로 클릭해서 사용하는 방식
- CLI(Command Line Interface) : 명령어를 하나씩 입력하는 방식
- Git Bash : CLI로 Git을 사용할 수 있는 환경
- Commit : 버전 관리를 통해 생성된 파일, 혹은 그 행위
- Log : 모든 Commit 확인
- Checkout : HEAD Pointer의 위치를 변경, 다른 Commit으로 이동하는 것
- Local : Git으로 버전 관리하는 나의 오프라인 폴더
- Repository : GitHub에서 협업하는 온라인 폴더
- Push : Local의 Commit을 Repository에 올리는 것
- Pull : Repository의 Commit을 Local에 내려받는 것