개발새발

[Git] Git의 개념부터 버전 생성까지 본문

Git & GitHub

[Git] Git의 개념부터 버전 생성까지

칸쵸. 2023. 12. 17. 00:38
728x90

 

그동안은 학원에서 배운대로 그저 기계적으로 GitHub을 이용해왔다.

'명령어.. 사실 좀 어렵긴하지만 그냥 뭐 코드 파일만 올릴 수 있음됐지' 하면서

더 이상 공부할 필요성을 느끼지 못하고 대수롭지 않게 넘겨왔는데..

 

하지만 사용 할 때마다 어쩐지 가려운 부분이 너무 많았고,

평소와 다른 작업이 필요할 때면 매번 뭔지도 모르고 구글링해서 나온 명령어만 긁어와서

대충 해결하고있는 내 모습에 문득 현타가 왔다.

 

이놈의 Git.. 뭔지도 모르고 계속 이렇게 쓰는게 맞나?

 해서 드디어 시작해보는 공부...

 

당장 급한 공부가 더 많다고 생각했는데 아닌 것같다.

가보자고.

 


 

1. Git 이란

버전관리시스템(VCS, Version Control System)의 일종으로,
파일 변화를 시간에 따라 기록하고 추후 특정 시점의 버전을 다시 불러올 수 있는 시스템을 의미한다.

 

여기서 말하는 버전이란 우리 일상에서도 흔하게 접할 수 있는 그 버전과 의미가 상통한다고 생각한다.

어떤 프로그램이든지 진짜 개발자가 게을러 빠지지 않은 이상, 한 번쯤은 '저희 업데이트해요~' 할 것이고,

업데이트 이후로는 "자~ 나왔습니다 개짱멋있어진 우리 프로그램, 이름하여 버전2!" 하고 새롭게 태어난 녀석을 내놓지 않는가

 

그래서 버전에 대해 내리는 정의는 사람들마다 다르겠지만..

일단 나는 버전이란 '어떠한 의미있는 변화'라고 생각하고있다.

 

그리고 '깃(Git)'은 이러한 버전을 기록하고 불러올 수 있게끔 도와주는 셈이다.

꼭 깃이 아니더라도.. 만약 버전관리시스템을 사용하지 않을 경우에는 어떻게 되느냐?

 

유서.hwp

 

프로젝트 내용을 수정 할 때마다 매번 이러고있어야한다.

 

지금까지는 항상

'일단 쓰라니까 쓰고는 있는데... 내가 왜 이걸 쓰고있는거지, 그냥 어디 공유드라이브에 매번 업로드 해놓고 공유하면 되는거 아닌가?' 하고 생각했었는데 그런데에는 다 이유가 있었다.

 

왜?

 

버전따위는 생각도 안하고, 그저 컴퓨터에 저장된 프로젝트 파일을 업로드 하는 데에만 초점을 두고있었으니까..!

수정본 및 이전 작업에 대한 고찰은 전혀 없었던 것이다.

 

지금이야 나 혼자 레퍼지토리에 내 프로젝트만 올리고 구경하면 장땡이지만,

나중에 사회를 나가서 다수의 팀원과 코드를 공유할 일이 생기면? 근데 갑자기 수정된 내용 이전의 버전이 필요하다는 요구가 생기면? 하는 생각이 들기 시작하니 Git 공부를 하지 않을 수가 없었다 진짜로;;

 

이래가지고는 나중에 면접이든 어딜 가서든 "저 깃 써봤어요 근데 잘 몰라요 히히" 할 수도 없는 노릇이니 말이다

 

Git.. 혹시 써보신 적이...?

 

아 예 제가 좀 써봤죠

 

WOW 사용해보셨습니까? 그럼 어디 그게 뭔지 한번 설명을...

 

무 야~호~

 

엄밀히 따지자면 버전관리 시스템에도 여러 종류가 있긴한데 그 중 git은 DVCS(분산 버전관리 시스템)이라고 할 수 있겠다

 

VCS : 버전 관리 시스템

 

CVCS : 중앙집중형 버전관리 시스템 (협업가능)

원활한 소통이 전제되지 않으면 파일 관리 위험

중앙 저장소에 문제가 생기는 순간 협업 불가능 

 

DVCS : 분산 버전관리 시스템 (대표적 예 : git)

로컬도 히스토리를 지니게 됨

> 중앙 저장소에 문제가 생겨도 복구 가능하다는 파격적 장점이

 


 

2. Git Bash

Windows 운영체제(OS)에서 Linux 및 unix에서 쓰는 명령어(Command)를 사용할 수 있게 해주는
(shell)프로그램
**쉘 : 키보드로 입력한 명령어를 운영체제에 전달하여, 명령어를 실행하게끔 하는 프로그램

 

 

한 마디로.. Windows로 치자면, git 전용 '명령 프롬프트(cmd)'인 셈

학원에서는 cmd를 통해 명령어를 입력하긴 했지만, 운영체제에 제한 없이 명령어를 쓸 수 있다는 장점이 있는 것같아 독학은 Git Bash를 통해 해볼까한다. 설치는 Git 깔면 자동으로 딸려오니 알아서들 하시길

 


 

3. git init

현재 디렉토리에 버전 관리 작업을 진행할 것임을 명시하는 명령어

 

 

적절한 경로의 원하는 워크스페이스에서 git bash를 켜고, git init을 실행하면

 

 

이런 폴더가 생기는 것을 볼 수 있는데,

이때 저 .git을 버전 관리 중에 생성되는 여러 정보가 저장되는 공간으로 보면 된다.

 

그동안 $git init 명령어를 실컷 써놓고는, 이 폴더가 왜 생기는지도 모르고 있던 사람...

 


 

4. git add

원하는 작업물을 커밋 대기 상태로 만들어준다

 

 

git init이 현재 디렉토리를 버전관리하기 위한 공간으로 지정하는 명령어였다면, git add는 원하는 작업물의 버전을 생성하기 위한 명령어다.

 

이전에는 git add . 다음 git commit만 기계적으로 실행해 왔던터라, '어차피 통째로 커밋해버릴건데 git add 절차가 왜 필요하지? 그냥 프로젝트 내 모든 파일을 갖다쓰면 안되는건가?' 했었는데 역시 모든 명령어에는 다 존재하는 이유가 있기 마련. 

 

매번 디렉토리 내 모든 파일을 버전관리 해주겠다고 하면 문제가 없으나, 실상은 그렇지 않다. metadata 등 임시파일의 경우에는 버전관리를 해줄 필요가 없기 때문. 꼭 임시파일이 아니더라도, 굳이 버전을 만들 필요가 없는 파일이 분명 존재할 수도 있고.. 그러니까 우리는 핵심파일만 골라서 커밋을 해줄 것이라고 명시하는 단계가 필요한 셈이다.

 

따라서 git add란 git commit 이전에 git에게 "야! 이 파일 이제 관리해!" 하고 던져주는 단계로, 다르게 말하면 해당 파일을 커밋 대기 상태로 만들어주는 명령어라고도 볼 수 있다.

 


 

5. git commit

의미있는 변경 작업들을 저장소에 기록하는 명령어

 

일단 git에서의 commit이란 git이 코드의 변화를 기록하는 것이다.

따라서 git commit 은 이전에 실행한 git add 단계에서 커밋 대기 상태에 있는 작업들을 최종적으로 기록해주는 단계라고 보면 된다.

 

git commit을 최초 실행하는 경우, 최초 환경 설정이 되지 않아 오류가 날 수 있는데 이것은 '누가' 커밋을 실행하는지 알 수 없는 상태이기 때문에 생기는 오류이기 때문에 git config로 간단한 설정을 해주면 된다.

git config --global user.name "유저이름"
git config --global user.email 유저이메일

 

이 작업은 최초 1회만 해주면되고, 변경도 가능하지만 이미 커밋된 내용에 대해서는 작성자 변경이 불가하니 참고하시길.

.

.

.

아무튼 최초 환경설정 이후,

git bash에서 커밋(git commit)을 실행하면 vim이라는 프로그램이 실행되는데, 이때는

  1. i를 입력 > INSERT 모드로 전환
  2. 원하는 커밋 메시지 작성 (현재 버전을 잘 설명할 수 있어야 함)
  3. 작성 후 esc 키를 눌러 INSERT 모드 나가기
  4. :wq 입력 후 ENTER (vim 종료)

단계를 거치면 커밋이 완료된다.

이때 버전이 잘 만들어졌는지 궁금하다면 git log를 실행해서 누가, 언제, 어떤 버전을 만들었는지 다 확인할 수 있다.

 

그런데 매번 커밋 할 때마다 위의 4단계를 거치기 불편한 분들을 위해서 또 다른 커밋 옵션이 존재하는데,

그것이 바로 내가 매일 사용하고 있던

git commit -m "커밋메시지"

 

되시겠다

지금까지 배운 git의 작동 원리

 


 

이렇게 git의 굉장히 간단한 개념부터 git commit까지의 명령어를 실행하기 위한 단계를 알아봤다.

 

사실 공부한 내용이 그동안 실행해왔던 명령어와 별 다를 것도 없지만,

확실히 뭔지도 자세히 모르고 기계적으로 커밋을 해대던 전과는 명령어가 좀 더 다르게 느껴진다.

좀 더 친숙하달까..

 

아무튼 굉장히 방대한 git 세상에서 이정도는 새발의 피겠지만 조금씩 더 공부하다보면

다른 쪽으로 또 머리가 트이겠지..!

공부해서 나쁠건 없으니까~

 

'Git & GitHub' 카테고리의 다른 글

[Git] 최종 commit을 변경하는 git amend  (1) 2024.01.05
[Git] commit 무효화하기 (git reset)  (0) 2023.12.25
[Git] 변경 사항 확인 (log & diff)  (0) 2023.12.25
[GitHub] Octotree  (0) 2023.09.15