현업에서 꽤나 오랫동안 일을 하다보니 Git을 종종 사용하고는 한다.
그러나 대부분 push, pull만 진행하고 변경사항에 대한 로그만 찾다보니까
Git을 조금 더 잘 활용할 수 있는 방법이 있지 않을까 싶어 깊이 파고들어 보려고 한다.
0. Git이란?
Git은 VCS 라는 종류의 프로그램들 중 하나로, Version Control System 의 약자이다.
프로그램에 유의미한 변화가 결과물로 나온 것을 버전이라고 하는데, 이 버전을 관리할 수 있는 시스템으로
프로젝트 버전을 언제든지 되돌릴 수 있고, 프로젝트 내용 중 변경 사항들을 쉽게 이동할 수 있다.
1. Git 설치하기
먼저 사이트에서 Git Bash 를 설치한 뒤에 기본 설정 그대로 설치하면 되는데, 반드시 Git Bash 를 포함한다.
이후 Git Bash를 열어 "git --version" 을 입력하면 아래와 같이 설치된 git 버전을 확인할 수 있다.
다음으로 Git 을 GUI로 다를 수 있도록 도와주는 툴인 SourceTree 를 설치한다.
그리고 나는 VS code 를 기본 코드에디터로 사용하고 있는데, VS Code 에서
터미널을 Git Bash로 설정하기 위해 오른쪽 드롭리스트를 클릭하여 Git Bash를 선택하거나,
Ctrl+Shift+P 를 누르고 Select Default Profille 을 검색 후 Git Bash 로 선택하면 default 값으로 선택할 수 있다.
2. CLI vs GUI
위에서 CUI, GUI 에 대해서 간단하게 언급했는데, CUI 는 Command Line Interface.
즉, 명령어를 입력하여 사용하는것을 의미하고, 위에서 설치한 SourcTree와 같은
GUI 는 일반인들이 사용하기 편리하도록 그래픽 요소를 사용한 인터페이스를 의미한다.
다만 GUI는 사용하기 편리하긴 하지만, 모든 기능을 섬세하게 다룰 수 있도록 만들어지지 않았고
Git 에서 어떤 기능이 어떻게 동작하는지 CLI 로 직접 명령어를 입력하며 익혀두어야
추후 Git에 대해 보다 정확히 이해하고 제대로 사용할 수 있기 때문에 CLI로 익히는 것이 좋다.
즉, 어떤 명령을 사용할 때는 CLI 를 사용하고 프로젝트 상태를 확인하는 것은 GUI가 좋다.
3. Git 설정&프로젝트 관리 시작하기
이제 내가 만든 프로젝트를 Git으로 관리해볼 예정인데, 그전에 먼저 Git최초 설정이 필요하다.
먼저 Git 전역 설정에 본인의 이름과 이메일 주소를 설정해야 하는데, Github 계정과 다른 것이다.
해당 데이터는 추후 Git을 나중에 협업할 때 같이 쓰게 되면 작업을 누가 진행했는지 등을 받아볼 수 있다.
마지막으로 기본 브랜치명이 master 로 되는 케이스도 있는데, 해당 값을 main으로 바꾸는 것이 좋다.
# 전역 이름 설정
$ git config --global user.name "(본인 이름)"
# 전역 이메일 주소 설정
$ git config --global user.email "(본인 이메일)"
# 아래 명령어로 설정된 전역 값 확인
$ git config --global user.name
$ git config --global user.email
# 기본 브랜치명 변경
$ git config --global init.defaultBranch main
다음으로 git으로 관리할 폴더를 생성한 뒤에 VS code 에서 해당 폴더를 연다.
이후 Terminal 에서 Git init 을 입력하면 아래와 같이 .git 이라는 폴더가 생긴것을 볼 수 있다.
다음으로 test1.py 와 test2.py 를 생성한 뒤에 터미널에 git status 를 실행하면, 아래와 같이
현재 폴더 상황을 Git 의 관점으로 새로 추가된 파일이 무엇인지, 변경된 파일이 무엇인지 볼 수 있다.
이러한 동작을 Git Bash가 아닌 SourceTree 로도 진행할 수 있는데 Git을 연결하는 방법은
상단에서 [+ 생성] 버튼을 누른 뒤 해당 폴더를 선택하고 생성 버튼을 누르면 된다.
4. Git 에게 등록하지 않는 파일/폴더를 설정하는 방법
Git을 활용하다보면 구지 Git에 포함하지 않아도 되는 파일들이 있다.
예를 들어, 자동으로 생성 또는 다운로드 되는 파일은 불필요하게 용량을 차지할 수 있고
보안상 민감한 정보를 담은 파일은 타인에게 공개될 수 있으므로 Github에 올리지 않는 것이 좋다.
그러므로 .gitignore이라는 파일을 생성하여 프로젝트에서 배제할 요소를 지정할 수 있다.
먼저 .gitignore 파일을 만든 뒤에 Git 에 등록되지 않을 파일명을 입력한다.
이후에 git status 를 입력하면 아래와 같이 해당 파일을 무시하는 것을 볼 수 있다.
.gitignore 의 형식은 다양하게 지정할 수 있는데 자세한 사항은 아래를 참고하면 된다.
📘 기본 형식
# 주석입니다 | 주석으로 처리됨 (Git에서 무시됨) |
*.log | 모든 .log 확장자 파일 무시 |
temp/ | temp 디렉토리 전체 무시 |
!important.log | important.log 파일은 무시하지 않음 |
📂 디렉토리 무시
logs/ | logs 디렉토리 전체 무시 |
/build | 루트 디렉토리의 build만 무시 |
**/build | 모든 경로에 있는 build 디렉토리 무시 |
📄 파일 무시
*.tmp | 모든 .tmp 확장자 파일 무시 |
debug.log | 특정 이름의 파일만 무시 |
*.swp | .swp 파일 (예: Vim 임시파일) 무시 |
⚠️ 무시하지 않을 파일 지정
*.log | 모든 .log 파일 무시 |
!important.log | 단, important.log 파일은 무시 목록에서 예외 처리 |
파일 앞에 !를 붙이면 무시 목록에서 예외로 만든다.
단, 상위 디렉토리가 이미 무시되고 있다면, 그 안의 예외 파일은 자동으로 무시된다.
이 경우에는 상위 디렉토리도 예외로 등록해줘야 한다.\
logs/*
!logs/
!logs/keep.log
예를 들자면, 위와 같이 진행해야지 명시적으로 무시 대상에서 제외될 수 있다.
그리고 마지막으로 여러 파일을 동시에 지정하기 위한 와일드 카드는 아래와 같이 있다.
🔁 와일드 카드 패턴
* | 모든 문자열 (슬래시 제외) |
? | 한 글자 |
** | 모든 경로 (슬래시 포함) |
/ | 경로 구분자 |
/*.log | 루트 경로에 있는 .log 파일만 무시 |
**/*.log | 모든 하위 디렉토리의 .log 파일 무시 |
이렇게 이번에는 Git 을 사용한 환경설정 방법 및 프로젝트 관리방법에 대해 작성해봤다.
다음에는 Git을 활용해 이전 데이터를 불러오고 SourceTree를 활용해 보려고 한다.