GitHub 기본

이현지·2021년 2월 2일
0

GitHub란?

  • Git을 기반으로 하여 프로젝트를 호스팅 해주는 웹 서비스

  • 분산시스템: 원격저장소와 로컬저장소

    Git은 분산시스템으로 저장소가 두 곳에 존재
    (1)서버 등 네트워크에 있는 "원격저장소"
    (2)자신의 컴퓨터에 있는 "로컬저장소"
    기본적으로 원격저장소에 있는 파일을 로컬저장소로 가져와 작업을 수행하고, 그 결과를 원격저장소에 저장(반영)하는 것이다.

Github Flow

Fork -> Clone -> Commit -> Fetch & Merge -> Push -> Pull Request

1. Fork

  • Fork 기능은 jQuery 저장소의 지금 상태 그대로를 복사해서 자신의 Github계정(remote, not local)에 jQuery 저장소를 생성한다
  • 이 Fork는 Git 기능이 아니라 GitHub가 Git 기능을 추상화해서 제공하는 기능이므로 git fork같은 명령어는 없다. 즉, git clone을 GitHub 내에서 구현했다고 생각하면 된다
  • Fork된 저장소는 jQuery의 원래 저장소와 완전히 동일한(주소만 다른) 자신만의 저장소이다. 분산저장소이기 때문에 저장소가 또 하나 생긴 것이고 다른 사람이 jQuery 원래 저장소 대신 내 저장소를 똑같이 Fork 받아서 수정하는 것도 당연히 가능하다. 각 저장소는 모두 권한외에는 모두 동일한 기능을 가진다

2. Clone

  • 원격에서는 소스를 수정할 수 없으므로 이 저장소를 작업할 로컬 머신에 내려받아야 하는데 이 과정이 Clone이다.
  • Fork가 Github내에서 저장소를 복사한 것이라면 Clone은 원격 저장소를 로컬로 복사한 것이다.
  • git clone ~ 실행하면 로컬에 jquery 폴더가 생기고 jquery 폴더안에 git 저장소를 내려받은 것을 볼 수 있다.

3. Commit

  • Git commit은 현재의 로컬 git 저장소에 소스를 적용해서 히스토리를 남긴 것으로 SVN의 commit과 다르게 원격저장소에 적용되는 것은 아니다.
  • Git에서는 브랜치를 생성하는 것을 권장하고 있고 일반적으로 master 브랜치에서 다른 브랜치를 생성해서 작업하는 것이 일반적이다.

4. Fetch & Merge

  • 로컬에서 작업을 하다보면 원격저장소에 변경사항이 생긴다
  • clone 이후에 원격저장소에 누군가 소스를 push하면 이 변경사항을 다시 로컬로 가져와야 하는데 이 과정을 fetch라고 하며, 원격저장소의 변경사항을 로컬로 가져온 뒤에 로컬의 브랜치에 merge하는 과정으로 이루어진다
  • 이 과정은 git pull이라는 명령어를 통해서 이루어 질 수 있으나, 일반적으로는 git fetch후에 git merge로 나누어서 작업하는 것을 보통 더 권장한다 (conflict에 유연한 대처가 가능함)

5. Push

  • 로컬에서 수정작업을 완료했다면 자신의 원격저장소에 수정한 커밋 들을 Push해야 한다. 이 과정은 로컬저장소에 커밋한 내역을 원격저장소에 적용하는 과정이다.
  • jQuery의 원본저장소와 자신의 원격저장소의 master 브랜치를 계속 싱크하려면 jquery 원본저장소를 fetch받아서 master에 머지한 뒤에 자신의 원격 저장소의 master로 푸시하면 된다. 이 과정을 계속 반복하면 항상 두 master 브랜치의 동기화를 할 수 있다

6. Pull Request

  • 이제 원격에 올린 변경사항을 원본 jQuery 저장소에 적용하기 위해서 Pull Request를 보내야 한다. Pull Request도 git 자체에 있는 기능은 아니고 Github에서 제공하는 기능이라고 할 수 있다.
  • Pull Request를 사용하는 이유는 jQuery 원본저장소에는 쓰기권한이 없기 때문에 수정한 내용을 Pull Request로 보내면 jQuery 저장소의 커미터들이 내용을 확인한뒤에 승인을 하면 Pull Request의 내용이 jQuery 원본저장소에 merge가 된다 (물론 승인하지 않고 거절할 수도 있음)

[출처]
https://blog.outsider.ne.kr/865
https://tagilog.tistory.com/377
대학강의자료

주관적으로 정리한 자료입니다.
틀린 사항이 있으면 말씀해주세요.

profile
Archive

0개의 댓글