티스토리 뷰
개발하는 프로젝트의 규모가 커지면 커질수록 많은 개발자들이 한 프로젝트 내에서 개발을 진행해야 하는 경우가 많이 생기게 되었다.
또한, 개인이 작업하는 경우에도 수정한 코드의 관리가 진행이 되야하는 경우가 있는데,
이렇게 소스 별로 관리를 하는 것 중 제일 많이 사용되고 있는 것이 바로 Git 이다.
우리가 흔히 알고 있는 GitHub, Git Bash, SourceTree, BitBucket 등은 모두 Git을 기반으로 작동하는 웹페이지 및 프로그램이다.
GitHub에서는 public으로 제공되고 있는 모든 소스들을 무료로 제공해주고 있다. 단, private을 사용하려면 일정의 금액을 지불해야 하는 것으로 알고 있다.
반면, BitBucket은 기업용으로 주로 많이 사용하고 회사에 소속된 개발자들만 접근이 가능하도록 구성되어 있다. 물론 public하게 만든 소스는 모든 사람들이 접근 가능하다.
Git을 공부하기 전에 Git을 먼저 설치하는 방법을 알아봐야 할 것이다.
다운로드 링크(OS별) : macOS / Windows / Linux
운영체제별로 위 링크에서 받은 파일을 설치한다.
이전에는 환경 변수와 path를 일일히 잡아주어야 했지만 현재는 바로 사용이 가능한 것으로 알고 있다.
설치가 완료되었으면 이제 기호에 맞게 프로그램을 설치해준다.
1. SourceTree : 가장 대표적으로 사용하는 깃 관리 프로그램으로 사용법이 쉽고 한글화가 잘 되어있는 것이 특징
2. GitHub Desktop : 실제 Web과 연결되어있고, 변경 내용을 보기 쉽게 UI가 적용
3. Fork : MacOS / Windows OS 에서 사용가능한 툴을 제공
4. GitKraken : 사용자가 커스터마이징이 가능하고, 1달을 무료로 사용 가능
사실 프로그램을 설치하지 않아도 프로그램 내에서 CLI 명령어로 처리가 가능하지만, 모든 명령어를 외우는 것이 번거롭고 워낙 보기 좋게 커스터마이징이 된 프로그램이 많아서 프로그램을 자주 사용한다. (참고로 IntelliJ 안에서도 기본 Plugin으로 설치되어 있다)
그럼 이제 본격적으로 Git에서 무엇을 할 수 있는지, 어떻게 하는지 확인해보자.
init
git init
저장소를 새롭게 생성하기 위한 명령어로 이 명령어를 치면 정말 쉽게 리포지토리를 생성할 수 있다.
이렇게 깃이 적용되어 있지 않은 것이 아래와 같이 변경되었다.
git: 이제 이 프로젝트는 git 명령어를 사용할 수 있게 등록되었다는 의미
(master) 현재 소스가 master 브랜치(기본값)로 연결되었다는 의미
그럼 브랜치는 무엇일까?
branch(브랜치)
Git의 가장 강력한 장점이자 Git을 사용하는 이유라고 할 수 있다.
내가 가지고 있는 소스는 한 개의 브랜치와 연결되어 있고, 이 브랜치를 어디서 뻗어나가느냐에 따라 소스의 개발 방향이 갈리게 된다.
제일 먼저 생성되는 브랜치는 master 브랜치이고, 근본적으로 모든 브랜치를 통합할 때에도 master브랜치로 향하게 된다.
브랜치는 무한정 늘릴 수 있다. 그리고 다른 사람이 사용하던 브랜치를 내가 다운로드 받아 이어서 작업할 수도 있다. 프로젝트가 분리된다면 불가능한 얘기지만 같은 브랜치 안에서는 그 브랜치를 사용하는 개발자와 협의하에 공동 작업이 가능하다.
단, 이렇게 작업하는 경우 같은 소스를 수정할 때는 충돌이 일어날 수 있다. 행여나 충돌이 발생해도 Git은 내가 수정한 모든 것을 저장하기 때문에 크게 문제될 것이 없다.
명령어는 3가지로 나뉜다.
branch 를 생성하는 -b
git checkout -b abbo
branch 를 삭제하는 -d
git checkout -d abbo
아무것도 없는 경우 이동을 한다. 하지만 초기 상태의 master에서는 브랜치 이동이 불가능하다.
git checkout abbo
여기서 사용하는 checkout은 우리가 알고있는 개념과 반대된다.
예를 들어, 여행을 갔을때 어느 호텔에 숙박하기 전에 보통 '체크인'한다고 한다. 이것은 우리의 관점이고, 호텔 주인의 관점에서 보았을 때는 손님에게 '체크아웃'을 해주는 의미가 된다.
Git 또한 마찬가지로 특정 브랜치의 사용 권한을 내주는 것이기 때문에 'checkout'이라고 한다.
macOS IntelliJ 기준으로는 오른쪽 아래 Git: master라고 써있는 곳이 있다.
새 브랜치를 생성하는 것은 + New Branch로 지정할 수 있고,
다른 브랜치를 가져오는 것은 여러 브랜치가 로컬에 checkout 되어 있다면 아래와 같이 확인할 수 있다.
기본적으로 체크아웃은 맨 위에 Checkout을 눌러도 가능하다.
체크아웃하는데 이름을 바꾸고 싶다면 Checkout As...
Rebase와 Merge는 뒤에 이어서 설명하도록 하겠다.
add, commit
작성하거나 코드를 수정하는 것을 유지관리하는 것도 정말 중요하다. 위 세개의 명령어는 그 소스를 관리하는데 직접적으로 영향을 준다.
git add --a
add는 내가 지정한 파일들에 대해 commit 상태로 가능하도록 추가를 하는 명령어이다.
--a는 현재 로컬에서 새롭게 만들어진 소스를 원격 브랜치와 비교하여 추가하기 위한 옵션이다.
git commit -m "메세지를 입력"
commit은 지금 내가 수정한 소스에 대한 내용을 기록하는 로컬 보관소에 저장한다.
-m 은 내가 어떤 부분이 수정되었는지 입력을 할 수 있도록 코멘트를 다는 옵션이다.
IntelliJ 기준으로 새로운 파일을 생성하면 아래와 같이 질문 창이 뜨게 된다.
여기서 선택하는 것에 따라 내가 생성한 파일이 add가 되고, 설령 바로 Add를 누르지 않더라도 파일의 오른쪽 클릭으로 add가 가능하다.
add가 되지 않은 파일은 빨간색으로 표시된다. (위에서 NewFile은 Add가 되지 않아 빨간색이다. Add 후에는 초록색으로 변한다.)
commit 방법은 아래와 같다.
여기서 소스들을 확인하고 커밋 메세지를 작성한 후 커밋을 누르면 commit 완료.
config, remote
이제 소스를 다 수정했고, 올릴 곳을 정할 차례이다.
config는 사용자의 GitHub Name과 ID를 입력하는 부분이다.
remote는 로컬과 원격 저장소를 연결할때 사용한다.
add origin를 통해 위의 url을 내가 올릴 깃으로 설정하였다.
IntelliJ의 경우는 GitHub 계정을 저장해서 사용이 가능한데, Preference -> Version Control -> GitHub에서 저장할 수 있다.
push, pull
위 두개는 이제 본격적으로 원격 브랜치에 올리는 것과, 원격 브랜치에 올라간 소스를 받는 명령어이다.
git push -u origin branchname
push: commit 내역의 리스트를 원격 저장소로 전송할 때 사용한다.
푸시를 진행한다고해서 체크아웃이 풀리지는 않는다.
아까 만들어두었던 commit에 담긴 내역과 그 메시지가 쭉 출력된다.
아래부터 commit한 내역이 시간순서로 출력되고 최종적으로 변경된 파일의 리스트는 오른쪽에서 확인이 가능하다.
혹시나 소스코드를 또 변경해야 한다?
그렇다면 다시 소스를 수정하고 commit -> push 또는 오른쪽 화살표를 누르면 Commit and Push가 있으니 이를 잘 활용하면 된다.
git pull
pull은 push와 반대로 원격 저장소에 있는 소스 파일의 HEAD에서 가져오는 명령어이다.
HEAD라는 것은 최근에 해당 브랜치로 푸시된 한 건을 의미한다.
참조
1. https://rogerdudler.github.io/git-guide/index.ko.html
'Git' 카테고리의 다른 글
[Git] Bitbucket 이용하여 private git project 생성 및 VS Code 연동 (8) | 2021.11.20 |
---|---|
[Git] Sourcetree Fatal: could not read username for 에러 해결법 (0) | 2021.11.08 |
[Jekyll] Jekyll을 Git에 올려보자 (0) | 2021.04.20 |
[Jekyll] Ruby를 설치해보자 (0) | 2021.04.19 |
[Git] Git Repository 전환 방법 (0) | 2020.12.07 |
[Git] Git(깃)에 대해 알아보자 (2) (1) | 2019.11.01 |