얼마전에 깃허브 사용하는 법도 간신히 익혔는데...이번에는 Git 입니다! (대체 GitHub랑 Git은 뭐가 다른거야!?!?내가 왜 알아야 되는데!? 반항심이 생길 뻔했지만...git을 활용하다 보니 너무 편하고 익숙해지니 쉽더라구요!)
Git이란?
Git은 버전관리시스템 (Version-Control System) 입니다.
Git은 시간여행과 평행우주여행이 가능합니다.
시간여행이란? 내가 지금 작업한 내용을 저장할 수도 있지만 내가 이전에 저장했던 기록으로 돌아갈 수도 있다는 것입니다. 즉, 과거부터 현재까지 시간여행이 가능하죠~
평행우주여행이란? 내가 지금 작업한 내용과 똑같은 세계(환경)를 만들어서 기존의 세계에는 영향을 주지 않고 새로운 세계에서 작업을 하는 것을 말합니다. 물론 새로운 세계에서 작업한 것을 기존의 세계에 덮어쓰고 합치는 방법도 존재합니다.
따라서 Git은 개발자들끼리 힘을 합쳐 하나의 프로젝트를 수행할 때 매우 도움이 됩니다!
저도 취뽀하면 Git을 더 많이 활용하겠죠!? (얼른 하고싶다 취뽀...ㅜ)
Git은 CLI (Command Line Interface)로도 작업할 수도 있지만 GUI (소스트리)로도 지원을 하기 때문에 시각적으로 관리할 수도 있습니다. 하지만 보통 CLI를 통해 사용하기 때문에 저는 CLI에 익숙해지려고 합니다!
Git에 대해 알았고 활용을 해야하니 설치를 해야겠죠?
하지만 설치하는 방법은 생략하고 바로 자주 쓰이는 명령어들을 보겠습니다!
먼저 명령어를 크게 2가지로 나눠볼 수 있을 것 같습니다.
로컬에서 깃을 제대로 활용하기 위한 명령어와 깃과 깃허브를 원활하게(?) 잘 활용하기 위한 명령어로요!
먼저 로컬에서 작업할 때 주로 사용하는 명령어를 살펴보겠습니다.
<로컬에서 작업할 때 주로 사용하는 명령어>
VS Code 등을 통해 프로젝트 또는 코드를 수행할 폴더를 열어줍니다.
저는 APPLE 이라는 폴더에서 작업을 수행할 것입니다. 폴더 안에는 Banana와 Strawberry 파일 2개가 있습니다.
VS Code에서 git 작업을 수행할 예정인데 작업을 위해 터미널을 열어야합니다. 윈도우에서는 Ctrl + ` 를 통해 터미널창을 열 수 있습니다.
1. git init
폴더에 git 저장소를 만들기 전에 깃이 있는지 확인하기 위해 git --version을 수행하는 것이 좋습니다.
git --version
만약 git이 제대로 설치되어 있다면 설치한 버전이 나타나겠죠?
그 다음에 해야 할 것은 git init 명령어입니다.
터미널에 git init을 치면 해당 폴더에 git 저장소가 만들어지고 해당 디렉토리에 깃을 시작하고 버전 관리를 하게 됩니다.
이 명령어를 실행하고 깃을 생성하면 해당 디렉토리에는 .git 이라는 폴더가 생깁니다.
git init
2. git status
깃의 현재 상태를 보고 싶을 때 사용하는 명령어입니다.
현재 어떤 파일들을 추적하고 있으며 파일들이 어떤 상태인지 어떤 브랜치에서 작업하고 있는지 등 여러가지를 알려줍니다.
제 디렉토리는 master 브랜치에서 작업을 하고 있고 아직 커밋할 파일은 없지만 tracking하고 있지 않은 파일이 있네요.
이 말인즉슨, 깃 저장소를 git init을 통해 생성했다고 해서 자동으로 모든 파일들을 관리하고 기록하지 않다는 것입니다. 따라서 깃을 통해 원하는 파일을 tracking하고 싶으면 다음의 명령어를 통해 tracking을 시작합니다.
3. git add 파일명
git add 명령어 뒤에 관리를 시작할 파일명을 적어주면 해당 파일은 tracking되기 시작합니다. 저는 Apple 폴더 안에 모든 파일들을 tracking하고 싶기 때문에 다음의 명령어를 통해 작업을 수행했습니다.
git add .
git add를 수행한 후 status를 확인하니 아직도 커밋된 것은 없지만 commit할 수 있는 파일들이 생겼네요!
4. git commit -m "이 사진은 어떤 사진이야!"
commit은 "지금 이 순간"을 기록하는 겁니다. 이후에 여러가지 작업을 수행한 다음에 다시 "지금 이 순간"으로 돌아올 수 있도록 저장해 놓는 겁니다. 지금 이 순간이 어떤 순간인지 기억해내기 위해서 반드시 커밋 메시지를 기록해야 합니다.
git commit -m "지금 이 순간은 이런 순간이지"
저는 'My First Commit'이라는 기록을 남기며 커밋했습니다. 2개의 파일을 커밋했다고 나오네요.
5. git log
git log는 로컬 저장소의 커밋 히스토리를 탐색하는 명령어입니다.
특히, git log --all --graph --oneline 명령어는 모든 브랜치를 한 줄씩 그래프 형태로 볼 수 있습니다.
git log # 로컬 저장소의 커밋 히스토리 탐색
git log --stat # 버전마다 관련된 파일들을 그룹핑하여 확인
git log -p # 엄~~~청 복잡한 코드에서 문제가 생겼을 때 추적하기 좋은 방법
git log --all --graph --onelie
6. git checkout 브랜치명
git branch 명령어를 통해 브랜치 목록을 보여줄 수 있습니다.
현재 저의 branch는 master 하나만 있습니다. 하지만 만약 master 하나의 브랜치가 아니라 여러 개의 브랜치를 가지고 있다면 내가 원하는 브랜치로 이동하여 작업을 할 수 있어야겠죠!?
이를 위해 다음의 명령어를 사용합니다.
git branch # 브랜치 목록 출력
git checkout 전환할브랜치명
7. rm -rf .git
만약 git을 지우고 싶거나 실수로 만들었을 때 다음의 명령어로 git을 제거할 수 있습니다.
git을 제거하는 방법은 .git 폴더를 제거하면 되기 때문에 해당 디렉토리에서 수행하면 됩니다~
제 폴더에 .git 폴더가 사라졌습니다!
rm -rf .git
<깃을 활용해 깃헙과 작업할 때 주로 사용하는 명령어>
깃헙과 깃을 활용한 작업 프로세스는 fork - clone - 작업 수행(파일 수정 시 git add) - commit - push - create pull request 로 기억해두시면 돼요! 여기서 fork하고 create pull request는 깃허브에서 작업하면 되구요!
1. git clone 주소
이미 존재하는 원격저장소를 로컬저장소로 복제해옵니다. 즉, 깃허브에서 fork하거나 내가 만든 저장소(레포)를 내 로컬저장소(내 컴퓨터)에 가지고 오고 싶을 때 사용하는 방법입니다.
깃허브에서 주소는 저기를 복사하면 됩니다! 물론 download ZIP을 통해 컴퓨터에 저장할 수도 있지만 git을 활용하고 적응하기 위해 사용합시다!ㅎㅎㅎ 압축을 풀지 않아도 돼요!
2. git remote
현재 깃과 연결되어 있는 git remote, 원격과 관련된 명령어입니다. 현재 어떤 원격 레포 주소들과 연결되어 있는지 보고 싶을 때 다음 명령어를 사용할 수 있습니다.
git remote -v
원격 주소를 추가할 수도 있습니다. 'apple' 이라는 원격 주소 이름으로 'https://~~~~~' 을 연결하고 싶다면 다음과 같이 됩니다. 이와 마찬가지로 원격 주소를 지우고 싶다면 remove하면 됩니다.
git remote add apple https://주소입력
git remote remove apple
3. git pull
git pull = git fetch + git merge 를 순서대로 실행한 명령어입니다.
git fetch는 특정 주소에서 변경된 사항을 가지고 오는 명령어입니다.
git fetch apple main # apple이라는 원격주소 이름의 main 브랜치가 깃허브에서 업데이트 되어서 변경된 내용을 가지고 오겠다.
git merge는 변경된 사항을 가져오기만 했으니까 따로 저장되지 않은 임시 브랜치이기 때문에 작업하고 있는 브랜치와 합쳐 변경사항을 적용하는 것입니다.
git merge 브랜치명
git pull은 이러한 과정을 한 번에 수행하는 것입니다. 즉 변경사항을 원격 주소에서 가지고 온 뒤에 합쳐서 적용시키는 것입니다
'Data Engineering' 카테고리의 다른 글
[과제 수행 과정] (0) | 2021.03.15 |
---|---|
pip과 conda의 install 차이 (0) | 2021.03.13 |
아나콘다(Anaconda) 사용법 (0) | 2021.03.13 |
하나의 레포(Repo)에 여러개의 branch가 있을 때 (0) | 2021.03.05 |
[VS] Conda activate: CommandNotFoundError (0) | 2021.03.04 |
댓글