Dia Egg - Shugo Chara

Git

Git 기초 정리

별ㅇI 2023. 8. 20. 00:19
728x90
반응형

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을 만들어야한다. 

728x90
반응형