요즘 대중적으로 널리 쓰여지는 git은 대부분의 개발자들이 능숙하게 사용하며,
많은 기업에서도 git을 선택해서 사용하고 있다.
깃은 버전을 편리하게 관리해줄 뿐만 아니라 우리가 작업하고 있는 파일들을
원하는 순간으로 돌아갈 수 있게 만들어준다.
많은 개발자들이 자신의 프로젝트를 깃허브에서 관리하고 있으며,
새로운 회사에 들어가면 협업을 할 때 깃허브를 통해 멋지게 해낼 수 있다.
깃은 명령어 기반 프로그램으로, 현업에서는 터미널을 주로 사용하지만 UI 클라이언트로 사용 또한 가능하다.(GUI)
-유튜브 '드림코딩by엘리' 中
뭔가를 만들고 프로젝트를 진행하면 컴퓨터의 특정 폴더에 작업들을 넣어 둔다.
git은 이 폴더 안에, 시간 여행이 가능한 평행 우주들을 만드는 것이다.
내가 수습하기 어려운 실수를 했거나 전이랑 뭐가 바뀌었는지 헷갈릴 때
언제든 폴더 내 상태를 과거로 되돌릴 수가 있다.
모든 파일이 저장된 상태를 아까로, 엊그제로, 혹은 아예 맨 초기로
또는 과거로 돌아가서 필요한 것만 챙겨서 현재나 다른 과거로 가져올 수도 있다.
뭔가를 만들다가 메인 작업에서 해보기에는 위험이 있는
실험적인 시도를 해보거나 고객이 뭘 좋아할지 몰라서 다른 버전으로 작업하고 싶을 때도
폴더 안에 여러 평행우주를 생성해서 이 버전, 저 버전으로 작업하다가
저쪽에서 작업하던 실험적 기능이 마음에 들면 이쪽으로 가져올 수 있다.
-유튜브 '얄팍한 코딩사전' 中
git을 처음 설정하기(cmder 사용)
git --version //git의 버전 확인하기
git config --list //설정파일 확인하기
code . //텍스트 에디터와 연결하기
git config --global user.name "winterrosy" //사용자 이름 설정하기
git config --global user.email "doingengineer@gmail.com" //사용자 이메일 설정하기
git config --global core.autocrlf true //줄바꿈 설정하기
git config --h //config에 대한 도움말을 보고싶을 때
줄바꿈 > 운영체제마다 에디터에서 줄바꿈을 할 대 들어가는 문자열이 달라지기 때문에 설정해주면 좋다.
윈도우는 true를, 맥은 input을 입력하여 설정한다.
git은 명령어 단위로 이루어진 간단한 프로그램이며, [git 명령어, 옵션 형식]으로 이루어져있다.
//add 명령어의 옵션
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
[--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--sparse]
[--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
[--chmod=(+|-)x] [--pathspec-from-file=<file> [--pathspec-file-nul]]
[--] [<pathspec>…]
git에서 사용가능한 명령어들은 공식 홈페이지에서 확인 가능하다.
cd 명령어로 해당 폴더로 이동할 수 있고, mkdir 명령어로 폴더를 새로 만들 수 있다.
git init 명령어는 깃을 초기화하며, 숨겨진 .git 폴더가 보인다. 숨겨진 폴더 .git 안에 시공간이 저장된다.
git init //해당 폴더가 git의 관리 하에 들어갔다.
git config --global user.name "winterrosy" //이름 설정
git config --global user.email "doingengineer@gmail.com" //이메일 설정
Work Flow
git에는 총 세 가지의 작업 환경이 있다.
- working directory
- staging area
- git repository 혹은 .git directory
working directory는 우리가 프로젝트의 파일들을 수정하고 작업하는 곳이고,
staging area는 어느정도 작업하다가 히스토리에 저장할 준비가 되어있는 파일을 옮겨놓는 곳이며
git repository 혹은 .git directory는 버전의 히스토리를 가지고 있는 곳이다.
프로젝트 폴더에서 a,b,c 파일들을 working directory에서 수정하고 있다가
b와 c파일이 준비가 되었다면 staging area로 옮기게 된다.
거기서 commit이라는 명령을 하면 git repository에 저장하게 된다.(깃 히스토리)
이렇게 git repository에 저장된 버전들은 checkout이라는 명령어로 언제든지 원하는 버전으로 돌아갈 수 있다.
저장된 깃 히스토리는 내 컴퓨터에만 보관되기 때문에 컴퓨터에 문제가 생기면 히스토리를 모두 잃어버릴 수 있다.
그래서 보통 깃 디렉토리를 내 pc뿐 아닌 깃허브 같은 서버(remote)에 push라는 명령어로 업로드해두며,
서버에서 다시 로컬로 다운받고 싶을 때는 pull이라는 명령어를 사용한다.
각각의 commit에는 스냅샷 된 정보들을 기반으로 고유 해시태그가 부여되며,
이 아이디를 이용해서 버전 정보를 참조할 수 있고 아이디 뿐만 아니라 버전 관련 메세지, 작성날짜, 시간과 같은 정보 또한 포함되어 있다.
working directory에 담는 파일은 untracked 파일과 tracked로 나뉜다.
언트랙 파일은 새로 만들어진 파일 or 기존 프로젝트에서 깃을 초기화한 것으로
파일에 대한 정보가 없는, 트래킹 되지 않은 파일이다.
트랙 파일은 깃이 트랙킹하고 있는 파일이며
수정 시점에 따라 unmodified, modified로 나뉜다.
수정이 된 modified 파일만 staging area로 옮길 수 있다.
echo hello world! > a.txt //a.txt에 hello world! 문장 추가
git status //git의 상태 확인
git status -s //간단하게 상태 확인
git add a.txt //staging area에 옮기기
git rm --cached * //staging area의 모든 파일을 working directory로 옮긴다
git add * //디렉토리의 모든 파일을 staging area로 옮긴다
git add *.css //모든 css파일을 트래킹한다
echo *.log > .gitignore //모든 log파일은 gitignore 파일안에 넣는다.
git diff //working directory의 변경사항 확인
git diff --staged //staging area의 변경사항 확인
git config --global -e //다른 프로그램으로 열기
commit
커밋을 하게 되면 git repository(깃 디렉토리)로 이동한다.
깃 디렉토리에는 어떤 규모의 커밋을 하는게 적당할까?
깃 디렉토리에 있는 커밋들은 우리의 작업들을 버전 별로 나눠서 관리할 수 있는 유용한 창고이다.
그렇기 때문에 히스토리에는 세분화하여 기능별로, 작은 단위로 만들어나가는 것이 좋다.
- 커다란 코끼리를 한꺼번에 히스토리에 넣기보단 작은 단위로 나눠서 저장하는게 좋다.
- 의미있는 이름을 지정해서 저장하는 것이 중요하다.
- 커밋의 메세지는 현재형, 동사로 만든다.
- 커밋에 해당하는 내용만 들어가는 것이 좋다.
Source Tree(GUI)와 cmder를 이용하여 git을 사용해보자.
git init을 해서 생겨난 숨겨진 폴더 .git 안에는 시공간이 저장된다.
폴더를 선택하고 그 안에 파일 cat, mouse를 만들면 소스트리는 해당 화면이 나타난다.
현재 파일 두 개가 만들어져 있는 이 순간을 타임캡슐에 묻어보자
git status //아직 타임캡슐에 담기지 않은 파일 보기
git add -A //이 곳의 모든 것을 타임캡슐에 담는다
git commit -m "first commit"//"first commit" 설명과 타임 캡슐을 묻는다
빨간색 글씨의 cat과 mouse는 아직 준비되지 않은 파일이다.
add 키워드를 사용하면 해당 파일들을 커밋 가능한 상태로 만들수 있게 된다.
소스트리에서는 해당 화면에서 커밋 작업을 할 수 있다.
cat을 삭제하고 mouse의 이름을 변경한 뒤 penguin 파일을 추가하였다.
status로 명령어를 확인하면 수정된 파일과 untracked 파일을 확인할 수 있다.
소스트리에서 커밋 작업으로 해당 순간을 타입캡슐로 묻어보았다.
커밋 이름은 "ADD MODIFY DELETE"이다.
git log 키워드는 캡슐의 정보들과 메세지를 확인할 수 있다(히스토리, 일련번호)
소스트리에서는 히스토리에서 확인 가능하다.
원하는 순간으로 돌아가려면?
이전에 묻었던 캡슐을 파내서 과거의 상태로 돌아가려면 어떻게 해야 할까?
첫번째로 Reset 방법이 있다.
돌아갈 과거의 이후 행적은 복원할 여지 없이 완전히 지우는 hard 작업이다.
git log에서 검색된 돌아가려는 지점의 일련번호 앞 여섯자리만 복사한 다음
git reset [일련번호] --hard 명령어로 가능하다.
add dog 시점으로 돌아가보았다.
이후 추가하였던 penguin 파일이 삭제되고, 삭제한 cat파일이 생겨난 것을 확인할 수 있다.
소스트리에서는 같은 방법으로 히스토리 -> 오른쪽 클릭 -> 이 커밋 초기화 선택
두번째로는 Revert 방법이 있다.
미래에 한 발을 걸치고 과거로 가는 방법이며, 변경된 내용을 다시 복원할 수 있다.
git revert [일련번호] 로 가능하다.
branch
평행우주를 만들고 싶을 땐 branch를 쓴다.
branch는 가지라는 뜻으로 현 시점에서 두 미래로 분리하겠다는 뜻이다.
새로 만들어진 branch는 원 branch의 현 상태를 그대로 가져가게 된다.
git branch my-idea //my-idea란 평행우주를 만든다
git checkout my-idea //my-idea로 이동
git checkout master //master branch로 돌아온다
git merge my-idea //my-idea를 master branch로 가져온다
git branch -D my-idea //branch를 삭제하기
rebase
다른 우주에서 가져오는 두번째 방법으로 한 줄로 재배치를 한다.
'Today I Learned' 카테고리의 다른 글
라이브러리와 프레임워크 (0) | 2021.12.21 |
---|---|
CSS, JS, 백엔드 기술의 방향성 (0) | 2021.12.17 |
인터넷과 데이터베이스, 호스트 (0) | 2021.12.12 |
SQL 이란? (0) | 2021.12.09 |
서버와 클라이언트 (0) | 2021.12.08 |