데이터 분석가지만, 서비스에 들어가는 알고리즘이나 로직개발을 하며 협업을 위해 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년 반만에 등장한 새 글보러 오세요 !
참고자료
https://escapefromcoding.tistory.com/281
https://nevertrustbrutus.tistory.com/153
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
'깃허브 github' 카테고리의 다른 글
[Git] 뉴비를 위한 Github 브랜치(branch) 가이드 (CLI ver) (0) | 2024.05.30 |
---|
댓글