본 게시글은 모두의 git,github(저자 : 강민철)의 내용을 개인적으로 정리하는 글입니다.


깃허브는 아래의 두 가지 쓰임새가 있다.

  • 개발자의 SNS
  • 개발자 간 협업을 가능케 하는 원격 저장소 호스팅 서비스

Git은 우리의 컴퓨터 속에만 존재하는 저장소이다.

이는 로컬에 있는 저장소, 즉 로컬 저장소라고 부른다.

반면 원격 저장소는 우리들의 컴퓨터 속에만 있는 저장소가 아닌, 인터넷 세상 어딘가에 있는 다른 컴퓨터 속의 저장소를 의미한다.

깃허브의 원격 저장소는 깃허브가 관리하는 컴퓨터 속의 저장소를 의미한다.

원격 저장소를 통해 백업과 협업에 이점이 있다.

 

원격 저장소와의 네 가지 상호작용

원격 저장소와의 상호 작용은 크게 네 가지이다.

  • clone : 원격 저장소 복제
  • push : 원격 저장소 밀어넣기
  • fetch : 원격 저장소를 merge 않고 가져오기
  • pull : 원격 저장소를 가져오고 merge

 

소스트리와 깃허브 연동하기

먼저 소스트리와 깃허브가 SSH 통신할 수 있도록 연동해야 한다.

SSH(Secure Shell)는 안전하게 정보를 주고받을 수 있는 통신 방법이다.

SSH 통신하려면 먼저 key 두 개를 생성해야 한다.

  • public key : 공개 키는 자신과 깃허브 둘 다 서로 가지고 있는 공개된 키를 말한다.
  • private key : 개인 키는 자신만 가지고 있어야 하는 개인적인 키를 말한다.

 

SSH 키는 ssh-keygen이라는 간단한 명령으로 생성할 수 있다.

git bash를 연다.

ssh-keygen을 입력하면 개인 키(id_rsa)를 저장할 경로를 선택하라는 문구가 나온다.

이미 SSH 키가 등록되어 있다면 아래의 명령어로 삭제하면 된다.
rm -rf .ssh
id_rsa와 id_ed의 차이
아래의 사진과 같이 나는 id_ed파일이다.
그래서 GPT에게 물어보았다.

 

이후 패스워드를 입력해 준다. (두 번)

 

그러면 SSH 키가 생성되었다.

개인키는 id_rsa라는 파일이고, 공개 키는 id_ras.pub 파일이다.

소스트리에서 도구 - 옵션을 누른다.

 

SSH 클라이언트 설정에서 클라이언트 키를 OpenSSH로 바꾼다.

 

이후 SSH 키 추가를 해준다.

SSH키 경로는 위에 git bash에 적혀있다.

이 과정에서 cmd 창이 뜰 수 있는데 그때는 gitbash에서 설정한 암호를 입력하면 된다.

 

이후 깃허브 홈페이지에 들어가서 settings - access탭의 ssh and gpg keys를 선택한다.

 

new ssh key를 선택하고

 

이후 SSH 이름을 적고 key 항목에

공개 키 파일을 열어서 거기에 적혀있는 것을 죄다 복사해서 붙여 넣는다.

 

 

이러면 깃허브에게 공개키를 알려준 것이다.

 

다시 소스트리로 돌아가서 Remote 버튼을 눌러서 계정을 추가한다.

 

아래와 같은 화면이 나오면 아래로 스크롤해서

 

녹색 버튼을 누른다.

 

인증 성공이라는 표시가 뜨면 성공적으로 연동된 것이다.

 

이후 새로고침을 눌러서 원격 저장소를 선택하면 된다.

여기까지 순조롭게 완료되었다면 소스트리와 깃허브가 연동된 것이다.

 

clone

깃허브상에 존재하는 원격 저장소를 우리의 컴퓨터, 즉 로컬로 복사하여 가져와야 한다.

 

가져오고 싶은 깃허브 원격 저장소 주소를 복사한다.

 

이후 소스트리에 클론을 한다.

 

물론 자신의 원격 저장소를 클론 할 수도 있다.


브랜치 이름에 주목하자

깃에서 관리하는 기본 브랜치는 master 브랜치인데, main 브랜치는 master 브랜치와 같다.

깃허브에서는 기본 브랜치를 main 브랜치라고 부른다.

origin/HEAD 는 원격 저장소의 HEAD, origin/main 는 원격 저장소의 기본 브랜치를 말한다.

main은 원격 저장소를 로컬 저장소로 가져옴으로써 로컬 저장소의 기본 브랜치를 뜻하고,
orign/main은 원격 저장소의 기본 브랜치를 뜻하고,
orign/HEAD은 원격 저장소의 HEAD(작업 위치)를 뜻한다.

 

origin은 원격 저장소에 붙은 이름일 뿐이므로 언제든 수정할 수 있다.

 

push

push는 원격 저장소에 로컬 저장소의 변경 사항을 밀어 넣는 것을 의미한다.

작업 디렉터리에서 작업을 한 뒤 커밋을 하고

원격 저장소와 로컬 저장소를 동일하게 만들려면 변경 사항을 원격 저장소에 푸시해야 한다.

 

이렇게 푸시를 하고 나면 커밋이 추가되고 깃허브에도 커밋 수가 늘게 된다.

 

fetch

원격 저장소를 여러 개발자가 협업하여 개발하고 있는 상황이라면 다른 개발자가 언제든 새로운 변경 사항을 추가할 수 있기 때문에 해당 저장소는 시시각각 변할 수 있다.

다른 개발자가 푸시한 내용을 로컬로 가져오고 싶을 때 패치를 사용할 수 있다.

즉, 원격 저장소의 변경 사항을 로컬로 가져오고 싶을 때 패치를 사용한다.

 

소스트리에서 패치를 클릭

 

확인버튼 클릭

패치가 완료되면 깃허브에서 작성한 최근 커밋을 볼 수 있다.

로컬의 main 브랜치는 이전의 커밋을 가리키고, origin/main 브랜치는 최신 커밋을 가리킨다.

즉, 패치해도 원격 저장소의 내용이 로컬 저장소에 병합되지 않는다.

 

pull

fatch가 단순히 가져오는 것이라면 pull은 fatch와 merge가 같이 일어나는 것이다.

 

소스트리에서 Pull을 클릭한다.

 

이렇게 하면 원격 저장소의 변경 사항이 즉시 로컬로 병합된다.

 

pull request

자신이 소유하지 않은 원격 저장소에 특정한 방법으로 푸시를 할 수 있지만 일반적으로는 불가능하다.

원격 저장소에 누구나 푸시할 수 있다면 여러 문제가 발생할 수 있다.

 

 

푸시 권한이 없는 원격 저장소에 코드를 푸시하려면 풀 리퀘스트를 통해 할 수 있다.

원격 저장소가 내 변경사항을 풀(pull) 하도록 요청(request)하는 것이다.

풀 리퀘스트는 아래와 같은 단계로 이뤄진다.

  1. 기여하려는 저장소를 본인 계정으로 포크 하기
  2. 포크 한 저장소를 클론 하기
  3. 브랜치 생성 후 생성한 브랜치에서 작업하기
  4. 작업한 브랜치 푸시하기
  5. 풀 리퀘스트 보내기

 

풀 리퀘스트의 첫 번째 단계는 기여하려는 저장소를 본인 계정으로 포크 하는 것이다.

포크(fork)는 원격 저장소를 본인의 계정으로 복제하는 것이다.

 

포크를 하면 본인의 계정으로 해당 저장소가 복제된다.

소유하지 않은 원격 저장소에는 푸시할 수 없지만, 본인 계정으로 포크 한 원격 저장소에는 푸시할 수 있다.

 

이후 포크한 저장소를 클론 한다.

추가적으로 클론 뒤에 브랜치를 생성하고 해당 브랜치에서 작업을 해야 한다.

작업을 완료했다면 커밋을 하고, 브랜치를 푸시한다.

 

마지막으로 풀 리퀘스트를 보내야 한다.

깃허브로 돌아와서 포크 한 저장소로 들어가면 Compare & full request가 생성되었다.

이후 커밋 메시지와 풀 리퀘스트로 보낼 작업 내용을 확인할 수 있다.

확인했다면 Create pull request를 클릭하면 요청이 완료된다.

 

Collaborator로 추가하여 푸시 권한 주기
원격 저장소 소유자가 다른 사람을 Collaborator로 추가한 경우에는 소유하지 않은 계정의 원격 저장소에 풀리퀘스트 없이 푸시할 수 있다.

Collaborator 추가할 계정을 입력하면 요청이 된다. 요청을 받은 계정이 이를 승인하면 해당 계정은 풀리퀘스트 없이 푸시할 수 있다.