CodeStates 45th

[Section 1] Git 기초

jeonniu 2023. 4. 18. 22:57

Git이란?

파일을 관리해주는 프로그램

 

- 파일의 변경사항을 추적, 사용자가 각 파일의 버전을 관리할 수 있게 도와줌

- 파일을 백업할 수 있게 해줌

- 협업자들과 함께 파일을 공유, 각자의 작업물을 취합할 수 있게 해줌

 

 

Git으로 할 수 있는 것 …

(1) 버전 관리

ex) 초안, 수정1, 수정2, 최종, 진짜최종 수정, 완성본 ...

 

우리가 작성해야 하는 문서의 양이 기하급수적으로 많아진다면, 각 문서별로 어떤 내용이 어떻게 수정되었는지 기억하기란 어렵다.

Git은 이러한 문제를 해결해 준다. Git이 관리하는 디렉토리에 어떤 문서를 만들면 Git으로 그 문서의 버전을 관리할 수 있다.

이후 해당 문서를 수정할 때마다 어떤 부분이 어떻게 수정되었는지 Git이 상세히 기록해 준다. 이전의 버전으로 돌아가야 할 필요가 생기면 Git이 기록해준 내용들을 확인하고 돌아가고자 하는 이전 버전을 선택해 손쉽게 버전을 되돌릴 수 있다.

 

(2) 백업하기

실무나 프로젝트를 진행하면서 백업을 자주 해야하는 일이 생기는데,  Git은 우리의 작업물을 온라인 원격 저장소에 백업할 수 있도록 백업 기능을 제공한다.

 

(3) 협업하기

Git은 여러 작업자가 하나의 작업물의 다른 부분을 각자 작업할 때, 작업물을 공유하고 취합할 수 있게 도와준다.

 

 

1. 4명이 각자 애국가 한 절씩 작성

A: 1절, B: 2절, C: 3절, D: 4절

 

2. A가 자신의 작업물을 원격 저장소에 업로드

 

3. B가 A의 작업물을 원격 저장소에서 다운로드

3-1. 이 때 Git에 A가 작업한  1절과 B가 작성한 2절을 취합

3-2. 취합 잘 되었는지 확인 후, 1~2절 취합물을 원격 저장소에 업로드 

 

4. C가 1~2절 취합물을 원격 저장소에서 다운로드

4-1. 이 때 Git이 1~2절 취합물을 C가 작업한 3절과 취합

4-2. 취합 잘 되어는지 확인 후 , 1~3절 취합물을 원격 저장소에 업로드

 

5. D가 1~3절 취합물을 원격 저장소에서 다운로드

5-1. 이때 Git이 1~3절 취합물을 D가 작업한 4절과 취합

5-2. 취합 잘 되었는지 확인 후, 1~4절 취합물을 원격 저장소에 업로드

 

6. 애국가 1~4절이 원격 저장소에 업로드 되었으므로 모든 팀원들은 완성물을 공유할 수 있다.

 

Git과 Github

Git 자체는 일반적으로 로컬에서 버전을 관리해주는 프로그램을 의미한다.

그러나 백업 기능 또는 현업을 위한 기능을 활용하기 위해서는 온라인 원격 저장소가 필요한데,

이러한 원격 저장소 기능을 제공해주는 서비스 중 하나가 Github이다.

 

Git은 로컬에서 버전을 관리해주는 프로그램이며, Guthub는 Git을 클라우드 방식으로 구현한 서비스이다.

 

 

 

Git 환경 설정

Git을 설치하면 가장 먼저 사용자 이름과 이메일 주소를 설정한다.

설정에 기록된 사용자 이름과 메일 주소를 앞으로 진행할 Git 커밋 내역에 기록한다.

 

 

$ git config --global user.name "나의 사용자 이름"
$ git config --global user.email "내 이메일 주소"

 

  •  -global 옵션으로 설정 시, 사용자 홈에 저장되므로 git 설정 시 처음에 단 한번만 입력해도 된다. 나중에 깃허브의 사용자 이름이나 이메일을 변경한다면 이 명령어를 다시 입력해야 한다.
  • 만약 여러 프로젝트를 진행하고 있어서 프로젝트마다 다른 사용자 이름과 이메일 주소를 사용하고 싶다면  -global  옵션을 빼고 명령을 실행할 수 있다.

 

 

SSH 등록 

SSH란 Secure Shell의 줄임말로 "보안이 강화된 shell 접속"을 뜻한다.

CLI 환경에서 다른 PC에 접속 혹은 요청할 때 사용하며, 비대칭 키를 이용하여 사용자를 인증한다.

 

 

SSH 키 생성

- 비대칭키로 구성되며 두 개의 키가 서로 대칭되지 않은 상태로 존재한다.

- 아래 코드 입력 후 ssh 키 페어 생성

 

ssh-keygen

 

  • 경로 ~/.ssh./ 에 두 파일 id_rsaid_rsa.pub를 생성한다.
  • 두 파일은 ssh 키 페어라고 한다.
  • id_rsa.pub 는 공개키(Public Key), id_rsa는 개인키(Private Key) 또는 비밀키(Secret Key)라고 한다.

 

 

공개키(Public Key) 복사

cat ~/.ssh/id_rsa.pub

 

ssh 키 페어를 생성하였으므로, 생성된 키 중에 공개키를 복사해서 깃허브에 등록한다.

 

 

프로필 - Settings - SSH and GPG keys - New SSH key - Key 입력 - Add SSH key

 

 

SSH  공개키가 정상 등록되었는지 확인하기 위해서는, 리포지토리를 clone 해보자.

 

(1) Github 리포지토리 들어가서 Code - clone - SSH 복사

(2) 아래 명령어를 프롬프트에 입력 후, 정상적으로 동작하는지 확인

git clone "복사한 SSH"

(3) ls 를 입력해 clone 한 리포지토리 폴더가 생성된 것을 확인했으면 성공

 

 

Git workflow (Solo)

Git의 각 영역은 크게 온라인과 로컬로 나뉜다.

  • 온라인: Remote repository (원격 저장소)
  • 로컬: Work space(작업 공간), Staging area(스테이징 영역), Local repository(지역 저장소)

 

1. 실습 디렉토리 및 파일 생성

touch hello_git.txt

nano hello_git.txt

cat hello_git.txt

 

 

2. Git으로 파일 관리 시작하기

git init

 

 

* 기본 브랜치 이름 변경하기

git config --global init.defaultBranch 변경할_브랜치_이름
  • git init 입력 후, 생성되는 기본 브랜치의 이름을 다른 것으로 바꾸려면 위의 명령어를 입력

 

git branch -m 변경할_브랜치_이름
  • 현재 위치하는 브랜치 이름을 바꾸려면 위의 명령어를 입력

 

git config --global init.defaultBranch main
git branch -m main

 

 

* .git 디렉토리

 

  • git init 입력하면 .git 디렉토리가 생성된다.
  • ls -l 명령어를 입력하면 .git 디렉토리를 확인할 수 없다.
  • ls -al 명령어를 입력하면 .git 디렉토리를 확인할 수 있다.

 

* Work space

  • Work space는 Git의 세가지 영역 중 하나, Working tree 또는 Work tree 라고 한다. 우리가 눈으로 볼 수 있는 디렉토리 자체를 말한다.
  • Git은 Work space를 자동으로 스캔한다. 
  • Work space는 git init를 입력한 직후, 다른 어떠한 Git명령어도 입력하지 않은 상태의 파일들이 존재하는 영역

 

 

git status
git add .
git add 파일_이름

 

 

3. 파일의 상태

 

Tracked 상태인 파일들은 수정되었을 때 Git이 파일의 변경 내용을 감지하지만,

Untracked 상태인 파일들은 파일의 내용을 변경하여도 Git이 파일의 내용 변경을 감지하지 못한다.

 

Untracked 상태의 파일은 Commit이라는 과정을 거치면 Tracked 상태로 바뀐다.

 

 

  • Unmodified: 파일의 수정이 Git에 의해 감지되지 않은 상태
  • Modified: 파일의 수정이 Git에 의해 감지된 상태
  • Staged: 파일이 Staging area에 존재하는 상태

 

* Staging area

- Loacl repository에 저장할 파일들이 임시로 대기하는 영역

- Local reposiyory에 파일을 저장하는 것은 단순히 파일을 저장하는 것 이외의 특별한 의미를 가진다.

 

 

4. Staging area로 파일 이동시키기 

- Staging  area로 이동시킬 때에는 git add 파일_이름 명령어를 사용

- git add 를 사용하면 파일이 Staging area로 이동하므로, "파일을 스테이징 한다." 라고 표현한다.

 

 

 

5. 파일을 Local repository에 저장하고 버전을 기록하기

git commit

 

  • git add를 통해 스테이징까지 마쳤다면, 이제 Commit 할 수 있다.
  • Commit이란 Local repository에 파일을 저장하는 행위를 말하며, 파일을 Local repository에 저장함과 동시에 파일의 버전을 기록한다.

 

git commit -m "First commit"

 

 

 

 

6. Commit 내역 확인

git log

 

 

7. 작업물을 Remote repository로 업로드하기 

git push

 

 

8. 원격 저장소 생성

- New 클릭 후 원격 저장소 생성

- 원격 저장소 생성 완료

- Remote repository와 Local repository 연결하기

 

git remote add origin 복사한_원격_저장소_URL

 

잘 연결되었는지 확인

git remote --v

 

 

9. 작업물 업로드

git push origin "브랜치 이름" ex) main

 

 

 

10. Remote repository의 코드를 로컬로 복사해오기

- 복사한 Remote repository의 URL

 

git clone 복사한_URL

 

 

 

Git workflow (Pair)

(1) Git 연결

- Local working directory를 Git의 관리 하에 들어가게 하기

git init

 

 

 

(2) Remote repository의 코드를 로컬로 복사해오기

git clone "Fork할 Repository URL"

 

 

(3) 내 Remote Reposiroy와 연결해서 Remote 상에 코드를 적용

- origin이라는 이름으로 내 Remote Repository응 등록

git remote add origin "내 Repository URL"

 

 

(4) 페어가 내 Remote Repository를 Fork 했으면, 페어의 Remote Repository를 내 Local에 pair 이름으로 등록

git remote add pair "페어의 Repository"

 

 

(5) Remote Repository가 잘 연결되었는지 확인하기

- 연결된 Remote Repository 의 목록과 주소를 확인

git remote --verbose
git remote -v

 

 

(6) 코드 만들고 커밋하기

touch text.txt
nano text.txt

 

- 내 Remote Repository의 Local에 내용 반영하기

- 나의 브런치 이름은 main 

git push origin main

 

 

(7) 스테이징

git add *
git add .
git add (스테이징 할 파일 이름)

 

 

(8) 커밋

git commit -m "메시지"

 

 

(9) 푸쉬

- 나의 브런치 이름은 main 

git push origin main

 

 

 

* 페어가 작업하여 본인의 Remote Repository에 올려놓은 내용을 합치려고 할 때, 페어의 코드를 내 Local로 받아오기

git pull pair main

 

* 나의 Remote Repository에 Local의 내용을 반영하기

git push origin main

 

 

더보기

1. Git 연결

> git init

 

2. 다른 Reposiroy를 내 저장소로 Fork

> git clone "Fork 할 Repository"

 

3. 내 Remote Repository 와 연결해서 Remote 코드 상에 적용 

> git remote add origin "내 Repository URL"

 

4. 페어와 연결

> git remote add pair "pair Repository URL"

* 잘 연결되었는지 확인

> git remtoe -v

 

5. 커밋하기

> git commit -m 'change'

 

6. 푸쉬

> git push origin main

 

7. 페어가 작성한 코드를 내 로컬로 가져오기

> git pull pair main

 

8. 새로운 코드 작성 후 커밋

* 스테이징

> git add . 

* 커밋

> git commit -m '커밋 메시지'

 

9. 다시 푸시

> git push origin main

 

 

*pull: 페어의 Repository를 땡겨오기

*push: 내 Repository를 가지고 오기