티스토리 뷰
강태공 님의 인프런 git 강의 일부를 정리한 것입니다.
01. 버전 관리의 첫 시작
1) 버전 관리의 큰 그림
Git이란?
git
은 버전(형상) 관리 시스템 중 하나다.
버전은 유의미한 변화가 결과물로 나온 것이다.
버전 관리의 필요성
그럼 버전 관리는 왜 필요할까? 크게 세 가지 이유가 있다.
- 협업 : 대규모의 프로젝트는 혼자서 처음부터 끝까지 작업하기 힘드므로 여러 명의 개발자가 공동으로 작업할 필요가 있다.
- 롤백 : 버전에 심각한 문제가 발생하면 그 이전 버젼으로 되돌릴 필요가 있다.
- 백업 : 프로젝트 작업 기간 중 어떤 일이 벌어질지 모르므로 유의미한 변화가 나올 때마다 백업을 해두는 게 안전하다.
코드가 버전이 되기까지
작성한 코드가 버전이 되기까지 거쳐가는 3가지 공간이 있다.
- working directory(작업 공간)
- staging area
- repository(저장소)
위 세 가지다. 코드는 working directory(작업 공간) -> staging area -> repository(저장소) 순으로 거쳐서 버전이 된다.
working directory
- 내가 코드 작업을 하는 공간
- 파일, 코드들이 생성, 수정, 삭제되는 공간
- 파일 및 코드의 변화가 생기는 공간
- working directory 내 모든 변경사항을 버전으로 만들 필요는 없다.
- 미완성인 파일이 있을 수도 있음
- 테스트용 혹은 실수 등으로 만든 파일이 있을 수 있음
- 의도적으로 버젼 관리를 하고 싶지 않은 것도 있을 수 있음
따라서, working directory의 변경사항 중 버전으로 만들 것을 선별해서 선별된 것을 버전으로 만드는 것이 효율적이다.
staging area
- 버전이 될 후보들이 올라오는 공간(무대)
- working directory에서 선별
repository
- 버전들이 저장되어 있는, 저장될 공간
명령어
모든 git 명령어는 명령어 앞에 git
을 붙여준다.
git add <파일 이름>
: working directory에서 staging area로 보내는 명령어git add all
혹은git add .
으로 모든 파일을 staging area로 보낼 수 있다.
git commit -m "commit message"
: staging area에서 repository로 보내는 명령어git commit
만 입력후 enter를 누르면 좀더 자세한 commit message를 남길 수 있다.
2) 버전을 만들어보자
버전 관리 시작하기
버전 관리를 시작할 디렉토리로 이동해서 git init
명령어를 입력한다.
$ git init
그러면 숨김 파일로 .git
파일이 생성되면서 버전 관리가 시작된다.
git init
은 어떤 디렉토리 안에서 버전 관리를 시작한다는 명령어다.
git status
버전 관리가 되고 있는 해당 폴더의 현 상황을 알려주는 명령어다.
$ git status
아무 것도 하지 않은 상태에서는 untracked file
이라는 단어와 그 목록이 보이는데,
untracked file
은 해당 폴더 내에서 아직 버전 관리를 하지 않은 것, 새로 생긴 파일, add 된 적도 없고 commit 된 적도 없는, 한 번도 관리되지 않은 파일을 말한다.
working directry -> staging area | git add
이 파일을 staging area로 옮기려면 git add <파일 이름>
명령어를 사용하면 된다.
$ git add example.txt
했을 때 어떤 반응도 일어나지 않으면 해당 파일이 무사히 staging area로 넘어간 것이다.
반대로 stagin area에서 working directory로 다시 내릴 수도 있다.
git rm --cached file.name
여기서 --cached
옵션을 붙이지 않으면 로컬 저장소와 원격 저장소 둘 모두에 영향을 미치고, 붙이면 원격 저장소에만 영향을 미친다.
추가적으로 add할 파일이 엄청 많을 때,모든 변경사항을 한 번에 add 허려면 아래 명령어를 이용한다.
$ git add .
혹은
$ git add all
staging area -> repository | git commit
staging area에 올라온 작업물들을 버젼으로 만드는 행위를 commit이라고 하며 아래 명령어를 사용한다.
$ git commit -m "commit message"
commit message 는 이 해당 버젼이 어떤 변경 사항이 생겨서 이 커밋을 하게 되었는지, 어떤 유의미한 변화를 담았는지를 간략하게 적어줘야 한다.
지금까지 한 commit의 내역을 확인하는 명령어는 아래와 같다.
$ git log
git log
를 실행하면
commit aldsfjlaksjdflkajsflkj
commit aldsfjlaksjdflkajsflkj
commit aldsfjlaksjdflkajsflkj
위와 같은 목록이 나오는데이 무작위의 알파벳이 커밋의 id다.
짧고 간결한 commit message를 남길 경우애는 -m
옵션을 이용하여,
$ git commit -m "adfadsf"
를 입력하고,
길고 자세한 commit message를 남길 경우에는 옵션 없이
$ git commit
입력 후 넘어가는 vi 창에서 자세히 작성한다.
3) hello, github!
원격저장소의 필요성
하나의 파일이 세 개의 공간을 거치며 버전이 된다.
working directory -> staging area -> repository
commit을 하면 내 로컬 컴퓨터에만 저장이 되기 때문에 협업이 불가능하다.
그리고 만약 내 컴퓨터가 망가지만 백업도 못한다
즉, 이 로컬의 버전을 원격에서 저장해주는 인터넷 서비스가 필요한데, 그중 하나가 github다.
원격 저장소가 뭐지?
간단히 말해서 인터넷 서버 어딘가에 존재하는 저장소(repository)다.
내 컴퓨터 안에 있는 저장소는 local repository, 컴퓨터 밖에 있는 저장소는 remote repository다.
이 원격 저장소에 내가 작업한 버전을 업로드하는 것을 push
라고 한다.
원격저장소에 push하면 파일만 저장되는 것이 아니라 commit 내역 등이 모두 저장되므로 어떤 것이 변동되었는지 쉽게 공유할 수 있다.
즉, commit message를 정확히 작성할수록 협업이 원활해진다.
'Programming > Git' 카테고리의 다른 글
git cherry-pick 활용하기 (0) | 2021.06.30 |
---|---|
commit, add, pull, merge 취소하기 (0) | 2020.12.18 |
git에서 특정 브랜치만 clone하기 (0) | 2020.12.18 |