깃허브데스크탑과 소스트리로도 Git과 Github를 다룰 수 있지만, 이 글에서는 CLI를 이용하여 다루는 방법을 소개하려고 합니다.
원격 저장소는 코드를 효율적으로 관리하고 공유하기위해 사용됩니다. 만약 원격저장소가 없다면 소스코드 파일들을 압축파일로 만들어 구글 드라이브로 전달해야할 것입니다. 하지만 공유가 빈번하게 일어나는 협업 환경에서 압축파일로 공유하는 것은 매우 비효율적입니다.
Github를 사용하면 브랜치를 이용하여 각자 작업한 후 합칠 수도 있고, commit으로 작업 내용들을 기록하기 때문에 현재 버전에 문제가 있다면 이전으로 돌아갈 수도 있습니다.
맥은 terminal을 이용해서, 윈도우는 git bash를 이용해서 명령어를 입력하면 됩니다.
터미널을 켜서 아래의 명령어로 Github에 등록되어 있는 이름과 메일주소로 등록해줍니다. 어떤 위치에서 입력하든 상관없습니다. 최초에 한 번만 설정해주면 되고, Git은 커밋할 때마다 이 정보를 사용합니다.
명령어를 입력할 때는 <>괄호는 제거하고, 괄호 안에 있는 내용 대신에 적절한 값을 넣어주세요.
git config --global user.name "<이름>"
git config --global user.email "<메일주소>"
소스코드를 Git으로 관리하기 위해서는 Git 저장소가 필요합니다. 로컬에서 저장소를 사용하는 방법은 2가지가 있습니다.
1) 기존 디렉토리를 Git 저장소로 만들기
2) 기존 저장소를 Clone 하기
Github에 이미 저장소가 있다면 2)번 방법을 사용하면 됩니다.
프로젝트 파일들이 있는 폴더에 Git 저장소를 만들어보겠습니다. 먼저 프로젝트 폴더가 위치한 곳으로 이동한 후 아래의 명령어를 입력해주세요.( cd <폴더 경로>
명령어로 이동해도 되고, 폴더를 우클릭해 terminal 또는 git bash 창을 열어도 됩니다.)
git init
이 명령은 .git 이라는 하위 디렉토리를 생성하고 저장소를 초기화합니다. 이 디렉토리에서 Git 저장소가 관리됩니다.
git clone <원격 저장소 주소>
원격 저장소의 주소는 Github 저장소의 Code 탭에 초록색 Code 버튼을 누르면 볼 수 있습니다.
저 주소를 복붙해서 사용하면 되지만, 윈도우에서는 붙여넣기를 했을 때 특수문자가 붙어있는 것으로 인식해 에러가 날 수도 있습니다. 그런 경우에는 직접 치시길 바랍니다.
이제 프로젝트 안의 파일들은 Tracked(관리대상임)와 Untracked(관리대상이 아님)로 나뉩니다. 저장소에서 관리하기 위해서는 아래의 명령어로 파일을 추가해야합니다.
먼저 어떤 파일들이 있는지 살펴보겠습니다.
git status
아래와 같이 Untracked files을 확인할 수 있습니다.
git add -A
git add <파일 이름>
추가한 후 다시 확인해보면, Tracked 상태이면서 커밋에 추가될 Staged 상태라는 것을 확인할 수 있습니다. (“Changes to be committed” 에 들어 있는 파일은 Staged 상태라는 것을 의미합니다.)
이제 Staged 상태에 있는 파일들을 저장소에 저장해보겠습니다.
git commit -m "커밋 메세지"
-m
옵션을 이용해 해당 커밋에 대한 설명을 남길 수 있습니다. 기능 개선에 관련된 커밋인지, 기능을 추가한 것인지, 버그를 해결한 것인지 설명을 잘 남겨두어야 관리하기 좋습니다.
커밋 메세지를 잘 작성하기 위한 방법에 관심이 있다면 아래 글을 참고바랍니다.
https://blog.ull.im/engineering/2019/03/10/logs-on-git.html
아래와 같이 Git으로 관리하고 싶지 않은 파일은 .gitignore 파일로 커밋 대상에서 제외할 수 있다.
- 보안상으로 위험성이 있는 파일
- 프로젝트와 관계없는 파일
- 용량이 너무 커서 제외해야되는 파일
참고: https://programming119.tistory.com/105
먼저 프로젝트 폴더에 .gitignore 파일 만들어줍니다. 저는 vi편집기를 사용하기 때문에 아래와 같은 명령어로 파일을 만들어주었습니다.
vi .gitignore
파일을 만들었으면 파일을 열어서 제외하고 싶은 파일 이름을 차례대로 쓰면 됩니다.
.gitignore 파일에 입력하는 패턴은 아래 규칙을 따른다.
#
로 시작하는 라인은 무시한다.브랜치는 독립적인 작업 영역이라고 할 수 있습니다. 다른 브랜치에 영향을 받지 않기 때문에 독립적으로 작업할 수 있습니다.
저는 두 가지 방식으로 브랜치를 사용해봤습니다.
1) 페이지별로 브랜치 생성 & 작업
2) 기능 개선, 기능 추가 또는 버그 해결과 같이 작업 내용별로 브랜치 생성
개인적으로 2)번 방법을 추천합니다. 그 이유는 다음과 같습니다.
페이지별로 브랜치를 생성했을 때는 어떤 작업을 하고 있는지 가늠할 수가 없었습니다. 그리고 병합해야 하는 시점이 명확하지 않다보니 병합을 미루게 되었고, 나중에 병합할 때쯤에는 작업 내용이 많아서 충돌하는 부분이 많았습니다. 페이지별로 또는 작업하는 사람별로 브랜치를 나누는 것은 좋지 않은 것 같습니다.
기능 추가 또는 버그 해결과 같이 작업 내용별로 브랜치를 나누고, 그 작업을 완료했을 때 병합한 후 해당 브랜치를 삭제하면 됩니다. 이렇게 하면 충돌도 적고 관리하기 더 편리합니다.
브랜치를 잘 사용하는 것은 협업을 효율적으로 하기 위해 아주 중요하기 때문에, git-flow나 github-flow와 같은 브랜치 전략이 존재합니다.
git branch
git branch <브랜치>
ex) git branch test
git checkout <사용할 브랜치>
ex) git checkout test
git checkout -b <브랜치>
현재 브랜치에 <병합할 브랜치>를 병합함 → 현재 브랜치를 잘 확인하기
git merge <병합할 브랜치 이름>
git branch -d <삭제할 브랜치>