SCM/Git + Github

Git 이란 ? Git 구조와 용어 간단하게 살펴보자

헹창 2022. 5. 29.
반응형

Git 이란

Git은 SVN 이후로 가장 많이 사용되는 형상관리 툴이다. (Git과 SVN 차이)

더보기

깃(Git /ɡɪt/)은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다. 기하학적 불변 이론을 바탕으로 설계됐고, 분산 버전 관리 시스템으로서 빠른 수행 속도에 중점을 두고 있는 것이 특징이며 데이터 무결성, 분산, 비선형 워크플로를 지원한다.

위키백과 깃(소프트웨어) 참조

 

Git을 활용하여, 로컬에서 자신의 개발 소스에 대한 섬세한 관리가 가능하고, Remote Repository (원격 저장소)에 영구적인 백업과, 다양한 협업이 가능하도록 지원하는 기능을 가리킨다.

 

Git의 대표적인 서비스를 지원하는 회사로 GitHub와 GitLab이 있다.

 

Git hub 와 Git Lab

GitHub는 Git 저장소로 무료 서버저장소를 지원하기 때문에 많은 사람들이 이용하는 서비스이다.

GitHub는 무료로 이용하는 대신 자신의 소스코드가 오픈되어 수많은 사람들이 보며 활용 가능하고, 익명의 개발자와 함께 작업할 수 있도록 하여 프로그래밍을 더욱 확산시켜주는 환경으로 자리하고 있다.

 

반면, GitLab은 수많은 기업에서 보안성을 중시하는 프로그램 코드를 올려 함께 협업하는 툴로, 자신의 서버에 설치하여 서버 내 프라이빗한 Git 원격 저장소를 만들 수 있는 서비스이다.

 

 

Git 구조 

출처 : UX공작소

 

출처 : velog

 

 

자신의 로컬PC에서 소스파일을 작업하는 공간을 Working Directory 또는 Local Repository 라고한다.

여기서 GitHub, GitLab는 원격 저장소(Remote Repository)이다.

 

Git 용어

용어 내용
Repository
(저장소)
  • 파일이나 디렉토리를 저장하는 장소
  • local repository : 개인 PC에 존재하는 저장소.
  • remote repository : 원격 저장소. 파일을 원격 저장소 전용 서버에서 관리하고 공유가 가능하다.
git clone
  • remote repository의 내용을 통째로 다운로드 한다.
  • git clone repository addresss
git add
  • git add작업 디렉토리(working directory) 의 변경 내용을 스테이징 영역(staging area)에 추가하기 위해서 사용하는 Git 명령어이다.
  • git add 명령어는 다음 변경(commit)을 기록할 때까지 변경분을 모아놓기 위해서 사용한다.
    따라서,  git commit 명령어를 통해 명시적으로 기록을 남기기 전까지는 아무리 git add 명령어를 많이 실행해도 Git 저장소의 변경 이력에는 어떤 영향도 주지 않는다.
  • git add <파일/디렉토리 경로>
    작업 디렉토리의 변경 내용의 일부만 스테이징 영역에 넘기고 싶을 때는 수정한 파일이나 디렉토리의 경로를 인자로 넘긴다.
  • git add .
    작업 디렉토리의 변경 내용의 일부만 스테이징 영역으로 넘기고 싶을때는 .을 인자로 넘긴다.
  • git add -A
    작업 디렉토리 내의 모든 변경 내용을 몽땅 스테이징 영역으로 넘기고 싶을 때는 -A 옵션을 사용한다
git status
  • git add 명령어를 사용할 때, 항상 함께 사용하게 되는 명령어가 git status 이다.
    git status 명령어는 작업 디렉토리(working directory)와 스테이징 영역(staging area)의 상태를 확인하기 위해서 사용한다.

  • Changes to be committed: 이 영역은 스테이징 영역에 넘어가 있는 변경 내용을 보여준다.
  • Changes not staged for commit: 이 영역은 아직 워킹 디렉토리에 있는 변경 내용을 보여준다.
  • Untracked files: 이 영역도 아직 워킹 디렉토리에 있는 아직 한 번도 해당 Git 저장소가 관리한 적이 없는 새로운 파일을 보여준다.
git commit
  • 파일 및 폴더의 추가/변경 사항들을 저장할 때 사용한다.
    git commit -m"커밋할 내용"
git push
  • commit한 내용 (head의 변경내용)을 remote repo(원격 저장소)에 올린다.
  • local에서 변경한 내용을 원격 저장소로 업로드한다.
    git push <branch name>
git merge
  • branch의 변경사항을 다른 branch (예를 들어 feature와 develop)의 반영할 때 사용한다.
  • 현재 branch를 기준으로 병합된다.
  • 만약 두 branch가 같은 파일의 같은 곳을 수정하면 Conflict(충돌)이 발생한다.
    git merge <합칠 branch name>
get checkout
  • branch를 변경한다.
    git checkout <branch name>

 

Git 작업 순서

Git을 운영하는 순서 중 가장 많이 사용되는 순서인 원격저장소의 파일을 로컬로 다운로드 받아서 작업 후 다시 업로드 하는 예시를 살펴보자.

 

1. 서버에서 Clone해오기

원격저장소에서 Clone하는 것과 그냥 다운로드 하는 것은 다릅니다.

clone 과 download

 

  1. Download ZIP : 그냥 순수하게 파일들만 압축해서 다운로드 되어 집니다.
  2. Clone 주소복사 : Clone은 순수파일들과 이 프로젝트의 커밋되었던 히스토리 정보까지 모두 다운로드가 되어 로컬저장소(Local Repository)를 만들어 줍니다.

 

git clone

서버에서 파일을 Clone 하게 되면 내 컴퓨터의 지정된 폴더에 .git이라는 숨겨진 폴더가 생성되고 이 .git폴더를 가지고 있는 폴더가 작업 폴더(Working Directory)가 됩니다. 이 작업 폴더는 자동으로 서버와 링크가 맺어지게 됩니다.

이 .git폴더가 사실 로컬저장소의 역활을 하는 중요한 폴더로서 서버와의 링크 정보와 변경된 히스토리 정보를 모두 가지고 있는 폴더 입니다. 이 폴더를 사람이 수정하거나 추가/삭제를 할 필요가 없습니다. Git에서 알아서 운영합니다.

git clone <저장소 url>

 

2. 작업 폴더(Working Directory) 구성

작업폴더는 관리(추척)가 되는 파일과 관리(추적)되지 않는 파일로 나누어져 있습니다. 관리(추적)가 된다는 것은 이 파일의 생성, 수정, 삭제 등의 히스토리 정보를 모두 가지고 있다는 뜻입니다.

파일관리(추적)의 상태

추적은 바로 이전의 커밋을 깃점으로 아래의 4가지 상태로 관리됩니다.

  • 추적안함 (Untracked) : 관리대상이 아님
  • 추적함(Tracked)
    - 수정없음 (Unmodified) : 변경이 없는 파일
    - 수정함 (Modified) : 변경된 파일
    - 스테이지됨 (Staged) : 스태이지에 올라간 파일

git add

작업 폴더에 처음 파일을 생성한다면 이것은 아직 관리(추적)대상이 아닙니다. 관리대상이 아닐 경우는 아무런 히스토리 정보를 가지고 있지 않습니다. 이제 이 파일을 관리대상으로 삼기 위해서는 git add 명령어를 실행해 줘야 합니다. git add 명령어를 실행하면 이 파일이 스테이지(Staging Area) 로 올라가게 됩니다. 이제부터 이 파일의 수정, 삭제 등의 모든 정보는 Git에 기록이 되어집니다.

파일의 상태는 추적안함 (Untracked), 수정함 (Modified)스테이지됨 (Staged) 으로 변경됩니다.

git add <파일 이름> // 특정 파일만 추가하기
git add . // 모든 파일을 추가하기

git commit

이제 스테이징된 파일들을 로컬 저장소(Local Repository)로 등록을 해야 합니다. 그러게 위해서는 git commit을 해야 합니다. git commit을 하면 현재 스태이징된 파일들을 그대로 스냅샷으로 찍어서 로컬 저장소(Local Repository)에 보관하게 됩니다. 이 스냅샷이 하나의 히스토리 기록이 되는 것입니다. 이 기록을 기준으로 과거로 되돌아갈 수도 있고 미래로 갈 수도 있고 다른 브랜치로도 이동할 수 있는 기준점이 됩니다.

파일의 상태는 스테이지됨 (Staged)수정없음 (Unmodified) 으로 변경됩니다.

copy bashgit commit -m "참고할 설명 작성" 

git push

git commit으로 로컬 저장소(Local Repository)에 스냅샷을 찍어 이용하는 것은 내 컴퓨터에서만 가능한 상태입니다. 이것을 서버에 올려서 다른 사람들과 공유를 하기 위해서는 원격 저장소(Remote Repository)에 업로드를 해야 합니다.
그 명령어가 git push 입니다. git push를 하면 로컬 저장소의 커밋(git commit)된 모든 내용이 그대로 원격 저장소로 올라갑니다.

git pull

원격 저장소에 올라온 최신 수정본 파일을 내 로컬 저장소로 업데이트를 해야 할 필요가 있습니다. 그때 필요한 명령어가 git pull 입니다. 일단 한번은 서버와 링크가 맺어있어야 실행이 됩니다. 또는 git fetch 명령어를 사용할 수도 있습니다.

이렇게 가장 기초적인 git의 구조와 명령어를 설명했습니다

 


출처 

UX공장소

방구의 발냄새

velog

728x90
반응형

댓글

추천 글