git 을 한마디로 간단하게 정의하면, 로컬 컴퓨터에서 "프로그램 소스 버전관리 프로그램" 입니다.
그리고 로컬 컴퓨터의 git과 연동을 하면서, 원격지에서 git 처럼 버전관리하는 사이트는 github, gitlab 등 여러 가지 선택지가 있는데, 원래 가장 많은 사용자가 있는 github가 2020년 4월 유료로 제공하던 옵션을 거의 무료로 풀어버리면서(아래 기사링크 참고) 대부분의 개발자는 github를 사용하고 있습니다.
https://wptavern.com/github-opens-free-plan-to-unlimited-collaborators-on-private-repositories
1. git 설치
git 을 설치하기 위해서 검색창에서 git을 검색해서 git 홈페이지로 이동합니다.


사용하는 윈도우 PC의 bit에 맞는 설치파일을 다운로드해서 실행합니다.



특별한 옵션없이 기본값으로 git을 설치합니다.

git 에서 사용할 폴더를 설정합니다. 위 예시는 c:\tmp\SQL로 했는데, 임의의 폴더를 설정하면 됩니다. git을 처음 사용하기 위해서는 초기화를 해야 하는데, 초기화 명령어는 git init 입니다. git init 초기화 명령을 실행하면, 해당 폴더에 .git 디렉토리가 생성됩니다. git 에서 사용할 폴더를 변경하기 위해서는, 해당 폴더로 이동해서 git init 을 다시 실행하면 됩니다.


git 이름과 이메일을 지정하지 않으면, git과 vscode에서 git을 연동할 때 오류가 발생합니다.
git 명령어를 실행하면 이메일과 이름을 지정하라는 안내가 나타납니다.
git config --global user.email "이메일주소",
git config --global user.name "이름"
위 명령어를 실행해서 이메일과 이름을 설정합니다.
2. git, github 연동
1) github 회원가입

github 회원가입을 합니다. 로컬 컴퓨터의 git 만 사용해도 되지만, git과 github를 연동해서 사용하는 것이 일반적입니다. 로컬 컴퓨터에 있는 소스를 1) 백업, 2) 협업, 3) 공유하기 위해서는 github 사용이 필수입니다.
2) github 레포지토리 생성

최초 github 계정에 로그인하면 레포지토리가 없기 때문에, 좌측 "Create repository"를 클릭해서 레포지토리를 생성합니다.

Repository name 과 공개여부만 설정해서 Create repository를 생성합니다. 위 예시에서는 Repository name을 "study01", 공개여부는 비공개(Private)로 설정했습니다.
3) git, github 최초 연동

위 예시에서 study01 레포지토리를 생성하였습니다. 로컬 컴퓨터 git 과 연동하기 위해서 git 레포지토리에서 안내하는 명령어를 git 이나 vscode 터미널에서 실행합니다.
1) git 으로 지정한 폴더에 repository(예. study01)가 없는 경우는 에 있는 경우는 "...or create a new repository on the command line" 에 있는 git 명령어 6개를 실행하면 되고, 2) 이미 git 으로 지정한 폴더에 repository(예. study01)가 있는 경우는 에 있는 경우는 "...or push an existing repository from the command line" 에 있는 git 명령어 3줄을 실행합니다.

처음 git, github를 연동하기 위해 1) git 으로 지정한 폴더에 repository(예. study01)가 없는 경우는 에 있는 경우는 "...or create a new repository on the command line" 에 있는 git 명령어 6개를 실행하면, 위와 같이 github 로그인 창이 뜹니다. 본인의 github 아이디로 로그인 합니다.

github 에 정상적으로 로그인되면 로컬 디스크 git 에 설정된 폴더의 소스가 원격지 github의 레포지토리로 push가 완료됩니다.

github에 README.md 파일이 정상적으로 동기화 되었습니다.
4) 스테이징(add), 커밋(commit), 푸시(push)

git 을 사용할 때 가장 주의해서 알아야 하는 개념, 명령어는 스테이징(add), 커밋(commit) 입니다.
git에 반영(커밋 commit)하기 위한 사전단계는 스테이징입니다. 스테이징은 git add 명령어로 실행하는데, 스테이징을 한 대상만 커밋(commit) 명령어를 실행했을 때 git 에 반영됩니다.
예를 들어, ga.py, ga02.py 두 개의 파일을 추가하고, git add ga.py -> git commit -m "2nd commit" 명령어를 차례로 실행했을 때, add 명령어로 스테이징 한 ga.py 파일만 git 에 반영되고, ga02.py는 git 에 반영되지 않습니다.

로컬 디스크에 커밋(commit) 한 소스를 원격지 github에 반영하기 위해서는 푸시(push) 명령어를 사용합니다.
$ git push -u origin main
위 명령어 실행 후 github 홈페이지의 해당 레포지토리에서 변경된 파일현황을 확인할 수 있습니다.
5) github 레포지토리 삭제

Repositories - "해당 Repository" - Settings 맨 아래 Delete this repository 에서 삭제할 수 있습니다
최종 삭제하는 것을 확인하기 위해서 "아이디/레포지토리명"을 타이핑합니다
3. github 와 비주얼스튜디오코드(vscode) 연동
위에서 말씀드렸지만 로컬 디스크 git 으로 버전관리하는 것보다, 원격지 github 와 vscode를 이용해서 버전관리하는 것이 로컬 컴퓨터에 있는 소스를 1) 백업, 2) 협업, 3) 공유할 수 있기 때문에 훨씬 좋습니다.


git 기본 디렉토리가 변경되었거나 다른 폴더를 지정할 경우에는 F1-git clone 을 실행 - Clone from GitHub 클릭 해서 다시 git 폴더와 github repository를 설정합니다.
비주얼스튜디오코드(vscode) 에서 git, github를 연동하기 위해서는 GitHub 확장 프로그램을 설치해야 합니다.

"항상 vscode.dev에서 연결된 앱에 있는 이 유형의 링크를 열도록 허용" 체크하고 "Visual Studio Code 열기" 클릭합니다.

"Don't ask again for this extenstion" 체크하고 "Open" 클릭합니다.

github와 동기화할 로컬 디스크 폴더를 선택하면, 로컬 디스크에 자동으로 동기화한 github 레포지토리와 동일한 이름의 폴더가 생성되고 해당 레포지토리에 있는 소스가 다운로드 됩니다.

로컬 디스크에 있는 파일 3개를 github-vscode와 연동된 폴더에 생성하면, vscode는 왼쪽 세 번째 source control 아이콘에 자동으로 3개의 변경사항이 있다는 것을 표시해줍니다.

vscode 상단 메뉴(File, Edit, Selection...) 아래에 있는 SOURCE CONTROL 옆에 있는 v 표시는 로컬 디스크 커밋(commit) 아이콘이고, 아래 크게 표시된 v Commit 아이콘은 github와 연동하는 커밋(commit) 아이콘입니다. 주의해야 하는 점은 로컬 디스크 commit 한 다음, github commit을 해야 합니다.로컬 디스크 commit 을 하지 않으면, github commit 명령어가 종료되지 않고 계속 실행되는 오류가 발생합니다.

github 에 커밋(commit) 하기 전에 위에서 설명드린 것 처럼 + 버튼을 눌러서 커밋 대상을 지정하는 스테이징 작업부터 해야 합니다. + Stage All Change를 누르면, 위와 같이 github push 할 변경대상이 없기 때문에 Changes 에는 0으로 표시되고, github 커밋(commit) 대상인 Staged Changes 는 3으로 표시됩니다.

ver1 commit 코멘트로 SOURCE CONTROL 옆 로컬 디스크 commit(v 버튼)을 실행합니다.

로컬 디스크 commit 이 완료되면, 자동으로 github commit 버튼은 Sync Changes 로 변경됩니다.

Sync Changes 를 클릭하고, OK 버튼을 클릭해서 push 해서 commit 을 완료합니다.

github 에 정상적으로 반영된 것을 확인할 수 있습니다.

