Git & GitHub

rang-dev·2020년 6월 3일
0

Preview: What you will learn 학습

1. git/ GitHub 이란? VCS(Version Control System)이란?

  • git: Version Control System중 하나, 로컬에서 사용하게 됨
  • github: 여러 개발자가 개발을 함께 하게될 때 중앙 서버 역할을 함, 기준이 되는 저장소(repository)

2. repository 생성 + 관련 명령어(git init, git add remote, git remote -v)

  • $ git remote add <name> <url>: <url>에 repository url을 넣고 해당 repository의 이름을 <name>으로 설정함

  • -v 옵션으로 단축이름(name)과 URL을 함께 볼 수 있다.

3. local repository / remote repository

  • local repository: 내 컴퓨터에서 내가 직접 사용하고 있는 저장소
  • remote repository: github에서 만든 저장소

4. git clone vs. git pull 개념 및 차이점

  • git clone: 처음 다운받을 때만 사용함
  • git pull: 이미 다운 받은 것의 변동사항을 내려받음(병합)
    다른 브랜치에서 병합을 하고 싶을때는 git merge를 한 후 git add를 해준다.

5. branch의 개념 + 관련 명령어(branch 생성, branch 이동, branch 제거)

기존 파일에서 수정이 발생하면 branch를 새로 만들어서 작업하게되며 브랜치 이름은 feature_[NAME]과 같이 만드는 것을 권장한다.

git checkout: 브랜치간 이동

6. git staging 설명 + 관련 명령어(add, commit, push)


변동사항을 add하면 stage 상태가 되는데 staging이란 commit이 되기 전의 상태를 의미한다(변경사항 확정전). commit을 하게되면 HEAD로서 최종 확정본이 된다.

7. conflict는 왜 발생하는가? 어떻게 해결하는가?

merge를 할 때 서로의 branch에서 같은 부분을 변경했을때 발생한다. 충돌이 일어난 부분은 일일이 확인해서 파일을 직접 수정해야한다.

[참고]
https://rogerdudler.github.io/git-guide/index.ko.html
https://stackoverflow.com/c/wecode/questions/299
https://velog.io/@devzunky/series/Git


실습내용

  • git 시작하기
    • 새로운 directory 만들고 git init하기

git init을 하게되면 .git이라는 숨겨진 폴더가 생성되며 이것이 생김으로써 git을 사용하여 변경사항을 추적하고 관리할 수 있게 된다.

  • git clone으로 respository에 있는 내용 다운받기

wecode에서 초대한 respository의 url을 클론했더니 해당 repository가 다운로드 되었다.

  • git branch로 branch 생성하기

처음에 오류가 났던 이유는 내가 만든 폴더 안에서 branch를 생성하려고 했었기 때문이었다. 내가 다운로드 했었던 폴더로 들어가서 branch를 생성해야 했다.

  • git branch로 branch 목록 보기

*은 현재 접속해있는 branch를 의미한다.

  • git checkout으로 branch 이동하기

checkout 뒤에 이동하고 싶은 branch이름을 적으면 이동 가능하다.

  • 파일 생성(변경내역 발생)하고 add(staging)하기

bhl.md라는 파일을 생성하고 git status를 해보니 add되지 않은 새로운 변경사항이 빨간색으로 나타났다.

git add .(.은 변경이 발생한 모든 파일을 포함한다는 뜻)로 add를 하고 git status를 다시 해보니 staging이 되어 초록색으로 변했다.]

  • git checkout으로 로컬 변경내용 되돌리기

add한 후에 다시 해당 파일을 수정하면 변경사항이 추가된다. 만약 제대로 변경했다면 git add로 다시 staging해주면 되지만 잘못 수정한경우라면 git checkout -- [FILE_NAME]으로 수정하면 된다. 이 명령을 수행하면 파일이 수정하기 전으로 돌아간다.

  • git commit으로 커밋하기

git commit -m "message"로 커밋을 하면 push될 준비가 완료된다. 아직 remote repository에는 올라가지 않았다.

  • git remote -v로 origin 확인하기

우리는 기존 원격 저장소를 clone(복제)했었기 때문에 origin이 clone한 저장소로 설정되어 있지만 만약 그렇지 않은 경우라면 remote repository의 주소를 git에게 알려주어야 한다: git remote add origin <원격 서버 주소>

  • git push로 remote repository에 파일 올리기

feature/bhl branch에서 커밋한 내용을 origin의 remote repository에 올린다는 의미이다.

  • master에서 변경사항 업데이트하기

팀원들이 각자 push한 파일들이 remote repository로 업데이트 되었다. 이 사항들을 받아오려면 다시 master로 checkout하여 pull을 해와야한다.

pull을 한뒤 ls를 해보니 local repository가 remote repository의 최신 상태로 업데이트 된 것을 확인할 수 있다.

Merge

이제는 원래 있던 README.md파일을 바꾸고 수정한 내용을 병합(merge)해야한다.

다른 내용을 수행하기 때문에 brach를 새로 생성해주었다.(업데이트가 완료되면 branch를 바꿔주는 것이 좋다고한다.)

방식은 아까와 동일하게 변경 내역을 origin에 push해주었다. pull request는 github로 가서 직접 해야한다.(pull request를 하는 이유는 master branch를 관리하는 쪽이 request를 승낙하고 merge를 진행할 수 있기 때문이다.)

pull request를 날렸을때 발생한 문제는(pull reqeust를 승낙한 상황) 다른 팀원들도 나와 동일한 파일을 수정해서 push했다는 것이다. 파일의 동일한 부분을 서로 변경한 경우에는 conflict(충돌)이 발생하여 merge(변경된 내용이 적용)가 진행되지 않는다.

  • conflict 해결하기

conflic가 발생한 후 master를 pull해보면 충돌이 발생한 내용을 확인할 수 있다. README.md에 병합 충돌이 발생했다고하니 해당 파일을 확인해보면 =========로 구분되어 어떤 부분이 충돌했는지 확인할 수 있다.

충돌된 부분을 수정하고 다시 저장한뒤 add, commit, push를 진행하고 pull request를 하면 충돌되는 부분이 사라졌기 때문에 수정한 내용으로 merge가 된다.

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글