주먹구구식 Git 사용하기

2023. 2. 9. 02:52멋쟁이 사자처럼 AI 스쿨 8기 - 데이터 분석 트랙/스터디

이번 시간에는... OMGit... Git을 맡게 되었습니다!

Git을 사용하는 방법은 1시간으로도 모자르니,
어떤 내용을 준비해야할까 많은 고민을 하였습니다...

기대하셨던 내용과 많이 다르더라도, 
나름 유용한 정보를 담으려고 노력했으니.. 너그럽게 봐주시면 감사하겠슴니다.

 

+ 이 내용은 주관적인 내용입니다. 필드에서는 필드만의 Git 사용 규칙을 따라주세요!

 


 

이 글의 목표는 Git 사용의 기본 구조와 용어 소개입니다!
+ 개인적으로 가장 많이 사용하는 명령어도 포함되어 있습니다.

 

목차를 먼저 살펴보도록 하겠습니다!

  1. Git이란 무엇일까요?
  2. Git 사용 구조, 흐름은 어떻게 생겼을까요?
  3. 주관적인 Git 사용 방법!

 

자, 바로 시작해보겠습니다!

 


 

Git은 무엇일까요?

 

대부분의 (개발을 하지 않는 + 개발을 막 시작한 등등등) 사람들은 Git을 '코드 저장소'라고 알고 있어요.
자신이 작성한 코드를 GitHub, GitLab 등에 저장하고 공유하는 소프트웨어로 이해하고 있죠.!

물론 틀린 이해는 아닙니다!

 

하지만 구글 드라이브에 파일을 올려서 공유하고 저장하는 것보다,
Git으로 코드를 원격 저장소(GitHub의 Repository 등)에 저장하고 공유하는 과정과 구조가 정말 복잡하게 되어있어요.

그래서 Git을 처음 사용해보고는,
'어? 코드만 저장하는 건데 왜 이렇게 복잡해.'라는 생각을 하기도 합니다.

 

그 이유는 바로, Git의 본질이 버전을 관리하는 소프트웨어이기 때문이에요.
즉, 자신의 코드를 원격 저장소(GitHub의 Repository 등)에 저장하고 공유하는 기능이 주된 Git의 용도가 아니라는 것이죠.!

 


 

Git 사용 구조, 흐름은 어떻게 생겼을까요?

 

Git을 설치하고 프로젝트 폴더에서 init 명령어를 사용하면, 프로젝트 폴더에 .git 폴더가 생성되요.
이제 프로젝트 폴더를 보고 로컬 저장소라고 부르게 됩니다.

GitHub에서 새로운 Repository를 생성하면, 그 Repository를 보고 원격 저장소라고 부르게 됩니다.

그리고 이 두개의 저장소(로컬과 원격)를 오가며, 변경점을 서로 동기화 시키는 것이 큰 구조에요.

 

 

 

좀 더 작은 단위로 나누어서 들어가겠습니다!
+ Git 사용 방법은 다음 목차에 따로 정리했습니다.
+ 여기서는 branch를 생성하지 않는 흐름입니다.

로컬 저장소에서, 코드를 추가/수정/삭제 하는 작업을 해요.

그럼 Git은 몇번째 줄이 어떻게 추가/수정/삭제되었는 지를 모두 추적해요.
(init 명령어를 사용한 순간부터, Git은 로컬 저장소의 모든 변경점-폴더, 파일, 코드 등등-을 추적해요.)

사용자가 직접 저장할 변경점들을 add해줘요.
여기서는 실제로 저장되는 것이 아니라, 저장할 목록(staging)을 만드는 거에요.

모든 작업이 끝나면 저장할 목록(staging)을 확정(commit)해주게 되요.
변경점들을 저장하겠다는 말이에요.

로컬 저장소에서 확정(commit)이 되면, 이제 원격 저장소에 확정된 변경점들을 보내주게 되요(push).

다른 사람이 원격 저장소에 push했다면,
pull로 자신의 로컬 저장소를 원격 저장소의 버전으로 동기화 시킬 수 있어요.

 

정리를 해보겠습니다.

  1. 로컬 저장소의 내용을 수정한다.
  2. 수정된 내용을 저장할 목록(staging)에 add한다.
  3. 저장할 목록(staging)을 commit한다.
  4. push로 원격 저장소를 로컬 저장소의 내용으로 동기화 한다.
  5. pull로 로컬 저장소를 원격 저장소의 내용으로 동기화 한다.

이 5단계가 초간단한 Git의 사용 흐름이에요.

 


 

주관적인 Git 사용 방법!

 

GUI 툴도 좋지만, CLI를 더 선호해요.
뭔가 더 있어보이기도 하고, GUI 툴은 따로 또 실행을 해야하다 보니...

Window에서는 powershell, Mac에서는 terminal을 사용해요.
PyCharm을 쓸 땐 PyCharm에서 제공하는 VCS와 Terminal을 사용해요.
VScode에도 비슷한 GUI가 있어요.!

그래서 이 글에서는 CLI(Command Line Interface) 기준으로 설명을 할 거에요..! 하핳...

여기서 설명할 방식은 Git Flow 방식이에요.

 

Git Flow의 branch를 간단히 설명하자면,

  • master: 원본 코드이자 제품으로 출시한 코드에요.
    가장 기둥이 되는 branch에요.
  • develop: 개발 완료된 기능들을 모아두는 코드에요.
    최초에 develop을 생성할 때, master를 복사해서 만들어요.
    최종 확정(merge)된 feature의 변경점이 모두 적용되어 있어요. 신 버전인거죠.!
  • release: 현재 버전의 코드에요.
    release-1.0.0 등으로 이름을 붙여요.
    release는 develop을 복사해서 만들어요.
    release에서 build를 해서 master와 develop으로 merge해요.
    release에서 build가 끝나면 배포 전 최최최종 테스트를 진행해요.
  • hotfix: 현재 버전에서 긴급한(Critical) 이슈를 수정한 버전의 코드에요.
    hotfix-1.0.1 등으로 이름을 붙여요.
    hotfix는 master를 복사해서 만들어요.
    hotfix에서도 build를 해서 master와 develop으로 merge해요.
    hotfix에서 build가 끝나면 배포 전 빠르게 이슈 수정 확인 테스트를 진행해요.
  • feature: 개발자가 새로운 기능을 추가하기 위한 코드에요.
    feature/기능명 등으로 이름을 붙여요.
    feature는 develop을 복사해서 만들어요.

 

 

 

저는 clone 명령어에 안좋은 기억을 가지고 있어서... clone을 잘 사용하지 않아요...
하지만, clone 명령어는 알아두시면 정말 좋을 것 같아요. 하지만 여기서는 설명하지 않아요. ㅋㅋ ㅋ

 

cd 명령어를 이용해 프로젝트 폴더로 이동해요.

cd /프로젝트폴더경로

 


프로젝트 폴더에서 git을 생성해요.

git init

 

GitHub에서 Repository를 생성한 후, 주소를 복사해와요. 이미 있는 Repository라면 주소만 복사해와요.
다시 Terminal로 돌아와서 원격 저장소를 설정해줘요.

git remote add origin 복사해온주소

저는 원격 저장소의 별칭을 origin으로 사용하지만, origin말고 다른 별칭을 사용할 수도 있어요.
이건 사바사, 회바회에요. 월급 주는 곳의 규칙을 따르면 됩니다.

 

원격 저장소가 잘 연결되었는지 확인해요.

git remote -v

이러면 연결된 원격 저장소 주소와 별칭이 나와요. 2개(fetch와 push)가 나올거에요. 그게 정상이에요.

 

무언가 막- 작업을 해요.

 

작업이 다 끝나면 branch를 생성하기 전에, 지금 있는 branch가 어디인지 확인해요.
(실제로 업무할 때 저는 branch를 먼저 생성하고, 생성된 branch에서 작업을 해요. 하지만 사실 상관은 없어요.)

git branch

서비스 및 협업 프로젝트라면 develop branch인지 확인해요.
개인 공부 목적이라면 그냥... master branch인지 확인해요.

+ 처음 생성된 저장소라면 위 명령어를 쳐도 아무것도 안나올 수 있어요.
그럴 땐, add 후에 branch를 명시해주면 됩니다. 아래에서 다시 설명할게요.!

 

지금 있는 branch가 master나 develop이 아니라면, master나 develop로 이동해요.

git checkout develop

 

'daily/오늘날짜' branch를 생성하면서 바로 'daily/오늘날짜' branch로 이동해요.!
+ 이미 생성이 되어 있고, 이미 'daily/오늘날짜' branch라면 이 단계는 필요 없어요.

git checkout -b daily/오늘날짜

 

모든 작업이 끝나면, 저장할 목록과 변경된 목록을 확인해요.
(PyCharm으로 작업할 때는 여기서 VCS를 사용해요.)

git status

git status

 

여기서 빨간색을 보고 변경점을 저장할 것들을 하나하나 add 해줘요.

git add 파일명

그러면 위에서 보듯, 초록색으로 변해있어요!
+ 가끔 색상이 표현되지 않는 환경(아마 cmd?)이 있을 수 있어요. 당황하지 마세요.
Changes to be committed: 저장할 목록들을 의미해요.
Changes not staged for commit: 변경되었지만, 저장할 목록에 추가하지 않은 것들이에요.
Untracked files: 변경점을 추적하지 않는 파일이에요. (여러 이유가 있어요.)

 

모든 add가 끝나면, 저장할 목록을 다시 한번 확인해요.

git status

 

여기서, 로컬 저장소를 생성하고 첫 작업이었다면 branch를 확실하게 명시해주어야 해요.

git branch -m master

그게 아니라면 이 명령어는 절대 실행하면 안되요...!

 

저장할 준비가 모두 되었다면, 저장을 확정해요.

git commit -m '커밋 코멘트'

-m 옵션은 커밋의 제목을 설정할 수 있어요.!
제 기억엔 안해주면 설정하라고 오류가 나왔던 거 같아요.

 

원격 저장소에 브랜치를 push 해요.

git push origin daily/오늘날짜

origin은 아까 우리가 설정한 원격 저장소의 주소 별칭이에요.
daily/오늘날짜는 아까 우리가 생성한 branch에요.

 

그 다음 GitHub에서 pull requests 탭에서 'New Pull Request' 버튼을 눌러, Pull Requests를 생성해요.
원격 저장소 branch 중에서 merge 대상(develop 또는 수정된 코드를 적용할 branch)을 왼쪽에,
무언가가 추가/수정/삭제된 branch(daily/오늘날짜)를 오른쪽에 두어요.

 

그리고 Create Pull Request를 눌러요.!
(이 다음 단계부터는 필드에서는 높은 분-PL, 수석 개발자, 리드 개발자 등등-이 하실 확률이 매우매우 높아요.)

변경점/충돌 등등을 확인하고, 
코드에 문제가 없다면, merge 버튼을 눌러요.
코드에 문제가 있다면, 코드 리뷰 피드백을 남겨요.

 

코드 리뷰 피드백을 읽고,
작업을 하고, add를 하고, commit을 하고, push를 해요.
+ branch 확인은 필수에요.

 

이렇게 merge된 develop을,
release로 만들어서 빌드, 테스트 후 서비스로 출시하게 되요.!

...

 


 

혼자 사용할 때는 아래 5단계만 기억하면 되요.!

  1. 로컬 저장소와 원격 저장소를 연결한다.
  2. 로컬 저장소의 내용을 수정한다.
  3. 수정된 내용을 저장할 목록(staging)에 add한다.
  4. 저장할 목록(staging)을 commit한다.
  5. push로 원격 저장소를 로컬 저장소의 내용으로 동기화 한다.



  1. git remote add origin 깃-레파지토리-주소
  2. 로컬 저장소의 내용을 수정한다.
  3. git add 수정된파일명
  4. git commit -m '커밋 코멘트'
  5. git push origin master

 


 

이번 내용은 정말 많이 고민을 했어요..!

복잡한 내용이 들어가다 보니, 10분 안에는 절대 못 끝낼 것 같아서...
그렇다고 1시간을 써도 자신이 없는 이 기분... 역시 설명은 어렵네요..!

Git 사용 하시면서 질문을 받는 게 더 쉬울 거 같아요...! ㅜㅜ