깃허브 github

[Git] 뉴비를 위한 Github 사용법 총정리 (CLI ver)

sseozytank 2023. 4. 14.

데이터 분석가지만, 서비스에 들어가는 알고리즘이나 로직개발을 하며 협업을 위해 Git사용이 꼭 필요해졌고  같은 초심자의 입장에서 Git을 사용하며 어려웠던 부분을 공유하면 좋을 것 같아 팀원분의 도움과, 여러 테크 블로그의 글을 서치해서 이 글을 작성합니다.

 

*해당 문서는 GUI가 아닌 CLI 기준으로 작성되었습니다.

 

 

목차

0. Git과 Github의 차이점

1. Github 기본 용어 정리 

2. Github 기본 프로세스

3. Github로 로컬 저장소 생성부터 merge 까지  

     3-1. 로컬 저장소 생성  (일반적인 디렉토리를 git working tree로) 

     3-2. 로컬 저장소와 GIt Repository 연결 

     3-3. Staging Area에 파일을 올려보자 

     3-4. Staging Area에 올라간 파일을 Commit 해보자.
     3-5. Commit한 파일을 Push 해서 원격 저장소로 보내자 

     3-6. 다른 사람의 코드를 가져오는 Clone 

     3-7. 원격 저장소의 수정사항을 로컬로 가져오기 Pull & Fetch

 

 

0. Git 과 Github의 차이점

1)Git 

- 로컬에서 관리되는 버전 관리 시스템 (시간에 따라 파일의 변경사항을 추적하고 기록) 

- 로컬 저장소를 사용하기 때문에, 다른 사람이 나의 작업 내용을 알 수 없음 

 

 

2)Github

- 개인의 로컬 서버 밖에서 Git 버전 프로젝트를 공유하고 기록하는 온라인 데이터 베이스 

- 저장소를 깃허브에서 제공해주는 클라우드 서버를 이용

- 클라우드 서비스기 때문에 다른 사람들과 협업 시 소스코드 공유가 가능하다. 

 

1. Github 기본 용어 정리 

1)CLI (Command-line interface)/GUI(Graphical User Interface) 

- CLI : 명령어 인터페이스로, 주로 터미널을 통해 컴퓨터와 상호작용하는 방식 

- GUI : 입출력 등의 기능을 알기 쉬운 아이콘 등의 그래픽으로 나타낸 것 

 

2)Local/Remote 

- Local : 우리가 사용하고 있는 컴퓨터

- Remot : 원격 저장소 

 

3) Repository (repo, 저장소) 

- 프로젝트가 존재하는 저장 공간 

 

4)Branch (브랜치)

- Repositoy 의 공간에서 독립적으로 어떤 작업을 하기 위한 공간 

 

5)Commit

- 소스코드의 업데이트를 확정. 확정된 순간의 코드 상태를 메시지와 함께 Git Repo에 저장

* 로컬 저장소에는 변경이 반영되지만, 원격 저장소에는 아직 반영되지 않은 상태 (Push를 해주어야 반영된다) 

 

6)Pull/Push 

- Pull : 원격저장소의 내용을 로컬저장소에 끌어오는 것 

- Push : Commit한 내용을 원격 저장소에 업로드 

 

2. Github 기본 프로세스  

Github의 프로세스는 다음과 같다. 

  • 자신의 수정 내역을 원격 저장소에 내보내려먼 git add ->  git commit ->  git push의 과정을 거쳐아함
  • 수정 내역을 받아올 때는 git fetch 수행
  • 이 과정에서, 내가 수정한 내역이 원격 저장소에 있는 내역과 다를 수 있기 때문에 git merge를 수행하여 자신의 컴퓨터에 있는 소스코드  를 원격지 저장소와 맞추는 것  

 

Staging Area는 왜거치는걸까?

1) 작업 트리의 모든 변경 사항을 한 번에 커밋하는 대신 변경 사항을 분리할 수 있다. 

2) 개발자가 다른 브랜치로 변경사항을 이동하는 것도 더 쉬워진다. 

=> 변경 사항을 분리하고 더욱 효율적으로 관리하는 데 매우 유용한 도구이다. 

 

3. Github로 로컬 저장소 생성부터 merge 까지  

3-1. 로컬 저장소 생성  (일반적인 디렉토리를 git working tree로) 

- 일반적인 디렉토리를 git working tree로 만드는 방법은 cd를 통해 원하는 경로에 접속한 후 git init을 해주는 것이다. 

- 나는 Analyst 폴더에 git_practice 폴더를 만들어서 이 폴더를 git working tree로 바꿔주었다. 

#Input
cd /Users/sseozytank/Analyst/git_practice/.git/ #경로 수정
git init

#Output
Initialized empty Git repository in /Users/sseozytank/Analyst/git_practice/.git/

 

3-2. 로컬 저장소와 GIt Repository 연결 

1. Git Repo 만들기 

1) 깃허브 접속 

2) 왼쪽 상단 New 버튼 클릭 

 

3) 버튼을 누르면 나오는 부분을 작성 후 Create repostiory 버튼을 누르면 아까 그공간에서 만든 레포를 확인할 수 있다.  

 

2. 로컬 저장소를 원격저장소에 연결하는 방법

* remote-name 은 원격 저장소에 대한 별칭 , git address는 생성한 레파지토리의 URL 을 복사한 뒤 .git을 올려주면 된다. 

git remote add <remote-name> <git address>

#예시
git remote add git_test https://github.com/sseozy/github_test.git
git push -u

 

연결된 원격 저장소 확인하려면 

git remote --verbose

 

원격 저장소 이름을 변경하려면 

git remote rename <old-remote-name> <new-remote-name>

#예시
git remote rename git_test new_git_test

 

원격 연결을 삭제하려면 

git remote remove <remote-name>

 

3-3. Staging Area에 파일을 올려보자 

위에 그림에서 나왔던 대로 Local (3-1에서 생성한 Git Working Directory)에서 Staging Area에 파일을 올려보자.

(Git Working Direcoory로 설정한 git_practice에 한줄 코드를 적어 git_test.ipynb (jupyter) 파일을 작업했다)

git add <filename>

#예시
git add git_test.ipynb

 

git status 명령어를 통해 잘 되었는지 확인하면 잘 올라간 것을 확인할 수 있다 ! 

 

한번에 stage에 올리고 싶어요 

git add . 
git add --all 
#둘이 같은 명령어

 

특정 디렉토리에 있는 문서나, py파일만 올리고 싶어요

# * 라는 와일드카드를 활용하면 된다.
git add /new/*
git add *.py

 

한 파일 내에서 수정 사항만 준비 영역에 넣고 싶어요 

(기존에 stage에 올린 파일에 print문 한줄을 추가해서 다시 add해봤다) 

git add --patch git_test.ipynb

결과가 이렇게 뜨는 것을 확인할 수 있는데, 수정된 부분마다 옵션을 선택해주면 된다.

Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

나는 이것도 넣고 싶으니 y를 입력해주었다. 그럼 스테이지에 올라간 파일은 print("추가한 부분을 찾아야해요") 또한 반영돼서 올라간 것이다! 

3-4. Staging Area에 올라간 파일을 Commit 해보자. 

git commit -m "깃을 처음 사용했어요"

 

커밋 메세지를 수정하고 싶어요

git commit --amend

i를 눌러 수정한 후, ESC (에디터 모드에서 명령 모드로 변경)  -> :wq (저장 및 종료 모드 입력) -> Enter순으로 클릭 

 

3-5. Commit한 파일을 Push 해서 원격 저장소로 보내자 

git push <remote_name> <branch_name>

#예시
git push git_test main

푸쉬 후 잘 땡겨온 것을 확인할 수 있다! 

 

3-6. 다른 사람의 코드를 가져오는 Clone 

GIt에 Python을 검색해서 가장 유명하신 분의 코드를 Clone해보자.

git clone <git-address>

#예시
git clone https://github.com/TheAlgorithms/Python.git

설정된 경로에 잘 push된걸 확인할 수 있다. 

 

3-7. 원격 저장소의 수정사항을 로컬로 가져오기 Pull & Fetch

- Pull : 원격 저장소에서 변경된 정보를 확인하고, 최신 데이터를 복사하여 로컬 Git에 가져옴

git pull <remote_name> <branch_name>

#예시
git pull git_test main

*변경 사항이 없기 때문에 Already up to date라고 뜬다.

 

- Fetch : 원격 저장소에 변경사항이 있는지 확인만 하고, 변경된 데이터를 로컬 Git에 실제로 가져오지는 않음

따라서 fetch 수행 후 Pull 실행 시 더욱 안전

 

*Atom으로 주피터 파일을 작성하니 파일이 깨져서, 업로드 후 GUI상에서 .py로 변경해주었다.

 

 

다음 탄에는 본격적으로 branch에 대해 다뤄보도록 한다. 

 

+2024.06.11 추가

약 1년 반만에 등장한 새 글보러 오세요 ! 

 

[Git] 뉴비를 위한 Github 브랜치(branch) 가이드 (CLI ver)

[Git] 뉴비를 위한 Github 사용법 총정리 (CLI ver)데이터 분석가지만, 서비스에 들어가는 알고리즘이나 로직개발을 하며 협업을 위해 Git사용이 꼭 필요해졌고 같은 초심자의 입장에서 Git을 사용하며

sseozytank.tistory.com

 

 

 

 


참고자료

https://escapefromcoding.tistory.com/281

https://nevertrustbrutus.tistory.com/153

https://adjh54.tistory.com/22

https://opentutorials.org/module/3963/24425

https://ndb796.tistory.com/187

https://donghak-dev.tistory.com/219

https://greeksharifa.github.io/github/2020/05/27/github-usage-09-overall/

https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EB%8C%80%ED%99%94%ED%98%95-%EB%AA%85%EB%A0%B9

https://sabarada.tistory.com/75

https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/

댓글