본문 바로가기

QA 업무

[CI/CD] [git&github] 8.1 원격 저장소와 상호 작용하기

8장

이 장에서 배울 명령어

git clone : 원격 저장소를 복제하기

git remote : 원격 저장소를 추가, 조회, 삭제하기

git push : 원격 저장소에 밀어주기

git fetch : 원격 저장소를 일단 가져만 오기

git pull : 원격 저장소를 가져와서 합치기

git 명령 --help : 매뉴얼 페이지 보기

 

8.1 원격 저장소와 상호 작용하기

8.1.1 git clone : 원격 저장소를 복제하기

원격 저장소를 클론하는 명령 : git clone<원격 저장소> 

 

1. 원격 저장소 링크에 접속

 url : https://github.com/kangtegong/collaboration

 

GitHub - kangtegong/collaboration: 『모두의 깃&깃허브』 (길벗) 실습 저장소

『모두의 깃&깃허브』 (길벗) 실습 저장소. Contribute to kangtegong/collaboration development by creating an account on GitHub.

github.com

 

2. code 클릭한 다음 원격 저장소 경로를 복사

원격 저장소 경로 복사

3. 저장소를 클론 받을 위치에서 깃 배시 열기

여기서는 C 드라이브 밑에 있음

마우스 우클릭 하여 Open Git Bash here 클릭

4. 원격 저장소를 클론하기

원격 저장소를 클론하는 명령은 git clone <원격 저장소> 임

git clone 입력하고 복사한 경로 붙여넣기

Cloning into 'collaboration'...
The authenticity of host 'github.com (20.200.245.247)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

=> 라고 나옴;;

by chatGPT : 위 메시지는 사용자가 git clone 명령을 사용해 GitHub에서 리포지토리를 복제하려고 할 때 발생한 상황을 보여줍니다. 

The authenticity of host 'github.com (20.200.245.247)' can't be established.

  • Git이 github.com 호스트의 신뢰성을 확인할 수 없다는 경고 메시지입니다. 이는 사용자의 PC가 GitHub의 서버에 처음 연결할 때 SSH 키가 로컬에 저장되어 있지 않기 때문

Are you sure you want to continue connecting (yes/no/[fingerprint])?

  • 사용자가 이 서버를 신뢰할지 묻는 메시지입니다. yes를 입력하면 서버의 공개 키가 로컬 머신의 ~/.ssh/known_hosts 파일에 저장되고, 이후 동일한 서버에 다시 연결할 때 경고 없이 인증이 진행됩니다.

git remote : 원격 저장소를 추가, 조회, 삭제하기

git remote 는 원격 저장소를 추가하고, 조회하고, 삭제할 수 있는 명령

 

8.2.2 git remote : 원격 저장소를 추가, 조회, 삭제하기

git remote : 원격 저장소를 추가하고, 조회하고, 삭제할 수 있는 명령

new 버튼 클릭하여 repositories 생성
생성된 원격 저장소
로컬에 sinamon_zzang 폴더 만듦
git init 명령으로 로컬 저장소를 만듦

 

현재 상황

로컬 저장소 sinamon_zzang 은 원격 저장소 sinamon_zzang 의 존재를 알지 못함

따라서 로컬 저장소는 원격 저장소와 상호 작용할 수 없음

상호 작용하려면 원격 저장소를 로컬 저장소에 추가해야 함

 

원격 저장소의 경로 = 빨간 박스
이 원격 저장소를 origin 이라는 이름으로 로컬 저장소에 추가, 명령어는 git remote add origin <원격 저장소 경로>

또는

빨간 네모 그대로 복붙하도 무방함 (원격 저장소 추가하기)
원격 저장소 이름 목록 검색 git remote 명령으로 확인 가능
git remote -v, git remote --verbose 명령을 입력하면 원격 저장소의 이름과 경로 함께 확인

 

로컬 저장소에 원격 저장소를 추가했기 때문에 이제 로컬 저장소는 운격 저장소와 상호 작용할 수 있게 됨

 

origin 이라는 이름 얼마든지 바꿀 수 있음, 원격 저장소의 이름을 바꾸는 명령은 git remote rename <기존 원격 저장소 이름> <바꿀 원격 저장소 이름>
원격 저장소 changed를 삭제하는 명령, git remote remove changed, git remote 검색했을 때 아무것도 안나오면 성공적으로 삭제된 것임

 

8.1.3 git push : 원격 저장소에 밀어넣기

푸시는 로컬 저장소의 변경 사항을 원격 저장소에 밀어넣는 방법

 

스테이지에 추가하고 first commit 커밋 메세지 확인됨

원격 저장소에는 어떤 커밋도 없고, 로컬 저장소에 하나의 커밋이 추가됨

이 커밋을 원격 저장소에 반영하려면 원격 저장소로 푸시해야 함

 

원격 저장소에 반영하려면 원격 저장소로 푸시해야 하는데 git remote add origin 블라블라 에서 하면 됨
복사 붙여넣기 한 성공적으로 푸시된 모습, 마지막 키 에러 났는데 왜 그런지 모르겠음,,(키 생성 다시 하고 했는데도 저 지경?)

 

키 때문이었음

내가 가입한 깃헙 이메일은 shina_lee@tmax.co.kr 로 아래 블로그 대로 다시 하면 됨 (개같당**)

https://soda-dev.tistory.com/72

 

[Github] git@github.com: Permission denied (publickey). 에러 해결

git push 또는 git pull 할 때 발생하는 에러 git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 새로 ssh key를 만들어줘

soda-dev.tistory.com

 

git remote add origin git@github.com:shinalee/sinamon_zzang.git
# 원격 저장소를 origin 이라는 이름으로 추가하는 명령
git branch -M main
#git branch -M <브랜치명> : 현재 브랜치 이름을 <브랜치명>으로 바꾸는 명령, 즉 이 명령은 현재 브랜치(master)를
#main으로 변경하는 명령(브랜치 이름을 바꾸는 경우 드물다.)
#깃허브에서는 기본 브랜치 이름으 master 브랜치가 아니라 main 브랜치로 지칭
#로컬컬 저장소의 기본 브랜치는 master 이지만 깃허브의 기본 브랜치는 main 이기 때문에 로컬 저장소의 기본 브랜치
#(master)에서 만든 변경 사항을 깃허브의 기본 브랜치(main) 
#로컬의 기본 브랜치에서 만든 변경사항을 깃허브의 기본 브랜치로 푸시하기 위해서 
#브랜치 이름 main으로 변경해야 함
git push -u origin main
#git push -u <원격 저장소 이름> <브랜치 이름> : 원격 저장소 origin으로 로컬 저장소 main 브랜치의 변경사항을 푸시하는 
#-u 옵션은 처음 푸시할 때 한 번만 사용하면 되는데, 이 옵션과 함께 푸시하면 추후 git push, git pull 명령만으로도
#origin의 main 브랜치로 푸시(또는 풀) 할 수 있음

 

 

8.1.4 git fetch : 원격 저장소를 일단 가져만 오기

git log 명령으로 지금까지 로컬 저장소 상황 확인

로컬 저장소의 main 브랜치와 원격 저자오의 main 브랜치 모두 동일하게 커밋 두 개가 쌓여있음

 

해당 에러는 git push 또는 git pull 할 때 발생하는 에러

 

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

 

새로 ssh key를 만들어줘야 함.

 

1. ssh key 생성

ssh-keygen -t rsa -C shina_lee@tmax.co.kr

2. ssh key 저장 위치 지정(엔터 입력 시 기본 저장된 위치에 저장)

3. 비밀번호 지정(엔터해서 넘기기 가능, tmax1234!)

4. ssh key 확인하기

cat ~/.ssh/id_rsa.pub

=> 위 명령어 입력 시 키 값 두세줄 좌라락 나옴, 위 명령어로 나온 키를 github에 등록

5. Settings -> SSH and GPC Keys -> New SSH key -> Key 부분에 위에서 확인한 ssh키 복붙하기

 

 

원격 저장소를 확인하면 로컬 저장소에서 커밋한 내용 확인 가능함

a,txt 확인 가능함
스테이지에 추가하고, 커밋하며 커밋 메세지는 second commit , git push 입력 가능함(-u 옵션과 함께 푸시했기 때문에 단순히 git push 만 입력 가능)
성공적으로 커밋이 원격 저장소에 잘 반영됨

 

8.1.4 git fetch : 원격 저장소를 일단 가져만 오기

git log 명령으로 지금까지의 로컬 저장소 상황을 파악, 세번째 줄 빨간색 보면 로컬 저장소의 main 브랜치와 원격 저장소 main 브랜치에는 모두 동일하게 커밋 쌓여 있음

 

세 번째 커밋을 추가하고, 이를 로컬 저장소로 패치

원격 저장소로 접속한뒤 a.txt 클릭

 

원격 저장소에서 커밋하기

 

원격 저장소에는 세 개 쌓여 있음

이런 상황에서 패치하면?

git fetch / git fetch <원격 저장소 이름>

 

your branch is behind ~~ " 확인됨, 현재 브랜치는 origin/main 브랜치에 비해 커밋 하나가 뒤쳐진다는 의미, origin/main 브랜치는 현재 main 브랜치에 비해 한 커밋 앞서 있다는 의미

 

=> origin/main 브랜치는 현재 main 브랜치에 비해 한 커밋 앞서 있다는 의미

왜?

패치는 원격 저장소의 변경 사항을 origin/main 브랜치로 가져올 뿐 main 브랜치는 변함이 없기 때문

즉, 패치는 원격 저장소의 변경 사항을 일단 가지고 올 뿐 로컬 저장소의 브랜치로 병합하지는 않는다. 

 

6장에서 브랜치 간의 차이 명령어 : git diff, +c 확인됨

 

원격 저장소의 브랜치로 체크아웃

원격 저장소의 origin/main 브랜치로 체크아웃
git checkout FETCH_HEAD 명령으로 체크아웃 가능함, FETCH_HEAD 는 최근에 패치한 브랜치의 최신 커밋을 가리킴
git log로 origin/main 의 커밋 목록을 봄, 깃허브에서추가한 세 번째 커밋 확인

 

패치한 결과를 로컬 저장소의 main 브랜치로 병합

다시 main 브랜치로 체크아웃

 

git checkout main : main 브랜치로 체크아웃, 원격 저장소 origin/main 브랜치를 로컬 저장소의 main 브랜치로 병합

 

a.txt 파일 열어서 깃허브에서 만든 변경 사항 확인

 

8.1.5 git pull : 원격 저장소를 가져와서 합치기

풀은 패치와 병합을 동시에 하는 방식

 

1. 깃허브에서 새로운 커밋 추가

 

커밋 메세지 확인

 

원격 저장소의 변경 사항 풀하기 전에 git log 명령으로 현재 로컬 저장소의 커밋 목록 확인

 

 

원격 저장소의 변경 사항을 풀

git pull or git pull <원격 저장소 이름>

git pull
git log 명령으로 로컬 저장소의 커밋 목록 확인

 

원격 저장소의 변경 사항 풀

git pull or git pull <원격 저장소 이름>

git log 명령으로 로컬 저장소의 커밋 목록 확인 가능, 깃허브에서 추가한 커밋이 main 브랜치에 병합된 것을 확인할 수 있음

 

D 추가됨 확인됨