Git 기초

Sitehyun·2022년 12월 24일
0

IT Log

목록 보기
1/10
post-thumbnail

올해 겨울은 엄청 추운것 같으면서도 함박 눈이 자주 내려 포근한 느낌도 든다.
집에만 박혀있어서 그럴수도 ㅎ..
오늘은 메리 크리스마스! 이지만 나에겐 그냥 빨간날이 포함된 토요일일 뿐이다.
여느날과 다름없이 시작해보자!


지옥에서 온 문서관리자 Git!

Linux OS를 만든 리누스 토르발즈가 만든 문서 관리 프로그램이다.
Linux를 개발하며 1만 여명의 참여자, 2천만 줄의 소스코드를 공유하는
과정에서 지옥을 겪게되었고이를 해결하고자 개발한 것이 바로 Git
오늘은 Git 기초에 대하여 공부해보자


Git이란?

간단히 말하여 파일을 관리해주는 프로그램이다.

  • 파일의 변경사항을 추적하며, 사용자가 각 파일의 버전관리를 할 수 있게 도와준다.

  • 파일을 백업할 수 있다.

  • 협업자들과 파일을 공유하고, 각자의 작업물을 취합할 수 있다.

Git과 Github?

일반적으로 Git 자체는 로컬에서 버전을 관리해주는 프로그램이다. Github는 협업을 위한 온라인 원격 저장소기능을 제공해주는 서비스이다.

즉, Github는 Git이 설치되어져 있는 클라우드 저장소이다!

CloudScape

위의 이미지는 Git의 Workflow이다. 나와있는 용어들을 차차 정리하면서 공부해보자!


Git 환경설정

https://git-scm.com/downloads
Git은 위의 url 에서 Mac, Linux, Window 버전의 다운로드를 지원하니 사용자의 OS에 맞게 설치를 진행하면 된다.

Git설치후 실행했을 때 가장 먼저 사용자의 이름과 이메일 주소를 설정한다. 설정에 기록된 사용자 이름과 메일은 앞으로 진행할 Git커밋 내역에 기록된다.

설정 명령어
$ git config --global user.name "나의 사용자 이름"
$ git config --global user.email "내 이메일 주소"
설정 명령어 예시
$ git config --global user.name "KDH" 
$ git config --global user.email "****hyun@gmail.com"

//나의 경우 Github에 등록된 유저네임과 이메일을 사용하였다.

-global 옵션을 설정하면, 사용자 홈에 저장되므로 Git을 설정할 때 단 한 번만 입력해도 된다. 변경하고 싶다면, 위의 명령어를 다시 입력하면된다.


Git을 이용한 버전관리

앞서 깃의 주요 기능은 다음의 세가지였다.

  • 버전관리
  • 백업
  • 협업

즉, Git을 통해 로컬에서의 파일의 버전을 관리할 수 있으며, 파일을 온라인으로 업로드하여 협업 및 백업 기능을 활용할 수 있다.

Git은 크게 온라인과 로컬영역으로 나뉜다.

  • 온라인 : Remote repository (원격 저장소)
  • 로컬 : Work space(작업 공간), Staging area(스테이징 영역), Local repository(지역 저장소)

이제 Linux 명령어 mkdir을 이용해 깃 연습용 디렉토리를 생성하고 Git의 기본 명령어와 영역을 공부해보자

$ mkdir git_practice //디렉토리 생성
$ cd git_practice // git_practice로 이동
$ touch git.txt // git.txt 생성

위의 명령어를 입력 후의 상태이다. 이제 git으로 이 파일을 관리할 수 있을까? 정답은 X!
디렉토리, 파일명에 git이 포함되어있다고해서 git은 편애하지 않는다. 어떠한 파일이 git의 관리하게 만들어주려면 밑의 명령어를 입력하여야 한다.

$git init //git이 이 파일을 관리할 수 있게 해준다.

자 위의 이미지와 다르게 .git 이라는 폴더가 생성되었다. 이 폴더는 git의 명령어, 관리 등이 가능하게 하는 파일들이 들어있다. git의 관리를 받고싶지 않다면 .git을 삭제하면 된다.

Work space

Work space는 git의 세가지 영역중 하나로 Working tree 혹은 Work tree 라고도 하며, 우리들이 직접 눈으로 볼 수 있는 디렉토리 자체를 의미한다.
git은 Work space를 자동으로 스캔하여 변경된 사항을 발견하면 사용자에게 알려준다.
Work space는 어떠한 git명령어 조작이 이루어지지 않은 상태의 파일들이 존재하는 영역입니다. 즉 git.txt는 현재 Work space에 위치합니다.

Staging area

Staging area는 Local repository에 저장될 파일들을 임시적으로 대기상태로 만드는 영역을 의미합니다.
일반적으로 git을 활용하여 작업할 때, Work space에서 작업을 마친 파일을 Staging area로 옮겨서 보관해두고, 추후 어느정도의 단위 작업이 끝나면 Staging area에 모인 파일을 한번에 Local repository로 저장합니다.

Local repository

Staging area 에서 커밋을 실행하였을때 Local repostitory에 파일이 저장되게되며 동시에 커밋 메세지, 버전 등이 저장되어 git의 기본기능 중 하나인 버전관리가 이루어진다.

이제 파일을 이 3가지 영역으로 이동시키는 방법을 알아보자

git status

간단하게 살펴보면

  • 현재 브랜치는 master 브랜치입니다.
  • 아직 커밋이 이루어지지 않았습니다.
  • Untracked files은 git에의해 파일이 추적되지 않은 상태를 의미하는 상태입니다.
  • git add ~ 를 입력하면 Staging area에 보관됩니다.
  • 아직 add된 파일이 없으며 Untracked 상태의 파일이 존재하니 add 를 사용하라는 메세지입니다.

이제 Staging area로 파일을 옮겨보자

git add 파일이름  // 파일을 Staging area에 보관 
git status // 파일 상태 확인


명령어를 입력하게 되면 위의 상태로 변화된 것이 확인된다. 아까 붉은색이었던 표시줄이 초록색으로 변화하였으며, 해당 파일이 Staging area에 정상으로 보관되었다는 것을 시각적으로 표현한 것이다.
하지만 파일은 여전히 Untracked 상태이며 Tracked 상태로 바꾸려면 커밋을 진행하여야한다.
바로 진행해보자!
기본적으로 아래 두 명령어는 커밋이라는 같은 기능을 수행한다.

git commit  // 여러줄의 커밋 메세지를 작성할 수 있음

or 

git commit -m "커밋 내용 요약"  // 간단한 커밋 메세지를 저장

  • [master (root-commit) 5c46b5d] practic
    - 커밋을 실시한 브랜치(master)와 커밋 해시의 앞부분 (5c46b5d) 그리고 작성한 커밋 메세지가 보여진다.

  • 1 file changed, 1 insertion(+)
    - 변경된 내용을 보여준다. 즉, 이제 파일이 Tracked 상태로 변화되었음을 의미한다.

지금까지 커밋된 내역을 보고싶다면 git log를 통해 커밋 고유번호, 메세지, 일자, 커밋한 사용자 등을 확인 할 수 있다.

git log

지금까지 git을 이용한 로컬에서의 버전관리를 알아보았다. 하지만 git은 협업과 백업기능 또한 가지고있다.


Github

먼저 github 홈페이지 (https://github.com/)에서 repository를 생성하자 그 후 repository의 https를 이용하여 나의 Local repository를 연결해야한다.

git remote add (원격 저장소 별칭) (원격 저장소 url)

연결 상태를 확인하고 싶다면

git remote --v 

현재 연결된 https와 원격저장소 별칭을 확인 할 수 있다.

이제 push를 하여 원격저장소(github)에 나의 작업물을 업로드해보자

git push (원격 저장소 별칭) (업로드할 브랜치 이름)

정상적으로 push가 되어 나의 원격 저장소 repository에 저장된 모습이다!


Git workflow

Git을 통한 전체적인 흐름이다.

  1. 협업자의 Remote repository에서 나의 Remote repository로 Fork해온다.
  2. 나의 원격 저장소에서 Local repository로 Clone 해온다.
  3. work space에서 작업을 진행한다.
  4. staging area로 보관한다.
  5. Local repository로 커밋한다.
  6. 나의 Remote repository로 푸쉬한다.
  7. 협업자에게 Pull Request를 보낸다.

이러한 과정을 통해 협업자와 원활한 작업을 이룰 수 있다. 물론 기본적인 소통을 하여야 원활한 작업이 됨은 당연하다!


마치며

git에 대한 이해도가 확실히 높아졌다. GUI에 익숙하다 보니 CLI는 창만봐도 무서웠는데 오늘 git을 배우면서 익숙해지는게 느껴진다.

sorucetree같은 좋은 툴도 있지만 역시 기본기부터 차근차근 밟아가며 workflow를 이해하니 머리속에서 잡다했던 지식들이 커밋 되어진거 같다. ㅋㅋ

하루종일 앉아있었더니 뻐근하넴... 런닝이나 뛰러가야겠다!

0개의 댓글

관련 채용 정보