* 프로그래머스, 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 5기 강의 수강 내용을 정리하는 포스팅.
* 더 수월할 내용 이해를 위해 수업 이외의 개인적으로 조사한 자료 등을 덧붙이고 있음.
분산 버전 관리 시스템으로, 파일의 변경 이력을 로컬에서 추적하고 관리.
버전? 무언가 유의미한 수준의 수정이 일어났을 때 변하는 것.
(1.0 -> 1.1 -> 1.2... 이런 식으로.)
코드, 문서 등 프로젝트의 각 파일에 대한 변경 사항을 기록하여, 특정 시점으로 되돌리거나 복구할 수 있다.
커밋(commit)을 통해 변경 이력을 기록하며, 브랜치(branch) 기능으로 여러 작업을 동시에 진행할 수 있다.
Git은 로컬 컴퓨터에 설치하여 사용할 수 있으며, 인터넷 연결 없이도 사용이 가능하다.
GitHub. 소프트웨어 개발을 위한 버전 관리 및 협업 플랫폼.
Git이라는 버전 관리 시스템을 바탕으로 동작하며, 프로젝트의 변경 이력 관리와 협업을 원활하게 지원.
버전 관리: 프로젝트의 각 작업 단계를 시간 순서에 따라 기록. 이렇게 저장된 버전은 필요할 때마다 되돌리거나 특정 시점으로 복구할 수 있다.
협업과 공유: 여러 개발자가 같은 프로젝트에서 동시에 작업하더라도 서로의 작업을 쉽게 병합할 수 있으며, 변경 사항을 공유하고 관리할 수 있다.
원격 저장소와 로컬 저장소: 로컬에서 작업을 진행하면서 작업 내용을 원격 저장소인 GitHub에 업로드할 수 있어, 백업 및 팀원과의 실시간 협업이 가능하다.
기본적으로 제공되는 Git 터미널에서 명령어를 활용해서 버전 관리를 하는 것은 생각보다 더 어렵다.
프로젝트 구조를 직관적으로 보기도 어렵고, 모든 것들이 텍스트 투성이기 때문.
적응한 사람들은 Git 터미널이 더 쓰기 편하다고 하지만.. 그게 아닌 사람들은 언제나 있는 법.
그래서 Github를 통해서 직관적이고 시각적으로 보고 쓰기 편한 UI가 더해지는 것. 파일의 변경 내역과 프로젝트 구조 등을 쉽게 확인할 수 있다.
Github 원래는 개인 회사로 출발해서 오픈 소스 기반으로 잘 나가다가, 이용자가 폭증하면서 적자를 감당하지 못했다. 그래서 MS가 조 단위 돈을 주고 사갔는데, 사람들의 걱정과는 달리 의외로 무료 오픈 소스 정책을 잘 유지하고 있다. 오히려 Private 저장소를 유료로 운영하던 과거과 달리 무료화를 제공할 정도.
Git: 로컬에서 코드의 변경 사항을 추적하고 관리하는 버전 관리 시스템.
(Git은 백업을 해주지 않는다. 애초에 로컬 컴퓨터에만 설치되어 돌아가는 녀석이기 때문.)
GitHub: Git을 기반으로 한 원격 저장소 서비스로, 사용자에게 웹 UI를 통해 시각적인 편의성을 제공하고, 원격 백업 역할도 합니다.
git --version
CLI (Command Line Interface)
사용 방식: Shell에서 키보드로 명령어를 입력하여 시스템과 상호작용.
Shell? 사용자가 운영 체제와 상호작용할 수 있게 해주는 프로그램. 사용자로부터 입력을 받아 그 명령을 운영 체제의 커널에 전달하고, 결과를 다시 사용자에게 출력해준다.
(Window Terminal/PowerShell, Mac Terminal, Bash 등)
특징:
텍스트 기반
주로 흑백 화면에서 작업
높은 효율성, 빠른 작업 속도
장점: 반복 작업에 강하고, 시스템에 깊은 접근이 가능하며 리소스 소모가 적습니다.
예시: Git Bash, Linux 터미널, Windows Command Prompt
GUI (Graphical User Interface)
사용 방식: 마우스 클릭이나 터치로 그래픽 요소(아이콘, 창, 메뉴 등)를 통해 시스템과 상호작용.
특징:
그래픽 기반, 시각적 인터페이스
화면에 아이콘, 창, 버튼 등 사용
직관적인 사용, 학습 곡선이 낮음
장점: 사용하기 쉽고, 복잡한 작업을 시각적으로 쉽게 파악할 수 있습니다.
예시: Windows, macOS, Linux의 GNOME과 같은 데스크탑 환경
add, apply, archive, bisect, blame, branch, bundle, checkout, cherry-pick, clean, clone, commit, config, daemon, describe, diff, diff-tree, fetch, filter-branch, format-patch, fsck, gc, init, instaweb, log, log-tree, merge, mv, notes, pull, push, prune, rebase, receive-pack, reflog, remote, reset, revert, rev-parse, rm, send-pack, shortlog, show, stash, status, submodule, symbolic-ref, switch, tag, verify-pack....
status: Git 저장소의 현재 상태를 확인하는 명령어. 추적되지 않은 파일, staged 상태의 파일, 커밋할 준비가 된 파일 등을 보여준다.
Git은 기본적으로 모든 파일을 관리하지 않는다. 비효율적이기 때문. 따라서 필요한 파일을 관리해달라고 명시적으로 지정해주어야 한다.
add: 변경된 파일을 Git의 staging area에 추가할 때 사용. git add <파일명> 혹은 git add .으로 모든 변경 파일을 stage할 수 있다. Stage에 추가된 파일만 커밋에 포함된다.
Git에서 관리할 파일 혹은 폴더를 지정하는 명령어.
commit: Staged 상태의 파일들을 저장소에 기록할 때 사용. git commit -m "커밋 메시지" 형식으로 사용하며, 저장소에 변경 내용을 기록할 때는 항상 의미 있는 메시지를 작성하는 것이 좋다.
add로 Git에서 관리할 파일 등을 추가한 뒤에, commit 작업을 해주어야 실제로 반영이 된다. Changes to be committed:으로 분류된 부분이 없어졌다면 제대로 반영된 것.
(commit을 해야 다음 버전으로 반영된다는 소리.)
Git으로 관리되는 폴더 내부에 새 파일을 생성하면, 변경 사항이 갱신된다.
txt 파일 하나를 생성하고, 편집 모드에서 아무 텍스트나 작성한 뒤 해당 파일의 '+' 아이콘을 클릭한다.
변경 사항이 git add 명령어를 통해 Staged 상태로 넘어간다.
다음 단계는 Commit. 누가봐도 커밋이라고 쓰여져 있는 크고 아름다운 파란 버튼을 클릭하면 된다.
Git 저장소에 설정된 원격 저장소 목록을 확인하는 명령어.
(-v는 "verbose"의 약자로, 자세한 정보를 출력하라는 의미)
이 명령어를 입력하면 원격 저장소의 이름과 해당 URL이 출력된다.
연동이 되었다면 대략 이런 텍스트들이 출력된다.
(fetch: 원격 저장소에서 데이터를 가져올 때 사용하는 URL.)
(push: 로컬 변경 사항을 원격 저장소로 푸시할 때 사용하는 URL.)
Git remote -v는 원격 저장소가 제대로 설정되었는지 확인할 때 유용하고, 여러 개의 원격 저장소를 연결한 경우, 각각의 URL을 확인하는 데 사용할 수 있다.