파일 자체를 수정하기보다 수정 내역 자체를 저장 ->메모리 적으로 효율적이다.
깃 프로젝트 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에 담기게 된다.
즉 환경설정과 관련된 폴더라고 생각하면 된다.
각종 수정 내역들이 파일 형태로 저장되는 것을 볼 수 있다.
각각의 작업 내역을 구분할 수 있도록 해시 값을 사용한다.
커밋 내역을 관리한다.
윈도에서는 명령 프롬프트(cmd)에서, 맥이나 다른 OS에서는 터미널이라고 하는 프로그램이다.
우리가 일반적으로 접하는 마우스로 클릭하는 프로그램이 아닌 키보드로 입력을 받아 명령을 수행한다.
프로젝트가 살고 있는 저장공간. (혹은 디렉토리라고 칭하기도 한다.)
이 저장소 안에 코드, 텍스트, 이미지를 저장할 수 있다.
각종 파일이나 소스코드가 담겨 있으면서 커밋 내역 등의 모든 작업 이력이 담긴 공간이다.
"repo" 라고도 부른다.
팀 단위로 프로젝트를 운영할 때 필수적인 기능인데, 깃허브는 다수의 사용자가 하나의 페이지를 수정해도 각 사용자 별로 수정 내용을 저장한다.
모든 시점의 '스냅 샷'을 저장하기 때문에 겹쳐 쓸 일이 없다.
커밋을 하면, 그 시점의 자신의 Repo 스냅샷을 찍어서 체크포인트 깃발을 꽂아둔다. 생각하면 편하다.
보통의 체크포인트가 그렇듯이 수정을 하다 이 체크포인트로 되돌아가고, 복원할 수 있다.
자신이 진행하는 프로젝트의 브랜치를 따서 (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 해보기!
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 log 이전기록들 볼 수 있다.
특정지점이후commit은 다 없앤다 git reset --hard 커밋주소
그후는 깃허브랑 깃 상태가 달라졌기에 git push -f :강제로 push한다는 것
커밋 메세지 변경 git commit --amend -> a->위에 메세지 수정->맨밑 :wq! 입력
브랜치 개수 확인 : 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! 하면 변경, 삭제된다.
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
https://git-scm.com/book/ko/v2
여기를 참고해서 보충하셔도 좋을 것 같아요!