[GitHub]GitHub

길현민·2022년 8월 16일
0

Git&GitHub

목록 보기
4/8

Git vs GitHub
Git은 버전 관리 시스템으로, 시간이 지남에 따라 파일의 변경 사항을 추적하는 도구입니다.
GitHub은 Git을 사용하는 프로젝트를 위한 호스팅 서비스입니다.

Using GitHub

Common Workflow: 내 로컬 Repository를 GitHub 에 push 하기
로컬에서 add / commit 한다.
Github 으로 이동 후 새 repository를 생성한다.
나의 로컬 repository 를 GitHub repository 와 연결한다. (remote 추가)
새 remote 를 이용하여 코드를 Push 한다.

repository 생성하기

GitHub repository 를 생성하려면, github.com 으로 이동 후 우측 상단 + 버튼을 누른 뒤 'New repository' 라는 옵션을 선택
repository 를 생성하는 페이지에서 제일 먼저 Repository name 을 설정

repository 에 코드 push 하기

'Create repository' 버튼을 누르게 되면 새로 만든 GitHub repository 의 스타팅 페이지로 이동하게 됩니다.
로컬환경에 이미 Git repository 가 있다면 아래 ...or push an existing repository from the command line 부분에 나와있는 순서대로 진행하면 됩니다.
git remote add origin 명령어는 내 컴퓨터에 있는 로컬 repository 와 방금 만든 GitHub repository 를 연결해줍니다. 쉽게 설명하면, 로컬 Git repository 에게 이름이 origin 이라는 어떤 URL을 알려주는 것과 같습니다. 이름이 꼭 origin 이어야 하지는 않지만 보통 remote 주소가 한개라면 origin 이라고 지어주게 됩니다.
git push 명령어는 로컬 Git repository 의 코드를 GitHub repository 로 업로드 해줍니다.

git remote add origin https://github.com/<your-username>/<your-repo-name>.git
git push -u origin master

git push 명령어를 실행하면 GitHub 유저네임과 비밀번호를 입력하라는 prompt 가 뜨게 됩니다.

repository 가 성공적으로 push 되었다면, 전에 만든 GitHub repo 페이지로 가서 새로고침하면 로컬에서 push 한 코드가 해당 remote repository 로 업로드 된 것을 확인할 수 있습니다.

repository 에 변경사항 남기기

로컬 Git repo를 GitHub remote repo 와 연결 후 push 까지 했다고 로컬에서 작업한 내용들이 자동으로 remote 에 반영되는 것은 아닙니다. 그래서 변경사항이 있으면 다시 push 를 해줘야 GitHub repo 가 업데이트 됩니다.

예를 들어,

console.log("안녕하세요");

위와 같이 콘솔로그문을 이미 가지고 있는 js 파일에 추가해주거나, 해당 내용을 담고 있는 새로운 js 파일을 생성해줍니다. 저장 후 커밋을 위해 add 후 커밋메세지를 남겨줍니다.

git add .
git commit -m "Change greeting"

커밋을 한 뒤, 아래 명령어를 입력해서 업데이트 된 로컬 repo를 GitHub repo로 push 해줍니다.

git push origin master

Branching and merging

일반적으로 GitHub repository 의 master 브랜치는 항상 잘 작동하고 안정적인 버전의 코드를 포함하고 있어야 합니다. 하지만, 테스트를 아직 해보지 않았거나, 새로 추가한 기능을 GitHub repo 에 push 하고 싶다면 어떻게 해야할까요?
이럴 때 Branch 가 필요합니다. 브랜치를 사용해서 현재 프로젝트의 코드를 그대로 복제하여 작업 환경을 만들 수 있습니다. 그렇게 된다면, master 브랜치를 건드릴 필요없이 작업환경에서 기능을 추가하거나 테스트를 진행할 수 있게 되는것이죠. 나중에 전부 완료가 된다면, 그 때 master 브랜치와 merge (병합) 해줄 수 있습니다.

GitHub 에 브랜치 push 하기

예를 들어, 아까 생성 한 hello-wecoders 프로젝트에 새로운 파일을 추가하고 싶다면, 우선 아래 명령어를 통해 새로운 브랜치를 생성하고 이동해야 합니다.
git checkout -b feature/greetings
<feature/greetings> 부분을 원하시는 브랜치 이름으로 대체해주세요.
그런 다음, example.js 라는 파일을 만들고, 아래 코드를 삽입해줍니다.
console.log("Hello Wecoders!");
그런 뒤, 우리가 이제 익히 알고있는 커밋 절차를 거쳐 변경사항을 커밋해줍니다.
git add .
git commit -m "Add: greetings"
이제 push를 통해 feature/greetings 브랜치를 remote 로 올려줄 차례입니다.
git push origin feature/greetings
이렇게하면, GitHub repository 에 내가 방금 push 한 branch가 추가되는 것을 확인할 수 있습니다.

Pull Request (PR) 생성하기

커스텀 브랜치를 push 하고 master 브랜치에 적용될 준비가 되었다면, Pull Request (PR) 라는 것을 통해 프로젝트 오너 (혹은 팀 리더) 에게 내가 작업한 브랜치의 작업내용을 master 브랜치에 반영해달라는 요청을 보낼 수 있습니다.
Pull Request 에서는 해당 repository 를 열람할 수 있는 권한이 있는 개발자들이 작업내용에 대한 리뷰를 해주거나, 변경 사항을 확인할 수 있습니다. (master 브랜치로 합쳐지기 전에 확인해야하기 때문에)
해당 링크를 클릭하면, Pull Request 를 생성할 수 있는 페이지로 이동하게 됩니다. 거기서 해당 PR의 제목과 어떤 내용을 담고 있는지 설명하는 Description을 작성할 수 있습니다.
작성을 완료했다면, 하단에 'Create pull request' 버튼을 눌러 마무리합니다.
이때부터는 함께 협업하는 개발자들이 방금 만든 PR을 리뷰, 분석하고 댓글까지 달아줄 수 있습니다.
모든 리뷰 내용이 반영된 후 master 브랜치와 충돌이 발생하지 않았다면, 해당 PR은 master 브랜치로 merge 될 준비가 완료되었습니다.

Conflicts (충돌)

항상 이렇게 순조롭게 merge 까지 진행되면 너무 좋겠지만, merge 하기 전 conflicts (충돌) 가 발생할 수도 있습니다. 충돌은 어떤 파일의 변경사항이 기준이 되는 master 브랜치의 파일과 겹쳐, Git 에서 어떤 버전의 코드를 선택해야하는지 모를 때 발생합니다. 이런 상황에서는, 개발자가 직접 코드를 비교해 충돌을 해결하고 merge 를 마무리 해야합니다.

GitHub 으로부터 변경사항 pull 하기

Pull Request 를 통해 master 브랜치를 업데이트했다면, 이제 로컬 repository 는 GitHub 에 있는 master 와 서로 다른 내용을 가지고 있게 됩니다. 이 때 git pull 명령어를 통해 remote 의 최신화된 코드를 내 로컬 repo 에 반영할 수 있습니다.
우리는 GitHub remote repo 링크에 origin 이라는 이름을 붙여줬었기 때문에 아래 명령어를 통해 GitHub repo 의 master 브랜치 내용을 받아올 수 있습니다.

git pull origin master

Merge

git merge [branch_name]
다른 브랜치의 변경사항을 현재 브랜치에 병합하기 위해 사용합니다. 예를 들어, 현재 브랜치가 master고 feautre_x 브랜치의 변경사항을 병합하려면 아래의 명령을 실행합니다.

$ git merge feature_x
여기서도 conflict가 발생할 수 있으며, pull에서 conflict가 발생했던 경우와 동일하게 해결하고 add - commit - push하면 됩니다.

원격 저장소에서 Pull받기

하나의 원격 저장소에 0개 이상의 로컬 저장소가 있을 수 있습니다. 따라서, 해당 원격 저장소에 변경 사항을 push하는 주체는 다른 사람일 수도 있다는 것입니다. 원격 저장소에 로컬 저장소의 변경 사항을 업로드할 때 push를 썼던 것처럼, 원격 저장소의 변경 사항을 로컬 저장소로 가져오려면 pull을 사용하면 됩니다.

git pull [remote][branch]
$ git pull origin master
해당 명령을 사용하면 원격 저장소에서 데이터를 가져올 뿐만 아니라, 로컬 저장소의 현재 변경 사항들이 자동으로 병합됩니다. git push와 동일하게 remote가 origin, 브랜치가 현재 브랜치라면 이 둘을 생략할 수 있습니다.

$ git pull

Pull에서 충돌 해결하기

자신의 로컬 저장소에서 진행한 변경 이력을 원격 저장소에 push할 당시에, 로컬 저장소가 최신 버전이 아닌 경우(clone 이후 다른 사람이 remote에 push를 진행했을 경우) 자신의 push 요청이 거절됩니다. 이런 경우 병합(merge) 작업을 진행하여 remote에 반영된 다른 사람의 변경 이력을 로컬 저장소에 갱신해야 합니다. 원격 저장소의 변경 사항을 무시하고 자신의 변경 이력을 덮어쓸 수도 있습니다. 아래는 강제 push의 몇가지 예입니다.

$ git push -f
$ git push --force
$ git push origin +<branch_name>
그러나 강제 push를 할 일을 만드는 것은 정말 좋지 않은 일입니다. remote의 변경 이력을 로컬로 merge하는 것이 가장 좋습니다. 그냥 단순히 pull만 하면 됩니다.

$ git pull origin master
문제될 상황이 없다면 git이 알아서 변경 사항을 통합해 줍니다. 여기서 문제 상황은 충돌(conflict)인데, 예를 들어 로컬 저장소에서 README.md라는 파일을 변경했고, 가장 최근 로컬 저장소의 pull 이후 remote의 변경 이력에 README.md의 수정이 포함되어 있다면 충돌이 발생합니다.

🐔참고문헌

위코드

타블로그

https://planbs.tistory.com/entry/Git-Pull%EC%97%90%EC%84%9C-%EC%B6%A9%EB%8F%8C-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0?category=653662

profile
맛집탐방러

0개의 댓글