[VCS] git & github 1

1. git을 쓰는 이유

코드를 짤 때는 파일 변경내역을 보존하고 관리하는 과정이 필요하다.
그럴때 git을 사용한다.
git을 사용하면 파일에 대해 복사본을 만들지 않고도 깔끔하게 버전 관리가 가능하다.

컴퓨터에서 git을 처음사용한다면 위 코드를 터미널에 차례대로 입력하면 되는데,
지금 누가 git을 사용하는지 구분하기 위한 간단한 아이디 등록같은 절차이다.

git config --global user.email "홍길동@naver.com"
git config --global user.name "홍길동"

2. git add & commit

코드짜다가 실수해서 2일 전으로 돌아가고 싶으면 어쩌나?
파일 저장만 주구장창 했다면 돌아갈 수는 없다.

해결방법이 2가지가 있는데

  • 매일매일 손수 파일 복사본을 만들어주기
  • git을 쓰기

바보가 아니라면 git을 고를 것이다.

git의 commit 기능을 쓰면 파일의 현재 상태를 매일매일 기록해둘 수 있다.
정확히 말하면 파일의 스냅샷을 저장한다.

일단 작업 폴더에서 git을 이용하고 싶다면?

작업 폴더 파일에서 터미널을 열어 git init 부터 입력하고 시작하면 된다.
이제 부터 git이 파일 생성, 코드 작성등을 추적하기 시작한다.

파일을 생성하고 코드를 작성했다면 git을 이용해서 "이 파일 현재 상태를 기록해줘~"라고 부탁하면 되는데

git add 파일명
git commit -m '아무메세지'

차례로 터미널에 입력하면 된다.

이러면 이제 한참 뒤에도 이 파일상태 그대로 되돌리거나 그럴 수 있고 나중에 누가 개같이 코드 짜놨는지 확인도 가능하다.
예로부터 조선은 기록을 중요하게 여겼기 때문에 코드짜다가 중요한 순간순간에 기록하는 습관을 기르는 것이 중요하다.

staging area & repository

버전만들 땐 git add, git commit 차례로 하면 된다고 했다.

그림으로 나타내면 이런 식이다.

여기서 가운데 부분을 staging area,
파일버전이 저장되는 곳을 repository라고 한다.

staging area는 commit을 하기전에 commit할 파일들을 골라놓는 곳이다.

그리고 staging area에 파일 넣는 행위를 staging이라고 한다.
git add명령어를 사용해서 staging할 수 있다.

repository는 commit된 파일의 버전들을 모아놓는 곳이다.

repository의 실체를 구경하고 싶으면 작업폴더 안에 숨겨져 있는 .git 폴더를 열어보면 된다.

다른 명령어들

git add 파일명1 파일명2

이렇게 하면 여러 파일을 동시에 스테이징 할 수 있다.

git add .

작업 폴더의 모든 파일을 전부 스테이징하고 싶으면 git add . 하면 된다.

git status

요즘 젊은이들은 인생이 힘들고 복잡할 때 "상태창!!"을 외치는데 git도 마찬가지로 힘들고 복잡할 때 git status를 입력하면 된다.
지금 변경된 파일, 스테이징된 파일 이런걸 쭉 알려준다.
지금 뭐하는지 까먹었을 때도 자주 입력하게 된다.

git resotre --staged 파일명

스테이징된 파일을 취소하고 싶으면 이거 입력하면 된다.
저기서 파일명 대신 점찍으면 전부 내려준다.

git commit 0m 'msg'

메세지에는 코드에 무슨 기능 추가했는지 이런거 적으면 된다.

git log --all --oneline
git log --all --oneline --graph

commit 기록을 한 눈에 파악하고 싶으면 git log 명령어를 입력해라.
--graph 옵션을 넣으면 그래프로 그려준다.
입력후엔 vim 에디터가 켜져서 j,k로 위아래 스크롤이 가능하고 q로 종료할 수 있다.

Q. 얼마나 자주 commit하는게 좋음?

A. 컨트롤 s누르는 것 처럼 5초마다 습관적으로 할 필요는 없고
간단한 기능을 하나 추가할 때마다 commit하면 된다.

웹개발시 회원가입 기능을 만든다고 하면

  • 회원가입 폼 레이아웃을 만들면 commit하고
  • 입력한 이메일이 맞는지 검증하는 기능을 만들었으면 commit하고
  • 서버에 전송하는 기능만들었으면 commit하고

대충 이렇게 작은 작업하나 마쳤으면 commit하는게 좋다
물론 3개 다 만들고 commit하는 사람도 있다.

3. git add, commit, diff 쉽게 하는 법 (vsc)

요즘은 터미널에서 직접 git add하는게 개 뻘짓일 수도 있다.
웬만한 에디터들 보면 git 기능이 내장되어 있어서
터미널 킬 필요없이 편리하게 add, commit이 가능하다.

vsc의 경우에 왼쪽 git 처럼 생긴 메뉴 들어가보면
지금 어떤 파일이 변경되고 추가되었는지 쭉 알려준다.

+누르면 add한거랑 같고
체크마크 누르면 commit한거랑 똑같다.

파일이 많고 복잡하면 이거 쓰는게 더 나을 수도 있다.

git diff로 차이점 출력해줄 수 있음

commit 하기 전에 이전과 현재 코드가 어떤 차이가 있는지 알고 싶나?
그러면 git diff 명령어를 쓰면 된다.
바로전 commit과의 차이점을 비교해준다.

그럼 현재 파일이 최근 commit과 어떤 부분이 달라졌는지 알려준다.
(근데 Vim 에디터가 오픈되어서 스크롤은 j, k / 종료는 q 연타해야 한다)

하지만 터미널의 한계로 차이점 보기가 힘들고 설정 안만지면
쓸데없이 엔터키나 스페이스바 변동사항도 다 알려주기 때문에
보통은 git diff를 쌩으로 사용하진 않는다.

몇개만 알아보자.

git diff 커밋id

최근 commit과 비교하는게 아니라 과거의 특정 commit과 현재 파일을 비교하고 싶으면 커밋id를 명시해주면 된다.

git diff 커밋id1 커밋id2

과거의 특정 commit 2개 간의 차이점 비교도 ㄱㄴ

하지만 git diff tool 사용하면 조금 더 보기좋다

git difftool

입력하면 현재 파일과 최근 commit의 차이점을 비교해준다.

git difftool 커밋id

입력하면 현재 파일과 특정 commit의 차이점을 비교해준다.

git difftool 커밋id1 커밋id2

입력하면.. 대충 눈치가 있는 사람이라면 알 것이다.

하지만 요즘 에디터들이 잘 되어있는데 뭐하러 터미널에서 git difftool 입력하나?
vsc의 경우 extension 메뉴에서 git 관련 부가 기능 설치 아무거나 해주면 더 편리하게 git diff할 수 있다.

Q. git은 자고로 터미널로 조작해야지 요즘 신입들은 편한 것만 찾고 말이야 쯧쯧

A. 본인이 편한거 쓰는게 젤 좋습니다.

git의 branch 만들기

커밋하면서 계속 코드짜다보면 갑자기 새로운 기능을 추가하거나 그래야하는 경우가 있다.
그럴 때는 원본파일에 코드를 추가하고 커밋해도 되겠지만
혹시나 잘못해서 지금까지 짰던 프로그램이 망가지거나 그러면 어떻게하죠? 라는 걱정이 생길 것이다.
그럴 걱정 없이 안전하게 새로운 기능을 추가하고 싶으면 프로젝트의 복사본을 만들어서 거기에 먼저 개발하는 것이 좋다.

git안에서는 branch 기능을 이용해서 복사본을 쉽게 만들 수 있다.
branch는 프로젝트 복사본이다.

쇼핑몰을 만들고 있는데 새로운 기능이 필요하다

예를 들어 지금 작업 폴더에서 쇼핑몰 만드는 코드를 짜고 있다고 해보자
근데 갑자기 쿠폰기능을 추가하고 싶다.
근데 위험하고 복잡할 것 같아서 원래 있던 소스코드를 직접 수정하는게 아니라
프로젝트 사본을 만들어서 거기다가 먼저 개발을 하고 싶은거다.
그러면 branch를 하나 만들면 된다.

git brach 브랜치이름

이러면 프로젝트 사본이 하나 만들어진다.
git brach coupon이라고 작명해보겠다.

git switch 브랜치이름
예를 들어 방금 만든 coupon 브랜치로 이동하고 싶으면
git switch coupon 하면된다.

  • 옛날엔 "git checkout 브랜치명" 이라고 입력했다.
  • 다시 메인 브랜치로 되돌아가고 싶으면 git switch main하면 된다. 설정에 따라 main or master
  • 어떤 브랜치에 와있는지 까먹었으면 "상태창!!"을 외치자

coupon 브랜치로 이동했으면 거기서 개발하고 commit을 맘대로 할 수 있다.

커밋 몇번하다보면 다음같이 만들어진다.
coupon branch에서 작업한 내용은 원래 브랜치인 main에서 아무런 영향이 없다.

Q. git log하면 나오는 HEAD는 뭔가요?

A. 님 위치임

branch 합치기

그래서 branch에 짰던 코드가 맘에들면 어떻게 하냐?
원본 코드가 있는 master (or main)브랜치에 합치면 된다

브랜치를 합치는걸 전문용어로 merge라고 한다.
그럼 브랜치에서 개발했던 내용을 main 브랜치에 더해줄 수 있다.

git switch main
git merge 브랜치명

merge하고 싶으면
1. main 브랜치로 이동
2. git merge 브랜치명 입력하면 합쳐진다.

예를 들어 git merge coupon 이러면 coupon 브랜치의 코드들은 main 브랜치에 합쳐진다.

근데 합칠 때 주의사항이 있는데

▲ 근데 합칠 때 주의사항이 있는데

main 브랜치와 coupon 브랜치에서 같은 파일, 같은 줄을 수정했을 경우
merge conflict가 발생한다.

이 경우 에디터로 해당 파일을 열어보면 충돌사항이 적혀있는 것을 확인할 수 있다.

▲ 둘 중 어떤 코드를 적용할지 고르면 되는데

<<<<< / >>>>> / ===== 이런 쓸데없는 것들은 다 지우고 원하는 코드만 남기면 된다.
어떤 코드를 남길지 결정했으면

git add 파일명
git commit -m "메세지"

입력하면 새로운 commit을 생성해주면 merge conflict 해결 + 브랜치 합치기 완료이다.

협업시 branch 유용함

여러 개발자들과 협업할 때도 branch 만들어서 하면 편리하다.
같은 프로그램을 만드는데 10명이서 동시에 똑같은 소스코드를 수정하고 저장해버리면 난리가 날거다.
그래서 기능을 하나 추가하고 싶으면
1. 우선 brach로 프로젝트 사본하나 만들어서 거기서 먼저 개발을 조진다.
2. 그리고 테스트 해봤는데 잘된다면 main branch에 합친다.

그렇게 개발하면 더 안정적으로 개발이 ㄱㄴ


이 포스트는 코딩애플의 매우 쉽게 알려주는 git & github 강의를 참고했습니다.

코딩애플 너무 재밌어 항상 새로워
돈만 많으면 전 강의 지를텐데..

profile
DevOps 엔지니어 지망생

0개의 댓글