깃 동작 원리

장우솔·2021년 12월 26일
0

git

목록 보기
2/3

git?

파일 자체를 수정하기보다 수정 내역 자체를 저장 ->메모리 적으로 효율적이다.

  • 깃 프로젝트 3가지 요소
    Working directory: 작업할 파일이 있는 디렉토리
    Staging area: 커밋을 수행할 파일들이 올라가있는 영역 (add 추가 명령이 사용될 때 영역)
    어느정도 작업하다가 버전히스토리에 저장할 준비 되어있는 파일 옮겨놓는 곳
    Git directory : git 프로젝트의 메타 데이터와 데이터 정보가 저장되는 디렉토리(.git 파일 존재)

  • 깃 동작 과정
    Working directory-(git add)->Staging area-(git commit)->git.directory/local repository[여기까지 내 컴퓨터]-(git push)->remote repository[원격 컴퓨터]-(git fetch)->local respository-(git merge)->working directory

    * git fetch : 다른 사람이 작업한 데이터를 자신의 컴퓨터의 받을 수가 있다.
    * git merge : 동시 작업을 하여 충돌이 발생하는 경우, 우리 컴퓨터와 리모트 리포지토리를 맞추어 주는 역할을 한다.
    -> 이 두가지 명령 합친 것이 git pull




    실제로 프로젝트의 메타 데이터를 포함해 각종 데이터는 .git에 담기게 된다.
    즉 환경설정과 관련된 폴더라고 생각하면 된다.
    각종 수정 내역들이 파일 형태로 저장되는 것을 볼 수 있다.
    각각의 작업 내역을 구분할 수 있도록 해시 값을 사용한다.
    커밋 내역을 관리한다.



  • 커맨드 라인 ( Command Line )

윈도에서는 명령 프롬프트(cmd)에서, 맥이나 다른 OS에서는 터미널이라고 하는 프로그램이다.
우리가 일반적으로 접하는 마우스로 클릭하는 프로그램이 아닌 키보드로 입력을 받아 명령을 수행한다.

  • 저장소 ( Repository )

프로젝트가 살고 있는 저장공간. (혹은 디렉토리라고 칭하기도 한다.)
이 저장소 안에 코드, 텍스트, 이미지를 저장할 수 있다.
각종 파일이나 소스코드가 담겨 있으면서 커밋 내역 등의 모든 작업 이력이 담긴 공간이다.
"repo" 라고도 부른다.

  • 버전 관리 ( Version Control )

팀 단위로 프로젝트를 운영할 때 필수적인 기능인데, 깃허브는 다수의 사용자가 하나의 페이지를 수정해도 각 사용자 별로 수정 내용을 저장한다.
모든 시점의 '스냅 샷'을 저장하기 때문에 겹쳐 쓸 일이 없다.

  • 커밋 ( Commit )

커밋을 하면, 그 시점의 자신의 Repo 스냅샷을 찍어서 체크포인트 깃발을 꽂아둔다. 생각하면 편하다.
보통의 체크포인트가 그렇듯이 수정을 하다 이 체크포인트로 되돌아가고, 복원할 수 있다.

  • 브랜치 ( Branch )

자신이 진행하는 프로젝트의 브랜치를 따서 (Branch off) 자기의 버전을 만드는 것이다.
작업을 마무리하면 프로젝트 메인디렉토리인 'master'에 브랜치를 'merge'한다.


깃 코드 시작!

Git은 명령어로 구성된 간단한 프로그램이다.
터미널에서 깃을 이용한 연습해야한다.
윈도우에서 운영체제마다 새로운 줄바꿈할 때 줄바꿈 바꿔주는데 이런 차이점을 다양한 운영체제에서 수정할 수 있는 속성, 자동으로 바꿔준다.

git config --global core.autocrlf true 

git (명령어) (옵션) ->공식 깃 다큐멘트에 명령어 볼 수 있다.



  • 업로드 순서

깃 버전확인 : git –version

깃 환경설정
git config --global user.name “woosol”
git config --global user.email “”
폴더 만든 후, 깃 저장소 경로 복사 해놓는다.

파일로 위치 이동 : cd (컴퓨터 내의)파일위치 ex)cd C:\education

저장소에 있는 것 다운로드 : git clone 저장소주소 ex) https://

파일들어가서 처음에 .git안보일 수 있다. 그땐 보기- 옵션-파일확장명숨기기해제
->컴퓨터도 하나의 저장소가 된다. 즉 컴퓨터는 local repo, 깃허브 주소는 remote repo

이제 명령프롬에서는 파일위치가 education으로 되어있음, 작업 수행

예시
cd repository이름 ex) git-first
git add document.txt
git commit –m “add text file[document.txt]” #’’안되고 “”여야한다.
commit을 함으로써 컴퓨터에 저장된다.
이후 git push 이용해 원격저장소에 업로드 된다.
만약 push 안된다? git branch -M main 해보기!

  • 소스코드 수정해서 git 저장소에 반영하기

1) 새로운 파일 업로드
그냥 커밋하고 푸시하면 저장소에 자동으로 업로드된다.
이전과 같이, 클론버튼 눌러서 주소 복사하고 cd, git clone 한 후 dir 파일존재 확인 가능
수정 후 확인 : git status
올리기 : git add 파일이름.확장자
Staging area에서 다시 directory로 옮기기 : git reset 파일이름.확장자
모든 파일 옮기기 : git add .

2) 수정한 파일 업로드
수정사항 무시 git checkout -- 파일명.py
반영하려면, git add . -> git commit –m “”, git push



  • Git에서 커밋 내역 수정하기

git log 이전기록들 볼 수 있다.
특정지점이후commit은 다 없앤다 git reset --hard 커밋주소
그후는 깃허브랑 깃 상태가 달라졌기에 git push -f :강제로 push한다는 것
커밋 메세지 변경 git commit --amend -> a->위에 메세지 수정->맨밑 :wq! 입력



  • 브랜치 개념
    브랜치: 깃에서동시에 여러 개발자들이 프로젝트에서 각기 다른 기능을 개발할 수 있도록 만든 기능, 브랜치들끼리 상호독립되어있으며, 병렬로 작업이 가능하다.
    합치기 수행전까지 안정적으로 배포되고있다가 merge, 즉 새로운 기능이 합쳐진 후에 다시 배포할 수 있으므로 안정성이 크다.
    통합브랜치: 배포 가능한 수준 master
    토픽브랜치: 기능을 위해 만들어진 것

브랜치 개수 확인 : git branch
새로운 브랜치 추가 : git branch 새로운이름
다시확인 git branch
변경 : git checkout 새로운이름
하고 git add . -> git commit 하면 깃에서만 바뀐다.
그래서 다시 git checkout master -> git merge 브랜치 새이름
Git log로 확인 가능하고 git push -그럼 둘다 수정된 것 반영된다.
개발다햇으면 새로운 브랜치 필요없고 제거하려면
git branch -d 새이름



  • 브랜치 충돌 처리하기

둘이 같은 파일을 수정할 때, 어떤 것을 설정할지 정할 수 있다.
Origin branch에서 merge할 때 conflict 됐다는 것을 알려주고 파일에 들어가면 겹친 내용을 나타낸다, 그 중에 수동으로 어떤 것을 결정할지 확인한 후 해당 내역 필요없는 부분 삭제하고 똑같이 진행하면 된다.
*merge할 때는 origin branch에서 수행한다.



  • 원격저장소 관리 방법

원격저장소 추가하기
git remote add 새로운저장소이름 저장소주소
전체 확인git remote -v
원격저장소 이름 변경 : git remote rename 이전 이후이름
원격저장소 제거 : git remote rm 이름



  • 로그 다루기

위에서 세 개까지만 보기 : git log –p –3
각 커밋 내역 출력 : git log -—pretty=oneline
작성한 사람, 작성날짜, 커밋메세지 주제 그래프형태로 확인 : git log --pretty=farmat:"%h -> %an, %ar : %s" --graph #깃허브 insight에서 쉽게 볼 수 있다.



  • 소스코드 압축하기

git archive —format=zip branch name –o newzipname.zip



  • 특정 커밋 수정/삭제하기

git rebase –i HEAD~3(최근 3개본다는 의미) 수행바꾼 후 :wq! 하면 변경, 삭제된다.



  • commit 날짜 변경

git log 로 확인 후 -> git rebase –i 바꾸고 싶은 commit 바로 밑 해시값-> edit으로 변경 ->
GIT_COMMITER_DATE=“바꿀 날짜 값” git commit —amend—no-edit —date “바꿀 날짜 값” -> git rebase --continue

다른 강의

새로운 디렉토리 생성 : mkdir 새로운 디렉토리 이름
cd 파일이름 #그안으로 들어가기
ls -al 모든파일 알 수 있어 (git이 안보여) #리눅스에서 가능
git init -초기화 (하고 ls -al로 확인해야 숨겨진 git파일 확인가능)

git init : 현재 디렉토리를 git 저장소로 변환해준다.
cd .. : git폴더에서 나가기
단축하기 git config –global alias.st status #status st로 단축
master 색 (흰->주황) 바뀐 이유 : 디렉토리에 아직 commit 되지 않은 변경사항 발생했다는 의미.
git status 파일 상태확인가능
ex) echo hello world!>a.txt 로 a 생성하면 이때까진 untracked file
git add a.txt를 이용해 tracked file이 되며 /commit 할 준비한다. Staging area로 이동
git add . #전부
파일 삭제 git rm—cached #staging area에서 다시 working directory(untracked)로
깃허브에 추가하고 싶지 않은 파일(관련된 로그파일들)은 ignore파일로 이동시켜
Echo
.log > .gitignore #특정 디렉토리에있는거 build/ or build/.log
Git status -h #help 찾는 것
Working directory에서 어떤파일의 내용이 수정됐는지 확인 git diff
Staging area에 있는 것 확인 git diff –staged = git diff --cached
git commit -am 'all' #all이라는 말과함께 다 commit 해라







참고
유튜브1
유튜브2

profile
공부한 것들을 정리하는 블로그

2개의 댓글

comment-user-thumbnail
2021년 12월 27일

https://git-scm.com/book/ko/v2
여기를 참고해서 보충하셔도 좋을 것 같아요!

1개의 답글