기타 개발관련

Git 이 뭐에요, github은 또 뭔데요..먹는거에요..? (전체적인 틀 정리)

나른한코딩 2022. 2. 9. 18:31



와우 친구들~

(참고로 저는 빡빡이 아닙니다.)

최근에 근손실 날까봐 움직이지 않다가
잔병치례를..(쿨럭 코로나 아님)

맞지맞지.



서론이 TMI 였네요.
자자 그럼 본격적으로 주제로 가보겠습니다..






Git 이란?

(사이트 링크)

사이트 들어가보면 영어로 뭐라고 써있죠?

그대로 해석해보면...

- 깃은 무료이고 오픈소스이며, 작은 프로젝트에서 매우 큰 프로젝트까지 모든 것을 빠르고 효율적으로 관리할 수 있는 분산 버전 관리 시스템이다.
- 깃은 배우기 쉽고, 가볍고 빠른 성능을 가진 아주 작은 발자국(흔적을 남길 수 있는 무언가)을 가지고 있다.

말은 어려운데 그냥 간단하게 말하면

- 꽁짜임. 이거 사용하면 프로젝트 관리하기 편하다?
- 심지어 쉽고, 성능도 좋아

이거에요.



프로젝트를 관리하기 편하다는게 무슨말이지 한다면...
사진하나로 설명이 가능합니다.

사진 보자마자 감이오죠?

프로젝트 하다보면 뭔가 조금씩 수정하거나 추가했는데, 그 이전 버전도 또 가지고 있고 싶으면
프로젝트 복사해서 압축해서 막 저렇게 "xxx_최종", "xxx_진짜진짜최종" 이렇게 저장하게 되잖아요?




제가 깃을 모를 때

  • 특정 기능을 구현한 버전과 아닌 버전을 모두 보관하고 싶을 때
  • 코드 구조 변경을 시도해보고 싶을 때 변경을 시도하고 싶은데 혹시모르니까 고치기 전의 코드를 남겨두고 싶을 때

버전별로 프로젝트를 압축해서 저렇게 여러 파일을 만들어뒀던 기억이...


" 그래서 이렇게 수기로 번거롭게 파일들을 관리하지말고, 깃 이용하면 버전별로 더 편하고 쉽게 관리할 수 있어~ 명령어 몇줄 치면 돼~"

(그게 어려운건데)


이거를 조금 있어보이는 단어들로다가 바꿔서 말한게 사이트에 적혀있는 문장입니다.

(별거 아니죠?)


Git 이 왜 필요한가? 왜 쓰는가?

버전별로 관리를 할 수 있기때문에

→ 소스코드가 변경된 이력을 쉽게 확인할 수 있다
-> 특정 시점에 저장된 버전과 비교하거나 그 시점으로 돌아갈 수 있다.
는 장점이 있습니다.

그리고 또 저희가 개인컴퓨터에서 작업을 하면 내가 작업한거 보내고, 그걸 받아서 다른 사람이 작업하고, 또 넘기고...
이렇게 해야하고 그러면 되게 번거롭고 비효율적이겠죠?
그래서 서버에 올려두고 같이 작업을 할 수 있는 거죠~!
(동시에 작업한다고 서로에게 즉각적으로 반영되는게 아니라 내가 작업하고 업로드를 하면 다른 사람이 그 변경사항을 내려받을 수 있음)

근데 여기서 문제가 생길 수 있는 부분이 있습니다.
→ 만약 같은 파일을 누군가와 같이 수정하고 있었다고 할 때, 변경 사항이 서로 다를 수 있다!!
그러면 충돌이 일어나겠죠?

이때 "conflict 났다."라고 표현하곤 하는데,
이런 상황이 벌어나지 않도록 깃에서 친절하게 경고도 해준답니다.




Git , Github 뭐가 달라요?


Git(깃)은
위에서 지금까지 말한데로 소스를 버전별로 관리할 수 있게 해주는 시스템, 소프트웨어에요!
(소스코드를 효율적으로 관리할 수 있게 해주는 형상관리툴)

Github(깃허브)는
깃을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스 입니다.
그러니까 깃을 사용하는 프로젝트의 버전관리와 다른개발자와의 협업을 위해 사용하는 하나의 플랫폼이라 보면 됩니다.

깃허브 != 깃


입니다.
깃을 사용하는 프로젝트를 관리할 수 있는 플랫폼은 다른 것도 있어요! (GitLab 등)

+ 그리고 이런 깃이 추상적이다보니까 눈에 안보여서 감이 안오잖아요? 이럴때 눈으로 보면서 플로우를 이해하는데 도움이 될 수 있는 → 좋은 Git GUI툴들이 많으니 그것을 통해 접해보는것도 좋습니다. (github desktop, source tree, gitKraken 등등)
만약 나는 CLI 가 익숙하다? 나 리눅스/유닉스 좀 배워봤다. 하면 CLI로 바로 접근해도 좋을 것 같습니다.



저장소(Repository)



깃헙 사이트에 다들 아이디 하나쯤 가지고 있잖아요? (잘 몰라서 안써서 그렇지...ㅠ)
깃헙 사이트 틀어가서 'New'라고 써 있는 초록색 버튼을 누르면 이렇게
새로운 저장소를 생성할 수 있게 되는데요.


'레포지토리'라는 단어 자체가 익숙하지 않으실테지만, 그냥 단어 뜻 그대로 저장소입니다.
내가 프로젝트를 관리할 하나의 큰 폴더 만든다 생각하시면 될 것 같아요!

우리가 컴퓨터 바탕화면에 폴더 만들고 거기 안에다가 다른폴더도 넣고 파일도 넣고 해서 하나의 묶음으로 저장하잖아요?
그거랑 비슷한 겁니다

이 저장소 또한 깃을 사용하는 이유 중 하나 인데요,
우리가 컴퓨터에 'a.txt'라는 파일을 만들었어요.

그리고 그 'a.txt'의 내용을 조금만 바꿔서 같은 이름으로 저장하고 싶어서 저장하려고 하면
저희에게 선택지는 둘 중 하나입니다.

같은 이름의 파일을 저장할 수 없기 때문에
'a_복사본.txt이름을 바꿔서 저장하던가

아니면
이렇게 덮어쓰기를 해야겠죠..


그런데 깃은?!
내용이 조금이라도 바뀌었다? 하면 이름이 같아도 다른 녀석으로 취급해줍니다.
그래서 다른 파일로써 저장을 해주죠


그니까.. 한번 더 쉽게 비교를 해보면
민소희라는 사람 자체 = 프로젝트명
점 = 소스코드에서 달라진 점
(라임있다 그쵸)

이라고 했을 때
.
.
.
.

[ 깃을 쓰면 ]
> 민소희 : (점찍고 나타나서) 나 '민소희'야~
> 깃 : 응 아니야. 민소희는 점이 없었어. 너는 점이 있으니까 '민소희'가 아니라 '구은재' 야


[ 깃을 안쓰면 ]
> 민소희 : 민소희 : (점찍고 나타나서) 나 '민소희'야~
> 컴퓨터 : ?.. 점만 찍었다고 다른 사람되냐. 맞아 넌 민소희임.



이런 느낌이랄까...






원격(Remote) & 로컬(Local)

저장소에는 원격(remote)과 로컬(local)이 있습니다.

  • 원격: 우리가 파일을 인터넷 상 어딘가 전용 서버에 저장해서 관리하고 여러 사람이서 함께 공유하고 수정이 가능하다.
  • 로컬: 내 컴퓨터 안에서 저장되어있는 파일잉나 폴더로 개인 전용 저장소이다.


→ 로컬에서 작성한 내용을 원격에 업로드하거나 다른사람이 작성한 원격에 있는 사항을 내가 로컬로 다운받아서 사용할 수 있습니다.

여기서 로컬에서 원격으로 올리는 행위를 push
원격에서 로컬로 내려받는 행위를 pull
이라고 한답니다.

(깃 검색하면 자꾸 push, pull 이런 말들 하잖아요? 그게 이겁니다)



저장소는 어떻게 만드는가??

내가 새로운 저장소를 만들거나, 이미 만들어진 저장소를 내려받는(복제) 두가지 방법이 있다.
CLI를 이용한다면 다음 명령어를 사용해서 만듭니다.
(GUI 툴 경우에는 따로 버튼이 있을겁니다! 각 툴의 도큐먼트를 읽어보시길 바랍니다.)

→ 새로 만들때: git init
→ 내려 받을 때: git clone


다음 명령어를 치고 나서
ls -al
명령어를 쳐보면
아래와 같이 뜰거에요!

( git init을 했다면 프로젝트 파일들은 존재하지 않습니다. 만약 기존 저장소를 복제해서 내려받게 되면 아래 그림처럼 프로젝트들이 들어있을거에요 )



여기서 중점으로 봐야할 것은 .git 파일!
새로운 저장소를 생성했다 -> .git 파일이 있습니다.
.git 의 내부가 궁금하다면 ... 다음 링크 참조 !
(저는 안궁금하고 싶었어요...)


이게 버전 컨트롤을 위한 모오오든 정보들을 포함하고 있는 폴더에요.
그래서 저걸 지우면 저장소와 더 이상 연결이 되어있지 않게 됩니다!

(사실 숨김 파일이라 실수로 지울일은 없을 겁니다 ㅎㅎ 그래도 실수로 지우지 않도록 주의~)







오늘은 제가 깃을 처음 접했을 때
머릿속에 물음표가 가득했던 시절을 회상하면서 작성해보았어요..
이래도 사실 이해가 안간다면

삐빅 - 당신은 정상입니다.




전체적으로 깃이 뭔지 훑어보는 식으로 하였고,
언제인지 모를 다음 포스팅에는 깃에서 자주 사용하는 명령어들에 대해 살펴볼게요!
(push, pull, commit, merge 등등)






반응형