git
프로젝트를 원하는 순간으로 돌아갈 수 있는 프로그램. 명령어를 기본으로 한 명령어 프로그램.
터미널과 소스코드 어플리케이션을 통해 배우고자 함.
got --version //깔려있는지 확인가능
깃을 설치하면 깃에 대한 모든 환경설정이 gitconfig라는 파일안에 들어가게 된다. 아래서 확인가능
git config --list
q 를 누르면 다시 터미널로 돌아올 수 있다. 파일로 열어보고 싶다면
gir config --global -e
보통 커멘트 팔레트 툴에서 code라고 검색을 하면 shell command가 나와 설정을 할수 있게 해주고
code.
를 하면 현재 디렉터리가 비쥬얼스튜디오 코드로 열리게 된다.
파일열기
git config --global core.editor "code"
git config --global core.editor "code --wait"
//git config에 global적으로 작성하는거, core editor를 입력한다. code라고 하면
//파일이 열림과 동시에 터미널도 처리가능하도록 터미널 커서 가 깜박거리는데,
//반대로 wait라는 옵션을 주게되면 열어진 파일이 종료되기 이전에는 다를 명령어를 수행할 수없도록 함
사용자에 관련된 정보 설정
git config --global user.name "Star_e"
git config --global user.email "blueangle1004@gmail.com"
git config --global core.autocrlf true //윈도우
git config --global core.autocrlf input //맥
//운영체제마다 새로운 줄 바꿈을 할 때 들어가는 문자가 달라지는데, 이럴때 깃 레파지토리를 할떄
// 윈도우와 맥 사이에서 \r을 넣었다 빼줬다 하여 맞춰주는 역할을 해준다.
git config user.name //Star_e
git + config(명령) +option
[명령]
commit
add
자주쓰이는 명령어와 옵션 공부
git 공식사이트에서 documentation 안에 reference안에 가면 모든 명령어들을 확인가능하다.
cd projects//projects라는 폴더안에서 이용을 해보자
mkdir git //여기에 새로운 git이라는 디렉터리를 만들어보자
cd git // 디렉터리를 만들고 그 안으로 들어가보면
ls -al //로 지금 아무런 파일들이 없다는 것을 확인할 수 있다.
git init //을 하게되면 git이 초기화되었다고 나오는데
ls -al //을 다시 해보면 git이라는 숨겨진 폴더가 있는 것을 확인해볼 수 있다.
//폴더나 파일명앞에 .이 있으면 숨겨진 파일이다.
ls //만 이용하면 나오지않음
open.git //이 숨겨진 파일을 열면 깃 리파지토리에 있는 다양한 정보들을 확인할 수 있다.(깃 내부 구현사항)
//그리고 이렇게 깃을 초기화하게되면 기본적으로 master 브렌치가 생성이 되는데,
//기본적으로 commit해서 version을 관리하는 브렌치는 master 브렌치이다.
//이때 git을 삭제하고 싶다면
rm -rf .git //이라는 명령어를 통해서 숨겨진 .git을 삭제 가능하다(디렉터리가 아니라 프로젝트의 삭제)
ui로 git을 초기화하고 관리하는 방법
소스코드에 projects 폴더 안으로 git과 git_second로 creat해준다.
cd ..//git에서 나가서
ls //를 하면 확인이 가능하다
git status //git의 상태를 보는 명령어, 단축하고 싶다? global 안에 alias를 이용가능
git config --gloabal alias.st status//라고 작성해주면 st만 작성해도 사용할 수 있다.
git config --h //로 명령어에 대한 속성 값을 확인할 수 있다.
git의 workflow이해하기
git에는 크게 총 3가지의 작업환경이 나눠져 있다.
working directory : 우리가 프로젝트의 파일들을 수정하는 , 작업하고 있는 곳
staging area : 어느정도 작업하다가 version history에 저장할 준비가 되어있는 파일들응 옮겨놓는 곳
.git directory : version의 history를 가지고 있는 곳 (commit이라는 명령어로 staging에서 옮겨옴)
이렇게 .git directory에 옮겨진 파일들은 언제든지 checkout이라는 명령어를 통해 working directory로 가져올 수 있다.
이렇게 저장된 git history는 나의 컴퓨터에만(local) 저장되기 때문에, 안전상의 이유로 기기뿐 아니라 github와 같은 서버에 push라는 명령어로 서버에 업로드 할 수 있도록 한다. 또 서버에서 기기로도 pull아러는 명령어로 다운 할 수 있다.
각각의 version에는 어떤 정보가 담겨있을까?
각각의 commit에는 고유한 hash code가 부여, 이 것을 이용해 version 정보 참조가능하다. 또 id 뿐만 아니라 message와 주가 작성했는지, 작성한 날짜 및 시간은 언제인지 정보가 모두 포함되어있다.
working directory는 엄밀히 말하면 2가지 영역으로 또 나눌 수 있는데, untracked 영역과 tracked 영역이다.
git 이 이미 알고 있는(git이 이미 track하고 있는 파일)파일 이라면 tracked영역이고, 새로만들어진 파일이거나 기존에 존재하던 프로젝트에서 git을 초기화하게되면 git이 파일에 대한 정보가 전혀없는데, 아직 tracking이 되지않는 파일을 untracked에 넣는다. 또 git 이 track하고 있는 파일 중에서도 지금 수정이 되었는가 아닌가에 딸 unmodified, modified로 나눌수있다. unmodified는 이전 버전과 비교하여 수정이 되지않았기 때문에 오직 modified만 staging영역으로 넘어갈 수 있다.
C:\Users\USER\Downloads\cmder\projects\git (master)
λ echo hello world > a.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ open .
'open'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.
C:\Users\USER\Downloads\cmder\projects\git (master)
λ echo hello world > b.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ echo hello world > c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ ls
a.txt b.txt c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.txt
b.txt
c.txt
nothing added to commit but untracked files present (use "git add" to track)
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git add a.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
b.txt
c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git add *.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
new file: b.txt
new file: c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ echo ellie >>a.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
new file: b.txt
new file: c.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: a.txt
//a,b,c파일은 staging area에 있고 a파일은 modified공간에 있는 상태
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git add *
C:\Users\USER\Downloads\cmder\projects\git (master)
λ ls
a.txt b.txt c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
new file: b.txt
new file: c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ rm a.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ ls
b.txt c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git add *
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: b.txt
new file: c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git add .
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: b.txt
new file: c.txt
C:\Users\USER\Downloads\cmder\projects\git (master)
λ echo *.log > .gitignore
C:\Users\USER\Downloads\cmder\projects\git (master)
λ ls -al
total 12
drwxr-xr-x 1 USER 197121 0 8월 19 23:50 ./
drwxr-xr-x 1 USER 197121 0 8월 19 23:08 ../
drwxr-xr-x 1 USER 197121 0 8월 19 23:49 .git/
-rw-r--r-- 1 USER 197121 8 8월 19 23:50 .gitignore
-rw-r--r-- 1 USER 197121 14 8월 19 23:36 c.txt
-rw-r--r-- 1 USER 197121 6 8월 19 23:48 log.log
-rw-r--r-- 1 USER 197121 10 8월 19 23:48 style.css
C:\Users\USER\Downloads\cmder\projects\git (master)
λ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: c.txt
new file: style.css
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
어떤 파일의 내용이 수정되었는지
git diff //working directory에 있는 것만 비교
// a과 -는 이전 버전, b과 +는 지금 버전을 의미하는데 이때 이전 버전은 working directory에 있는 파일이라면 이전에 commit된 버전을 가리키거나
//또는 staging area에 변경된 내용이 있다면 그것이 이전 버전일 수도
cat c.txt
git diff --staged//staging area에 있는 것을 확인하고 싶을때
git giff --cached //staged와 거의 동의어라 같은 기능을 함
ui와 연결하여 사용하기
git config --global -e
git difftool
git difftool --staged
git commit
version 만들기
git commit
git log
echo add>> c.txt
git status -s
git add .
git commit -m "second commit"
내 working directory안의 모든 변경사항이 맘에 들어서 add를 굳이 사용하지않고도 commit을 하고싶을때
git commit -am "third commit" //a모든것m메세지와 함께
커밋을 어떤 정도의 규모로 해나가면 좋은지?
.git directiory는 history의 창고와 같다. 이름도 의미있게 지어야한다.
그리고 crasing된 내용을 고쳤다면 고친 내용만 포한된 commit을 만들어야한다.