[TIL] 211027

Lee Syong·2021년 10월 27일
0

TIL

목록 보기
70/204
post-thumbnail

📝 오늘 한 것

  1. git workflow / working directory(untracked, tracked) / staging area / git add . / git rm / git mv / git status -s, -b / git diff / cat / git diff --staged / git config

📖 학습 자료

  1. 드림코딩 'Git 마스터 과정' 강의

  2. 드림코딩 유튜브 깃, 깃허브 제대로 배우기 (기본 마스터편, 실무에서 꿀리지 말자)


📚 배운 것

1. Git Workflow

프로젝트 파일을 수정, 작업하고 있는 working directory

git add

어느 정도 작업하다가 버전 history에 저장할 준비가 되었다면 해당 파일들을 옮겨놓는 staging area

git commit

버전에 history를 가지고 있는 .git repository 또는 .git directory

git checkout

.git directory에 저장된 버전들은 언제든지 원하는 버전으로 다시 돌릴 수 있다

git push

github와 같은 서버에 나의 .git directory를 업로드해둔다

git pull

서버에서 로컬로 다시 다운로드 받고 싶을 때

각각의 커밋에는 스냅샷된 정보들을 기반으로 해서 고유한 해시코드가 부과된다. 이를 이용해 버전 정보를 참조할 수 있다. 그밖에도 버전 관련 메시지, 누가 언제 작성했는지에 대한 정보들도 포함되어 있다.


2. File Status

1) Working Directory

(1) untracked

  1. 새로 파일을 만들거나 기존에 존재하던 프로젝트에서 git을 초기화한 경우, git이 그 파일에 대한 정보를 전혀 모르기 때문에 untracked 상태라고 할 수 있다

  2. 맨 처음에는 git add 명령어를 이용해 working directory에서 staging area로 옮겨줘야 tracked 상태가 된다

(2) tracked

  1. git이 이미 알고 있어서 tracking 중인 파일이라면, tracked 상태라고 할 수 있다

  2. 그렇게 tracked 상태가 된 파일이

  • 이전 버전과 비교해 수정되지 않았다면, unmodified 상태
  • 이전 버전과 비교해 수정되었다면, modified 상태 → 이 파일만 다시 git add 명령어를 이용해 staging area로 옎길 수 있다

🔎 실습 '로컬 파일들 추가하기 add'

  • git init
    → git 초기화 (.git 파일 만듦)
  • rm -rf .git
    → git 삭제
  • echo hello world! > a.txt
    → hello world! 라는 내용을 가진 a.txt 파일 생성
  • rm a.txt
    → a.txt 파일 제거
  • 터미널에서 (master) 글자 색이 노란색이 되늴, working directory에 아직 commit 되지 않은 변경 사항이 있음을 의미한다
  • ( git add b.txt c.txt ) 대신 ( git add *.txt ) 라고 할 수 있다.

2) Staging Area

git add
working directory에서 staging area에 추가하기

git rm --cached *
staging area에서 지우고 working directory로 보내기

💡 git add * 와 git add . 의 차이

git add * 한 후에 어떤 파일을 working directory에서 삭제했다면, 다시 git add *를 하더라도 그 변경사항은 staging area에 추가되지 않는다. 이럴 때 git add .을 사용할 수 있다.

💡 rm / mv와 git rm / git mv의 차이

터미널 명령어 rm을 이용해 파일을 삭제하면(mv를 이용해 파일명을 바꾸면) 그 변경사항은 working directory에만 남아 있다.
따라서, 이 변경사항을 포함해서 commit 하려면, 먼저 [ git add . ]을 사용해 그 변경사항을 staging area에 추가해줘야 한다

그러나, git 명령어 git rm을 이용해 파일을 삭제하면(git mv를 이용해 파일명을 바꾸면) 자동으로 변경사항이 staging area에 추가되므로 바로 이 변경사항까지 포함해서 commit 할 수 있다.

tracking 하고 싶지 않은(git과 github에 올리고 싶지 않은) 파일들은 gitignore 파일에 추가한다

  • echo *.log > .gitignore → log로 끝나는 모든 파일
  • echo build/ > .gitignore → build라는 디렉토리 안에 있는 모든 파일
  • echo build/*.log > .gitignore → build라는 디렉토리 안의, log로 끝나는 모든 파일

3. Status & Diff

1) 현재 상태 확인하기 git status

git status -h 를 통해 뒤에 사용할 수 있는 옵션 확인

  • git status -b (긴 버전, git status 기본값)
  • git status -s (짧은 버전)

이를 통해 어떤 파일이 수정되었고, staging area에 있는지 없는지를 확인할 수 있다. 그러나, git status로는 파일의 어떤 내용이 어떻게 수정되었는지는 확인할 수 없다.

2) 파일 비교하기 git diff

(1) git diff

git diff를 사용해 working directory의 변경사항들만을 확인할 수 있다.

[ 예시 ]

Îť git diff
diff --git a/c.txt b/c.txt
index 12a8798..311c32c 100644
--- a/c.txt
+++ b/c.txt
@@ -1 +1,2 @@
hello world!
+add

diff --git a/c.txt b/c.txt

a는 이전 버전, b는 지금 버전을 의미한다.

여기서 '이전 버전'이란 (working directory에 있는 파일의 경우) 이전에 commit된 버전 또는 staging area에 있는 파일을 가리킨다

--- a/c.txt
+++ b/c.txt

이전 버전과 지금 버전을 비교한다

@@ -1 +1,2 @@
 hello world!
+add

-는 이전 버전을 의미한다. -1은 이전 버전의 첫 번째 줄을 의미한다.
위 예시에서는 이전 버전의 첫 번째 줄에 hello world!가 있음을 의미한다.

+는 지금 버전을 의미한다. -1, 2는 지금 버전의 첫 번째 줄에서 두 번째 줄까지를 의미한다. 위 예시에서는 hello world!가 있던 상태에서 add라는 텍스트가 추가되었음을 의미한다.

추가가 되었다면, + 다음에 변경된 추가된 나온다. 보통은 초록색으로 표기된다. (위 예시의 경우, +add)
삭제가 되었다면, - 다음에 삭제된 내용이 나온다. 보통은 빨간색으로 표기된다.

(2) git diff --staged

그런데, git diff만으로는 working directory에 있는 변경사항들만 확인해볼 수 있다.

cat c.txt

cat 명령어를 이용해서 c.txt 파일에 있는 내용을 확인해보면, hello world!와 add가 나오지만, hello world!는 staging area에 들어 있고, add는 아직 working directory에 있기 때문에 git diff를 이용하면 add만 나온다.

git diff --staged
git diff --cached (cached는 staged와 동의어로 사용된다)

staging area의 변경사항을 확인하기 위해서는 git diff --staged를 사용할 수 있다.

[ 예시 ]

Îť git diff --staged
diff --git a/c.txt b/c.txt
new file mode 100644
index 0000000..12a8798
--- /dev/null
+++ b/c.txt
@@ -0,0 +1 @@
+hello world!
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..65699e6
--- /dev/null
+++ b/style.css
@@ -0,0 +1 @@
+styling

diff --git a/c.txt b/c.txt

c라는 파일이 있다

--- /dev/null
+++ b/c.txt

이전에는 없었는데
c라는 파일이 추가되었다

@@ -0,0 +1 @@
+hello world!

이전에는 어떤 줄도 없었지만
새로운 파일의 첫 번째 줄에 hello world!라고 추가되었다

diff --git a/style.css b/style.css

style.css라는 파일이 있다

--- /dev/null
+++ b/style.css

이전에는 없었는데
c라는 파일이 추가되었다

@@ -0,0 +1 @@
+styling

이전에는 어떤 줄도 없었지만
새로운 파일의 첫 번째 줄에 styling이라고 추가되었다


✨ 내일 할 것

  1. 강의 계속 듣기
profile
능동적으로 살자, 행복하게😁

0개의 댓글