Git

Git/Github Day 1

김병찬 2024. 10. 13. 11:23

버전 관리

내가 원하는 시점으로 이동할 수 있게 해 주는 것,,

 

Git

source code 버전 관리 system 으로, 시간 여행 이상의 기능을 제공한다. 데이터를 저장할 공간만 있다면 어디서나 사용할 수 있다.

 

Github

Git 으로 관리하는 프로젝트를 올려줄 수 있는 Git hosting site.

Open-source
누구든지 볼 수 있는 공개저장소 Project. ex) Tensorflow, Swift, Vue.js 등

 

로컬저장소

실제로 Git을 통해 버전 관리가 이뤄질 내 컴퓨터에 있는 폴더.

1. Git init 

Git 초기화 과정으로, 이 명령어를 실행하고 나면 해당 폴더에는 [.git] 이라는 폴더가 자동으로 생성됨.

Git folder (기본 속성 : 숨김)
Git으로 생성한 버전들의 정보와 원격저장소 주소 등이 들어있는데, 이것을 Local 저장소라고 부른다.

 

2. commit

하나의 version

 

1️⃣ 내 정보 등록

Local 에서만 version 관리를 할 거라면 Github에 등록하지 않은 걸 입력해도 된다.

$ git config --global user.email "Github@gmail.com"
$ git config --global user.name "real user name"

 

2️⃣ commit 에 추가할 파일 선택

$ git add README.txt

 

3️⃣ commit

$ git commit -m "상세 설명"

 

다른 commit 으로 시간 여행

1️⃣ 지금까지 만든 commit 확인

$ git log

 

2️⃣ commit 을 확인 후 commit ID를 복사 (전체 복사 or 앞 7자리 상관없음) 하고 checkout 명령어로 되돌림

$ git checkout commitID

 

 

3️⃣ 최신 commit으로 돌아가려면 $ git commit -

 

원격저장소

Github web-site에 Project를 위한 공용 폴더 (Github page에서는 Repository)

 

1️⃣ Github homepage에서 [New Repository] menu 선택

2️⃣ 세부 항목 작성 (Repository name, Description)

HTTPS 주소를 통해 원격저장소에 접근할 수 있음

3️⃣ 원격저장소에 commit 올리기

❶ Local 저장소에 원격저장소 주소를 알려준다

$ git remote add origin 원격저장소의 주소

 

❷ 로컬저장소에 있는 commit 들을 push 명령어로 원격저장소에 올리기

$ git push origin master or main

 

4️⃣ 원격저장소의 commit 들을 로컬저장소에 내려받기

Clone : 원격저장소의 code와 version 전체를 내 컴퓨터로 내려받는 것.

$ git clone 원격저장소의 주소 .

 

. 의 의미는 한 칸 띄고 마침표를 넣는건데, 하지 않으면 Folder가 하나 더 생긴다.

 

원격저장소의 새로운 Commit을 로컬저장소에 갱신

1️⃣ 원격저장소에 올렸던 새로운 Commit 을 로컬저장소에 내려받아서 현재 상태를 갱신한다.

$ git pull origin main or master

 

pull : 원격저장소에 새로운 Commit 이 있다면 그것을 나의 로컬저장소에 받아오라는 의미,,

 

Source Tree

Git 사용을 도와주는 GUI Program,,

 

1️⃣ Local (로컬저장소 목록)

컴퓨터에 저장되어 있는 Git 로컬저장소 목록을 보여준다. Gi으로 관리되는 모든 저장소가 자동으로 표시되는 것은 아니며, [add] tap 에서 Source tree에 추가할 수 있다,,

 

2️⃣ Remote (원격저장소 목록)

원격저장소 계정에 연결되어 있는 모든 원격저장소를 볼 수 있음,,

 

3️⃣ clone (원격저장소 클론)

원격 서버에 올라와 있는 Git 저장소를 내 컴퓨터에 download 및 연동 가능,,

 

4️⃣ create (로컬저장소 생성)

내 컴퓨터에 있는 일반 폴더는 Git으로 버전 관리할 수 있도록 로컬 저장소 생성. 모든 폴더는 해당 폴더 내에 로컬저장소를 생성해야 그 때부터 버전 관리를 할 수 있음,,

 

Github

1️⃣ Dashboard Context

원격 저장소를 관리하는 계정 변환,,

 

2️⃣ Your teams

단체 계정 안에 더 작은 분류인 Team을 만들 수 있음,,

 

3️⃣ Pull Requests

관련된 모든 Pull request를 볼 수 있음,,

 

4️⃣ Issues

각 저장소에서 해결해야 하는 일들을 이슈로 만들어 둘 수 있음. 이 Page에서는 나와 관련된 모든 이슈 파악 가능,,

 

5️⃣ Notifications

나와 관련된 모든 이슈, Pull requests, mention(닉네임 태그) 등이 알림으로 오고, 목록으로 저장됨,,

 

Github 원격 저장소 생성화면

1️⃣ Repository Name : 저장소 이름,,

2️⃣ Description : 저장소 간단 설명,,

3️⃣ Add .gitignore : Github에 올리지 않기를 바라는 파일이 자동으로 목록에 추가됨,,

4️⃣ Add a license : 라이센스 파일 추가,,

로컬 저장소를 Source tree에 불러오기

원래 존재했다면 [Add] tap 을 통해 추가하여 불러온다.

새로 생성한다면 Create,,

CUI 환경에서는 아래의 명령어를 통해 [.Git] folder 가 생성된다.

$ git init

GUI 환경에서는 위의 Source tree의 Create 를 통해 생성이 가능하다,,

 

따라서, Git은 이 [.git] 폴더에 버전 관리한 데이터와 이를 올릴 원격저장소의 주소(Github에서 만든 저장소 URL) 등 필요한 정보를 저장한다,,

 

'md' 확장자
텍스트 문서를 적기 위한 파일로, 'txt' 확장자와 동일하다. 이 파일은 markdonw document 라고 불리운다.

 

Source tree 사용

1️⃣ 스테이지에 올라가지 않은 파일은 기존 커밋에 비해 새로 만들었거나 수정했거나 삭제한 파일이 보이는 곳

2️⃣ commit 메시지를 적어야 하는 이유는 나중에 내가 이 파일을 왜 수정했는지 알기도 쉽고, 과거 커밋으로 돌아오는 일도 쉽기 때문임.

3️⃣ origin 은 우리가 연결한 Github 원격저장소의 닉네임

$ git remote add origin GihubURL

위 명령어의 뜻은 origin 이란 이름으로 원격저장소를 추가하라는 뜻임,,

4️⃣ master or main 은 우리가 커밋을 올리는 줄기의 이름.

 

 

Snapshot

Git은 commit에 바뀐 것만 저장하는 것이 아닌 전체 코드를 저장한다.

Subversion : Git과는 다르게 차이점만 저장한다.

이 차이점만 저장하는 방식은 버전을 보여줄 때 파일이 만들어졌던 맨 처음까지 거슬러 올라가며 바뀐 점을 모두 반영하는 계산을 해야 한다.

Git은 바로 앞에서 바뀐 커밋이랑 비교하는 연산 한 번만 해도 되고 바뀌지 않은 파일은 이전 파일의 링크만 저장하기 때문에 용량도 적고 계산도 하지 않아도 된다,,

 

Git으로 관리하는 파일의 4가지 형태

1️⃣ 프로젝트 폴더에 처음 Git 초기화를 하고 README.md 파일과 app.js 파일 두 개를 만든다. 이 두 파일은 모두 한 번도 commit 되지 않은 파일이기 때문에 untracked 상태이다.

 

2️⃣  add 명령어를 통해 두 파일 모두 stage에 올린다. 파일 상태가 untracked -> staged 로 변경됨

3️⃣ stage에 있는 파일 전체를 commit 명령어를 통해 하나의 snapshot, 즉 version으로 만들면 file state가 staged -> unmodified

4️⃣ push 명령어를 써서 원격저장소에 올린다.

5️⃣ app.js 파일을 수정해서 unmodified -> modified 로 변경하고, app.css 파일을 새로 만들어준다. (이 파일 상태는 untracted)

6️⃣ unmodifed 인 파일은 stage 로 올릴 수 없음. (변경 사항이 없기 때문에) 나머지 두 파일을 모두 스테이지에 올린다.

 

So, Git으로 관리하는 파일은 총 4가지 상태를 가지게 된다. 각각의 파일이 이 4가지 상태를 오고가며 버전 관리를 하게 된다.