Git 최대한 쉽게 이해해보기!

Doyoon Lee·2020년 7월 29일
1
post-custom-banner

Git 은 왜 쓸까?

Git 은 Vesrion Control System 즉 버전을 관리하는 방식이다.
말이 어려운데 그건 어떤 걸까?

모두가 파일 관리를 할 때 업데이트를 하거나 수정한 후에 계속 다른이름으로 저장해본 경험이 있을것이다.

하지만 그렇게 되면 컴퓨터에 파일도 계속 많아지고... 클라우드나 컴퓨터에 여기저기 흩어져있는 파일들. 이름도 다 다르고, 뭐가 최신인지...

특히나 그게 코드라면? 정리를 해놓지 않으면 어떤 코드가 뭘하던 코드일지 어떤 상태인지 정말 헷갈릴 것이다. 일일이 그때마다 코드를 읽어보기엔 코드가 시간낭비도 그런 시간낭비가 없을것!

바로 그걸 해결해주기 위해 등장한게 Git 이다.
Git 은 커밋을 통해 코드를 다양한 버전으로 관리할 수 있게 도와준다.
커밋은 본인의 코드에 수정사항이 생겼을 때 어떤 내용을 구현했거나 고쳤는지, 코드를 기록과 함께 저장하는 것에 가깝다.

터미널에 Git을 깔고 사용하게 되면,
필요할 때 다른 버전의 파일을 열듯이 코드를 열어서 볼 수 있게 자기가 원하는 특정 시점에서 저장한다.

내가 뭔가 새로운 것을 시도해보고 싶어서 코드를 다 고쳐야하는데 이전 코드가 망가질까 무섭다면 그때가 바로 커밋, 푸시로 파일을 저장해놓기 좋은 때이다.


GitHub(깃허브) 는 그럼 뭐지?

깃허브 이름은 들어봤는데.. 개발자들 커뮤니티 뭐 그런거 아니야?
라고 개발을 본격적으로 배우기 시작했을때까지 그렇게 생각했다.
물론 틀린건 아니였다. 그런데 알고보니 깃허브는 위의 속성을 가진 Git을 저장해주는 똑똑한 클라우드 같은 곳이었다.

깃허브는 Git을 올릴 수 있는 리모트 저장소(remote repository)를 제공한다.

개발자들은 특별한 문화를 갖고있는데 본인의 코드를 판매하거나 꽁꽁 싸매고 있는 대신, 오픈소스로 공유해서 많은 사람들이 보고 가져다 쓸 수 있게 하는 문화이다.

많은 개발자들이 그 곳에 Git으로 관리하는 자신의 코드를 올려서 공개한다. 그렇게 다양한 코드를 보고 공유하면서 개발자들이 서로 구경하고 얘기를 나누면서 깃허브에 모이다보니 그렇게 커뮤니티 같은 기능도 하게된 것이지 않을까?

또한 Git을 사용하면 로컬 저장소(실제 컴퓨터 하드웨어에 저장되는 것)와 깃허브의 리모트 저장소를 쉽게 연결해서 사용할 수 있다.

아래의 명령어 부분에서 보겠지만,
자신의 commit을 push 를 하는게 그렇게 리모트 저장소에 올리는 행위이다.


브랜치란?

대략적인 개념은 나중에 정리할 것이지만 일단은 브랜치를 "하나의 커밋과 그 부모 커밋들을 포함하는 작업 내역"이라고 기억해보자.

브랜치는 버전관리를 도와주는 핵심 역할을 한다.
우리가 파일을 저장할 때 시간순으로 저장하는 것만 하고 싶은게 아닐수도 있다.

예를 들면
시계 기능을 가진 버전 A의 파일을 만들었다. 그 시계에 알람 기능을 추가하고 싶어서 알람 기능이 추가된 B라는 새로운 파일을 만들었다. 그런데 B에서 그 시계가 가진 알람 기능에서 사용할 수 있는 소리도 바꾸고 싶고 시계 모양도 바꾸고 싶다. 비슷한 알람 기능 내에서 바꾸는 것이기 때문에 이런 경우에 파일 C를 만드는것보다 파일 B-2 이런식으로 만들어도 되지 않을까?

이런 경우에 나라면 사실 A를 가만히 냅두고 B를 만들때 한번 파일을 분리하고, B-2를 만들 때 또 한번 가지치기를 할 것 같다.

이렇게 대략적으로 깃에 대해서 알아봤다.
아래에서는 git을 관리하는 단축키만 정리해보겠다.

git init

프로젝트를 git repository 로 만들기
(최초의 프로젝트에 저장소 생성)

ls -al

repository 보기
(어떤 위치에 내가 깃으로 관리하는 폴더가 있나?)

git add

커밋하기 이전에 Stage 단계로 만들기.

Stage 단계가 왜 필요하지?
커밋을 한 후에는 소소한 수정을 하고 다시 커밋하기 귀찮을 수 있기 때문에 그 이전 단계로 커밋하기 전에 중간저장을 하면서 다시 본다.

git status

현재 상태를 보여주는 명령어
현재 상태가 staged 인지 modified인지..
수정된 파일이 뭐고 새로생긴 파일은 뭔지 같은 내용을 보여준다.

git diff

modified 상태에서만 작동한다.
이 명령어를 사용하면 위처럼 수정된 라인과 수정한 라인을 비교해 볼 수 있다.(color 옵션은 꼭 키자.)
수정 상태를 보여준다.

git commit

커밋하기 (변동사항을 그 시점에 심어준다.)

git push

커밋을 한 후에 그걸 리모트 저장소에 올리기.

git log

커밋 히스토리를 보여준다.

git rm

원하는 파일을 git repository 에서 삭제한다.

git mv

원하는 파일을 git repository 상에서 이동시킨다.

git branch

현재 있는 위치에서 브랜치를 생성한다.

git checkout

git checkout [브랜치명]
브랜치를 다룰때 이용하는 명령어. 위와 같이 쓰면 해당 브랜치로 이동할 수 있다.

git push

git push origin master
이렇게 쓰면 마스터 브랜치를 origin(아까 연결한 리퍼지토리)에다가 푸쉬하겠다는 명령어이다. 커밋을 아무리 해도 결국 로컬일 뿐이고 push를 안하면 깃헙에 올라가지 않는다. (PUSH 단계)

하나의 파일을 커밋하고 리모트 리퍼지토리에 올리는것까지 해보기.

  1. 터미널로 새파일 만들기

  2. 이동하는 명령어 (내가 만든 폴더 찾아들어가기)

    cd (change directory)

    cd documents 이렇게 하면 일단 다큐먼트로 간다.

    cd Git 해서 또 들어간다.

  3. git init 해당 폴더에 깃 관리를 명시해주기.
    내가 이 폴더를 깃으로 관리하겠다.

  4. touch [README.md]
    명령어를 통해 README.md 파일을 생성한다.

  5. vi [README.md](http://readme.md) vi (기본 텍스트 편집기)로 README.md 파일을 연다. 만약 해당 파일이 없으면, 그걸 만들어버린다.

  6. i vi 가 켜진 상태에서 i 키를 누르면 Insert 창이 나온다.

  7. esc 누르면 그 Insert 상태에서 나간다.

  8. :wq 입력하면 내가 쓴 내용을 저장하고 나간다.

  9. git add . (STAGING 단계)
    git 에서 . 은 모든걸 다 선택한다. 이런 의미다.
    모든 변경사항을 저장할거라고 스테이징한다.

  10. git status (COMMIT 단계)
    내가 뭘 변경했는지 본다. 지금 상태를 확인한다.
    modified 인지 staged 인지 committed인지 나온다.

  11. git commit 누가 언제 뭘했냐 변동사항을 그 시점에 심어주는것.

  12. git commit -m "수정내용"
    m은 message 를 남긴다는 뜻이다. 따옴표안에 수정내용을 적는다.

  13. git log 남긴 커밋들을 시간대별로 쭉 확인한다.

  14. git log에서 나가려면 q

  15. git remote add origin
    어느 위치에다가 넣을건지 알려주는 명령어 리모트 리퍼지토리와
    로컬 리퍼지토리를 연결해주겠다. 그리고 그걸 origin 이라는 이름으로 하겠다.

  16. git remote -v 연결이 잘 되었는지 보는 커맨드

  17. git push origin master (PUSH 단계)
    마스터 브랜치를 origin(아까 연결한 리퍼지토리)에다가 푸쉬하겠다. 커밋을 아무리 해도 결국 로컬일 뿐이고 push를 안하면 깃헙에 올라가지 않는다.

post-custom-banner

0개의 댓글