[Topics] Git

23·2023년 3월 19일
0

Topics

목록 보기
1/2
post-thumbnail

📌 오늘의 주제, Git

Git이란?

Git은 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반분산 버전 관리 시스템이다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 파일 집합의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다.
위키백과


버전 관리란?

버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.
GIT DOCS

VCS(version control system)를 사용하면
1. 각 파일을 이전 상태로 되돌릴 수 있고,
2. 프로젝트를 통째로 이전 상태로 되돌릴 수 있으며,
3. 시간에 따라 수정 내용을 비교해 볼 수 있다.
4. 또한 누가 문제를 일으켰는지도 추적할 수 있고,
5. 누가 언제 만들어낸 이슈인지도 알 수 있다.
6. VCS를 사용하면 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.
이런 모든 장점을 큰 노력 없이 이용할 수 있다.


버전 관리 시스템의 종류

로컬 버전 관리 시스템

Local VCS (로컬형 버전관리시스템)

사용자의 컴퓨터에 관리할 버전 내용을 저장한다.

많은 사람은 버전을 관리하기 위해 디렉토리로 파일을 복사하는 방법을 쓴다. 이 방법은 간단하므로 자주 사용하지만 정말 뭔가 잘못되기 쉽다.
작업하던 디렉토리를 지워버리거나, 실수로 파일을 잘못 고칠 수도 있고, 잘못 복사할 수도 있다.
또한 컴퓨터에 문제가 생겼을 때 복구가 어려운 단점이 있다.

ex ) RCS, SCCS

중앙집중식 버전 관리 시스템

Center CVCS (중앙형 버전관리시스템)

여러 사용자의 버전 관리 내용을 중앙 서버에서 관리한다.

프로젝트를 진행하다 보면 다른 개발자와 함께 작업해야 하는 경우가 많다. 이럴 때 생기는 문제를 해결하기 위해 CVCS(중앙집중식 VCS)가 개발됐다. CVS, Subversion, Perforce 같은 시스템은 파일을 관리하는 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)한다.
하나의 중앙 서버에서 팀원의 역할, 권한 등을 관리할 수 있기 때문에 편리하지만 몇 가지 치명적인 단점이 있다. 가장 대표적인 것이 중앙 서버에 발생한 문제다. 만약 서버가 한 시간 동안 다운되면 그동안 아무도 다른 사람과 협업할 수 없고 사람들이 하는 일을 백업할 방법도 없다. 그리고 중앙 데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃을 수 있다.

ex ) CVS, subversion, Perforce

분산 버전 관리 시스템

Division VCS (분산형 버전관리시스템)

중앙에서 관리하고 있던 모든 이력을 가진 저장소 전체를 복제하여 사용자의 컴퓨터로 가져와 사용한다.

사용자의 컴퓨터에서는 Local로 개발을 할 수 있으며 이를 중앙 서버로 보낼 수도 있고 중앙 서버의 진행상황을 사용자의 컴퓨터로 갱신시켜서 사용할 수도 있다.
때문에, 중앙 서버에 문제가 생겨도 사용자의 local 저장소에 저장된 데이터로 복구시키기가 용이하며 공동작업을 하는 팀원들 모두가 이러한 저장소 정보를 갖고 있으므로 서버와 일부 사용자의 데이터가 날아가도 복구가 가능하다.

ex) git


Git을 사용하는 이유

  • 소스 코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다. (브랜치를 통해 개발한 뒤, 본 프로그램에서 합치는 방식(Merge)으로 개발을 진행할 수 있다.)
  • 병합(merge)에서 문제가 덜 발생한다. 서버의 자료를 가져와(fetch) 로컬에서 병합하고 이를 다시 올리는 형태이기 때문이다.
  • 중앙 서버에 문제가 생겨도 사용자의 local 저장소에 저장된 데이터로 복구시키기가 용이하다.

Git 명령어 모음

명령어기능
git initgit 하위 디렉토리 생성 (폴더를 만든 후, 그 안에서 명령 실행 → 새로운 git 저장소 생성)
git clone [저장소 경로]기존 소스 코드 다운로드/복제
git add <파일명>커밋에 단일 파일의 변경 사항 포함
git add . or *커밋에 모든 파일의 변경 사항 포함
git commit -m “커밋 메세지”커밋 생성 (실제 변경사항 확정)
git status파일 상태 확인
git branch브랜치 목록 확인
git branch -b [브랜치 이름]브랜치 생성→ 이동
git checkout [브랜치 이름]브랜치 이동
git branch -d [브랜치 이름]브랜치 삭제
git push [로컬저장소 이름][브랜치 이름]로컬 저장소의 내용에서 생성된 브랜치로 커밋된 내용을 원격 서버에 업로드
git pull [로컬저장소 이름][브랜치 이름]원격에 저장된 git 프로젝트의 현재 상태를 다운받고 현재 위치한 브랜치로 병합
git log현재 위치한 브랜치 커밋 내용 확인 및 식별자 부여
git fetch origin원격에 저장된 git프로젝트의 현 상태를 다운로드
git stash아직 마무리하지 않은 작업을 스택에 잠시 저장
git stash pop스택에 잠시 저장된 마무리되지 않은 작업을 꺼내옴

Github란?

깃허브(Github)는 분산 버전 관리 툴인 깃(Git)를 사용하는 프로젝트를 지원하는 웹호스팅 서비스이다.
위키백과

"Git이 영상을 찍는 앱이라면, GitHub는 유튜브 라는 플랫폼이다 라고 생각하면 편하다."

얄팍한 코딩사전


💖 마무리

Git에 대해 짧게 알아보았다. Git의 원리와 장점, 사용 이유에 대해 알아보니 더 잘 이해가 되는 것 같다.
공동 작업이 아니라도 작업을 하다보면 여러 돌발 상황이 발생할 수 있는데 그런 상황을 간편하게 해결해 주는 툴이라는 것이 제일 매력적으로 느껴진다. 백업을 열심히 하는 편이지만 그런 철저한 대비에도 예상치 못한 일은 꼭 발생하는 법이다.😢

이런 점이 아니더라도 흔히 잔디를 심는다는 말이 있는데, 레포지토리에 푸쉬하면 연두색 마크가 채워져 한 포기의 잔디를 심는 모습과 같다하여 그렇게 부른다고 한다.
꼬박꼬박 차오르는 잔디를 보고있으면 동기 부여도 되고 뿌듯함도 얻을 수 있을 것 같다!

나의 레포지토리에도 푸릇푸릇한 잔디밭이 펼쳐질 때까지 성실히 잔디를 심어나가고 싶다~! 🥰🥰

profile
프론트엔드 개발자가 꿈인 고슴도치

0개의 댓글