Git

JJ·2023년 3월 8일
1

Git&Github

목록 보기
1/4
post-thumbnail

Git?

버전 관리 시스템
프로젝트 소스코드를 효과적으로 관리할 수 있는 시스템

동시 작업! -> 여러 명의 팀원들과의 협업에 최적
모든 로그 확인 가능 -> 되돌릴 수 있음

왜 사용해야할까?

뉴스 검색 사이트를 만든다고 가정해 보자.
뉴스 검색 사이트에서 필요한 기능들은 여러가지가 있겠지만, 회원기능, 뉴스 검색 기능, 뉴스 피드 기능 등으로 크게 분류하여도 3개의 기능이 필요하고, 나아가서 각각의 기능들에 html과 css로 구조와 스타일을 적용해야한다.
때문에 다수의 인원이 각각의 기능들을 구현하여 최종적으로는 위 기능들을 합쳐서 하나의 서비스가 만들어진다.

기능을 구현하는 과정에서, 각각의 인원이 독립적으로 코드를 작성하는 경우가 대다수겠지만, 불가피하게 하나의 파일을 한명 이상의 팀원이 수정해야 하는 경우도 발생한다.
이와 같은 측면에서 Git은 해결책을 제시할 수 있다.

Git에서 제공하는 기능들을 크게 두가지로 분류한다면 아래와 같다.

코드 관리의 측면

  1. 변경된 이력 확인.
    앞서 언급한대로, 하나의 파일을 한명 이상의 팀원이 수정하는 경우, 어떤 코드를 누가 수정했는지 확인할 수 있어야 한다. Git에서는 수정 후 commit을 통해 이력이 쌓이게 되고, 이를 통해 코드를 수정한 사람을 알 수 있다.

  2. 이전 버전으로 되돌리기.
    누군가 파일을 수정해서 에러가 발생했고, 이를 해결하기에 당장 시간이 부족하다면, 우선 수정 이전으로 되돌릴 수 있어야 한다. Git에서는 commit 내역을 통해 되돌리려는 시점을 특정하여 revert 명령어를 사용하여 해당 시점으로 되돌릴 수 있다.

  3. 최종 버전의 시점 확인 가능.
    1번과 연관되는데, 변경된 이력을 확인할 수 있어, 최종 버전의 시점을 확인할 수 있다.

협업의 측면

  1. 코드의 병합
    앞서 언급한대로, 하나의 서비스는 다시 여러개의 기능들로 세분화되기 때문에, 각각 작성한 코드를 합쳐서 하나의 서비스를 만들 수 있기 때문에, 협업에 유용하다.

  2. 동일 부분 수정 시 발생하는 에러 방지
    Git에서는 하나의 파일을 두명이 수정하는 경우, 병합과정에서 충돌이 일어나며, 충돌을 해결하는 과정에서 두명의 인원이 수정한 코드를 확인할 수 있고, 둘 중 하나를 선택할 수 있다. 때문에, 에러가 발생하는 것을 방지할 수 있다.

SourceTree

Git 사용을 위한 GUI(Graphic User Interface) 형태의 tool 이다.
Git에서 제공하는 기능들을 CLI에 비하여 보다 직관적으로 사용할 수 있게 해주는 용도이다.
물론, vscode에서도 Github와의 연동을 통해 git의 기능을 사용할 수 있다.
나의 경우, CLI를 통해 Git의 기능들을 사용하였는데, 현재는 vscode를 통해 git의 기능들을 사용하고 있었다.
vscode와 비교하여 기능적인 차이는 없다고 생각되지만, sourcetree의 경우 직관적인 버튼들을 통해 보다 편리한 사용이 가능할 것으로 생각된다.

여담이지만, 첫 직장에서 만난 부장님께서 여러가지 이유(오타, 복잡하고 수많은 명령어...)로 CLI로 Git의 기능을 사용하는 것을 지양하라고 하셨다.(대충 말하시길.. 뭣하러 편리하게 추상화된 기능들이 vscode에 들어가 있는데 cli상에서 일일히 명령어를 입력하냐고..)

Git 초기화 및 삭제

git init

터미널에서 초기화 할 폴더 경로에서 위의 명령어를 입력하면, 해당 폴더 내부에 숨김 폴더로 .git 폴더가 생성된다.
git 초기화의 의미는 해당 폴더에 생성될 폴더 및 파일(소스코드)들을 git을 통해서 관리하겠다는 뜻이다.
(때문에, 굳이 그럴리는 없겠지만 숨김 상태의 .git 폴더를 삭제하면 git과 관련된 모든 이력이 삭제되므로 주의하자)

rm -rf .git

위의 명령어는 매우 위험하다.
일어나는 것만 말하자면, 해당 경로 안의 .git 폴더를 삭제한다는 의미이다.
즉, 해당 경로의 모든 폴더와 파일들을 git으로 관리하고 그 내역이 .git 폴더에 쌓여있는데, 이를 삭제함으로써, 모든 이력과 설정들을 제거하겠다는 말이다.
tmi로 말하자면, rm은 remove의 약자로 제거한다는 의미이다.
rf의 r은 recursive이고, f는 force라는 의미이다.
즉, 재귀적이고 강제로 삭제한다는 말이다. 다시 말하면, 목적하는 폴더 내부의 모든 것들을 재귀적이고 강제로 삭제한다는 의미이다.

.gitignore

.gitignore라는 문서 내부에 정해진 양식에 따라 파일 또는 폴더를 입력하면, 해당 파일 또는 폴더는 git의 관리를 받지 않겠다는 것으로 작동한다.
프로젝트를 진행하면서, 원치 않는 파일이나 폴더의 commit을 막는 경우에 사용되며, 나의 경우, api키나 더미데이터로 사용한 이미지 파일 등을 업로드 하지 않는 경우에 사용했다.

작성방법

profile
한줄 한줄

0개의 댓글