Git & Github 기초중 기초

박상영·2020년 6월 3일
0
  • Git / Github는 무엇일까?

git 과 github는 VCS(Version Control System) 인데
version은 소스코드(sourcecode) 파일의 version을 의미한다.
소스코드(sourcecode) 의 변경사항 내역을 관리하는 시스템 이라는 의미가 VCS 입니다. 소스코드 란, 코드 파일들을 의미합니다velog.py, velog.js 같은 파일들을 말합니다.

  • VCS의 기능
    1 . 코드 변경 사항 내역 기록 및 관리
    2 . 필요시 이전 상태로 rollback(되돌리기)
    3 . 팀단위 개발시 체계적이고 효과적인 협업
  • Git / Github를 사용하는 이유

코드의 변경 사항 내역들을 기록하고 관리하기 위해서 사용합니다. 하지만 왜 그 많은 변경 사항들을 기록하고 관리하려고 사용을 하는지 에 대한 의문이 들꺼라 생각합니다.
사람도 실수를 하는데 그 사람이 코딩하는 코드파일이 문제가 없을꺼라 보장할수없습니다. 중간중간 문제가 생길것이고, 또 제일 최신코드에 문제가 생길수도있습니다. 그러면 문제가 생겼을때 이전 코드로 되돌리고 싶은데 이미 최신코드만 가지고있는 상태에선 그럴수가없습니다.
또한 코드 버전 관리는 팀단위로 개발을 할때 엄청난 효율을 발생시킵니다. 혼자가 아닌 여러명이서 동시에 개발을 진행할때 누가 어떠한 코드를 언제 어떻게 수정했는지 등의 내역들을 확인할수있고 관리 할수있다는것이 굉장히 중요한 사항입니다. 종종 동일한 파일에 여러 개발자가 코드를 수정하는 경우가 있음으로 각 수정 사항들을 체계적으로 관리할 수 있어야 합니다.

  • Git / Github 는 같지않다.

Git 은 git을 사용하여 자신의 로컬에서 소스코드를 관리(add, commit, merge, 등) 을 하는 작업을 합니다.

Github는 github에서는 다른사람과 공유 나 백업을 할수있는 웹사이트이고, git을 사용하여 만들어진 소스코드를 올리고 그 소스코드를 저장하는 하나의 중앙서버라 생각하면된다.

git 을 사용하여 VCS를 할때 파일은 3개의 상태중 하나의 상태에 존재하게 된다.

  • Committed
    수정된 사항들이 git에 저장이 된 상태 "committed" 라 합니다. git에 저장하는 행위를 "commit"이라 합니다.
  • Modified
    Modified file은 의미 그대로 수정된 file 이지만, 아직 "committed" 되지 않은 상태의 file 입니다.
  • Staged
    Staged file 은 Modified file 에서 한단계 더 나아가 곧 commit 된다 라는 mark 를 해놓은 상태입니다. 즉, modified 와 committed의 사이 중간 상태 라고 생각하면된다.
    staged 의 상태가 존재하는 이유는, commit 을 하기전에 중간 상태를 저장할 수 있도록 하기 위함이다. 바로 commit 을 하면 commit history 에 남고, 혹시 추가 수정사항이 있거나 다시 rollback 해야 할때 까다롭기 때문에 commit 전에 중간 상태에 저장할 수 있도록 하기위함입니다.
    즉 commit은 해당 소스코드가 완전히 완료되었을때 하는 것이기 때문에, 아직 완료하하지 않았거나, 변경 혹은 추가사항이 있을수있으므로 staging을 사용하는것이다.
  • git 을 사용하기위한 명령어

1 . git init

새로운 repository 를 생성하기 위해 사용합니다.
올리고 싶은 폴더나 새로운 폴더를 하나 만들고, 그 안의 폴더로 터미널에서 이동하여
git init 를 입력하면 그 폴더는 새로운 하나의 git 저장소가 만들어집니다.

2 . git clone

클론의 의미는 복제 라는 의미입니다. 즉, repository 를 복제할때 사용합니다.
git clone /로컬/저장소/경로
원격 서버의 저장소를 복제할수도있습니다.
git clone 사용자명@호스트:/원격/저장소/경로

3. git add , git commit

올리고 싶은 파일 또는 변경된 파일을 추가 하는 방법입니다. git add 를 사용하는 순간 "staged" 에 속해있게 됩니다. 즉 add를 사용하기전엔 "modified" 이지만 사용하고나선 "staged" 중간단계에 오게됩니다.
이 해당 파일을 "commit" 하려면
git commit -m "해당파일의 설명"
이렇게 commit을 하게되면 "Committed" 상태로 오게됩니다. 하지만 아직 원격 저장소에는 반영이 되지 않았습니다.

4. git push , git remote

commit 한 내용은 아직 로컬 저장소 안에 머물러 있습니다. 이 변경 내용을 원격 서버(github)로 보내보려 합니다 git push origin master master는 하나의 branch 입니다.

만약 기존에 있던 원격 저장소를 clone 한 것이 아니라면, 원격서버의 주소를 git에 입력해줘야합니다. git remote add origin <원격 서버 주소> 이러한 커맨드를 입력하였으면, 이제 변경한 내용은 원격서버로 올라갔을겁니다.

  • branch(가지)

branch 는 안전하게 격리된 상태에서 무언가를 만들때 사용할수있습니다.
git add 를 하셨다면 master 가지가 먼저 선택이되어있습니다.
하지만 바로 master에 올리기전에 다른 저장소에 저장한다음 쓰고 완벽한걸 master에 올리고싶다면
branch를 이용하면됩니다. 먼저 git checkout -b <(branch이름)> 의 커맨드를 사용하시면 이름을 지정해준 branch가 생성되고 그 branch로 이동하게됩니다. git branch -d <(branch이름)> 은 지정해준 branch를 삭제하는 커맨드 입니다. 다시 master branch로 돌아가고싶으면 git checkout master 커맨드를 치면 다시 master branch로 이동하게됩니다. 여기서 특이한건 checkout의 의미 인데요, "내가 사용할 branch 를 지정한다" 라는 의미 입니다.
또한 branch를 만들고나서 바로 사람들이 접근할순없습니다. git push origin <branch> 를 커맨드하여 원격 저장소로 push 해줘야 비로소 완성됐다 할수있습니다.

  • Merge(병합)

로컬 저장소에 있는것을 원격 저장소에 맞춰 갱신하려면 git pull 커맨드를 입력하면 원격저장소의 변경 내용이 로컬 작업 디렉토리에 받아지고(fetch) 병합(Merge) 된다.

다른 branch 에 있는 변경 내용을 현재 branch(ex, master branch) 에 Merge 하려면 git merge <branch> 커맨드를 입력하면된다.

pull 이든 merge 든 git은 자동으로 변경 내용을 병합하려고 시도한다. 하지만, 항상 병합이 성공하는게 아니라 가끔 충돌(conflicts)이 일어나기도 한다. 충돌이 발생하면, git이 알려주는 파일의 conflicts 부분을 직접 수정하여 병합이 가능하도록 만들수 있다. conflicts가 해결됐다면, git add <file_name> 커맨드로 아까 conflicts 가 났던 파일을 병합하라고 지시한다.
변경 내용을 Merge 하기전에 어떠한 부분이 어떻게 바뀌었는지 git diff <원래brach> <비교대상branch> 커맨드를 통해 알아볼수도있다.

profile
backend

0개의 댓글