🗄️git
git을 사용하면 파일이름을 그대로 유지하며 파일에서 무엇을 변경했는지 변경시점마다 버전으로 저장 가능하고 버전마다 작업했던 내용 확인하고 되돌아갈수있음
버전관리: 문서를 수정할때마다 언제, 어떤 것을 수정했는지 편하고 구체적으로 기록(변경사항 추적)
백업: 내 컴퓨터가 고장날때를 대비해 외장하드, 온라인서비스(백업공간)를 사용해 자료를 저장
깃파일 원격저장소(온라인저장소) 서비스중 가장 많이 사용하는 것이 GitHub협업: 온라인저장소(GitHub같은)를 사용해 여러사람이 함께 업무시 누가 어떤 부분을 어떻게 수정했는지 기록에 남음
커멘드 라인 인터페이스(CLI): 터미널에서 직접 명령을 입력해 git사용
git, 리눅스 명령 둘다 알아야해 어렵지만 익숙해지면 훨씬 빠르게 git 사용가능(자동화, 서버환경에서 깃을 사용하는 등 다양한 활용 가능)- git 로컬 설치
- 윈도우: git 명령은 리눅스 명령을 기반, 리눅스명령을 사용할수있는 git bash 사용
(윈도우에서 git설치시 git bash 함께 설치됨) - 맥: 운영체제가 리눅스명령을 기본으로 사용하여 터미널사용
- git 로컬 설치
[ git 정보 설정 ]
** git은 버전을 저장할때마다 사용자 정보도 같이 저장함(로컬에 처음 한번만 설정) **
버전생성(commit)을 위한 정보등록
$ git config
: git 구성config 설정 ,$ git config --global
: 전역옵션--global 현재 로컬에 있는 모든 지역저장소의 구성 설정윈도우
$ git config --global core.autocrlf true
,
맥$ git config --global core.autocrlf input
:
다른환경에서 프로젝트를 볼수있기때문에 자동으로 시스템에 맞게 개행문자(newline) 설정$ git config --global user.name '깃허브와 일치시키는게 좋음'
: 사용자 이름 등록$ git config --global user.email '깃허브와 일치시키는게 좋음'
: 사용자 이메일 등록$ git config --global init.defaultBranch 브랜치명
: 초기화(init)시 생성되는 브랜치를 브랜치명으로 설정 (master -> main 으로 바뀌는 추세)$ git config --global --list
: git 구성 확인
[ ✨버전만들기 ]
- 구조
✔️ 작업트리: 내컴퓨터(local, 로컬)에서 작업(파일수정, 생성)하는 눈에 보이는 디렉토리
✔️ 스테이지(stage): 버전으로 만들고싶은 파일을 보내 대기
(작업트리에서 생성, 수정한 파일 5개중 3개만 버전으로 만들고싶으면
3개만 스테이지로 넘져주면됨)
✔️ 저장소(repository, 리포지토리):
스테이지에 대기하고 있던 파일들을 버전으로 만들어 저장
$ git init
: git 저장소를 사용할수있게 디렉토리 초기화, 저장소 생성 | initialize(초기화하다)
초기화하면 작업트리안에 .git 숨김 디렉토리가 생성되며 .git안에 눈에 보이지않는 숨은파일로 스테이지(.git/index)와 저장소(.git/HEAD) 존재
저장소를 만들때 기본적으로 marster 브랜치가 만들어져 master브랜치에서 작업시작됨
- 버전만들기
1. 작업트리에서 파일 수정및 생성
$ git status
: untracked (빨강) | 커밋 한적이없어 git이 파일을 생성하거나 수정했는지 추적하고있지 않음
2. $ git add
버전관리하고 싶은 파일을 스테이지에 넣음
$ git add index.html
: index.html 파일만 스테이지에 업로드$ git add .
: 모든 파일 스테이지에 업로드
3. $ git commit -m '메세지'
버전을 생성해 스테이지에서 저장소로 보냄
$ git status
: tracked(초록) | 커밋한 파일 수정여부 계속 추적중
💡 *로컬의 .git 저장소(지역저장소)에만 커밋(버전등록)됨 *
원격저장소인 GitHub에도 연결해 백업해야 협업도 가능하고 나중에 로컬컴퓨터에 문제가 생겨
도 원격저장소에서 다운받아 사용가능
[ 🌵branch ]
✔️ 깃으로 초기화,저장소를 만들면(init) master라는 큰줄기의 최초 브랜치가 만들어져 master에서 작업 시작됨
✔️ 보통 master의 내용을 배포하기 때문에 개발완료된 내용을 master브랜치에 유지 하며,
기능, 페이지를 추가개발할 경우 협업시엔 개발자, 배포시점, 개발페이지, 기능, 개발속도등이 모두 다르기 때문에 master에 각 내용에 맞게 가지를 연결해 새로운 branch를 생성해서 개발해야 배포중인 master 브랜치에 영향이 안감
✔️ 생성한 branch에 개발내용을 push하고 기능에 문제가 없다고 판단되면 배포시점에 맞춰 master에 합쳐(병합merge)해 배포
- (HEAD -> master) HEAD는 현재 작업트리가 어떤 브랜치(분기점)기반으로 작업중인지 가리킴
- 브랜치는 브랜치에 담긴 커밋중 가장 최신의 커밋을 가리킴
최상위 큰줄기인 master로 이동하면 다른 브랜치에서 생성한 폴더 파일(코드)안보임
$ git branch
: 프로젝트에서 관리되고있는 모든 branch의 목록$ git branch -a
: 지역, 원격저장소에 있는 모든 브렌치$ git branch 브랜치이름
: 현재 커밋에서 브랜치 생성$ git checkout 브랜치이름
: 해당 브랜치로 이동 -> 해당 브랜치로 이동해 개발(폴더및 파일 생성후 코드작성)해야 master에 영향이 안감$ git checkout -b 브랜치이름
: 해당 브랜치 생성 이동 한번에 가능
$ git marge 브랜치이름
: 현재있는 브랜치에 해당브랜치를 병합$ git marge 브랜치이름 --no-edit
: 병합할때 커밋메세지 편집기창을 열지않고 깃에서 지정하는 커밋메세지 그대로 사용하기 설정$ git marge 브랜치이름 --edit
: 병합할때 편집기창 나타나지 않게 설정한경우 편집기창 보이게
$ git branch -d 브랜치이름
: 브랜치삭제(강제 브랜치 삭제 -D) -> master로 이동해 사용$ git checkout -t origin/브랜치명
: 지역저장소에 브랜치 다운$ git baranch -m master main
: master브랜치를 main브랜치로 이동(이름변경)
[ 👾GitHub ]
1. 지역저장소와 원격저장소(깃허브) 연결
깃허브에 원격저장소(repository, 저장소) test생성 후 리포지토리 주소 복사
https://github.com/깃허브아이디/test.git$ git remote add origin https://github.com/깃허브아이디/test.git
:
지역저장소에 원격저장소remote_를 origin(https://github.com/깃허브아이디/test.git 을 가리킴)이란 단어로 줄여 추가_add(연결)- 일반적으로 origin 사용
$ git remote -v
: 연결된 저장소 확인2. push 깃허브로 보내기
$ git push -u origin master
:
origin(원격저장소: https://github.com/깃허브아이디/test.git)에 master라는 메인 브런치를 생성해 연결후 지역저장소에 커밋한 버전 업로드push-u
: 옵션 지역저장소의 브랜치를 원격저장소 master 브랜치에 연결(처음 한번 사용)- 원격저장소 브랜치를 push 연결하고 그뒤 같은 브랜치 업로드시
$ git push
만 입력
3. pull 깃허브에서 내려받기
$ git pull origin master
:
origin(원격저장소)의 내용을 지역저장소 master 브랜치로 다운로드
4. 원격저장소를 다른 지역저장소로 내려받기
$ git clone 원격저장소주소
: 원격저장소 master 브랜치만 복제해서 내려받아짐$ git clone 원격저장소주소 디렉토리명
: 지역저장소에 디렉토리명으로 폴더 생성해 그안에 master 브렌치복제
$ git checkout -t origin/브랜치명
: 지역저장소에 브랜치 다운
📍 git 명령
$ git init 디렉터리이름
: 디랙터리생성과 초기화 한번에 처리$ git status
: 깃의 현재 상태- untracked 상태: 한번도 커밋(버전관리)을 하지 않아 깃이 파일 생성,수정내용을 추적하지 않음
- tracked 상태: 깃이 수정여부를 계속 추적함(한번이라도 커밋을 한 파일)
- tracked의 modified 상태(스테이지에서의 상태)
- Changes not staged for commit: 수정 되었으나 스테이지에 올라가지 않음(빨강)
- Changes to be committed: 스테이지에 올라간상태(초록)
- unmodified 상태: 작업트리의 모든 파일이 최신 버전과 비교했을때 수정되지 않은 상태
nothing to commit, working tree clean
$ git log
: 버전의 기록(커밋) 확인- 옵션 (옵션 여러개를 한번에 적용할수 있음
$ git log --oneline --branch
)$ git log --stat
: 변경된 파일까지 확인가능$ git log --oneline
: 한줄에 한커밋씩 보여줌 간략히 확인$ git log --branches
: 각 브랜치의 커밋을 보여줌$ git log --oneline --branches --graph
: 각 브랜치가 어느 커밋에서 분리되고 합펴지는지 관계를 선으로 보여줌$ git log master..apple
: master브랜치에는 없고 apple 브랜치에만 있는 커밋 보여줌
- 옵션 (옵션 여러개를 한번에 적용할수 있음
$ git commit -am '메세지'
: 한번 커밋 했던 파일을 스테이지에 add, 저장소에 commit명령을 동시에 처리하게 해줌$ git diff
: 작업트리에서 수정한 파일이 최신버전과 뭐가 달라졌는지 보여줌$ git commit --amend
: 최근 커밋 메세지 수정$ git checkout -- 파일명
: 스테이지에 올라가기전 작업트리에서 수정한내용을 수정전으로 취소(복구불가)$ git checkout --커밋해시
: 해당커밋해시로 돌아감 그이후커밋 삭제$ git reset
$ git reset HEAD 파일명
: 스테이징된 파일을 스테이지 에서 내림 (파일명을 안적으면 스테이지에있는 모든 파일이 내려옴)$ git reset HEAD^
: 최신 커밋 취소$ git reset HEAD~n
최근 n개의 커밋을 취소$ git reset --hard HEAD^
: 최근 커밋, 스테이징, 수정 하기전 상태로 작업트리 되돌림(복구불가)$ git reset 복사한 커밋 해시
: 해당 커밋로 돌아가고(작업트리도) 해당 커밋 이후에 생성된 커밋 삭제, 복사한 커밋 해시가 가장 최신 커밋$ git reset --hard ORIG_HEAD
: 최근 reset한개만 복구 가능
$ git revert 복사한 커밋 해시
: 해당 커밋은 남아있고 내용(해당 버전에서 수정된작업트리)을 취소한 새커밋 생성 -> 보류, 명령실행시 메시지 입력할수있는 편집기 나타남$ git stash
: 한번이상 커밋한 파일들을 수정하다 감춤(다른 긴급 수정건있을때 주로 사용)$ git stash list
: 감춤 파일 리스트(먼저 감춤것을 아래 최근 감춘 것을 위 stash 스택)$ git stash pop
: 감춤파일 꺼내와 계속 수정 및 거밋
.gitignore: 파일명, 디렉토리/, .확장자 를 입력하면 버전 관리에서 제외됨
$ git rm -r --cached .
: 이미 저장소에 올라간 파일을 나중에 제외시킬때 (나중에 .gitignore 생성)
📍 리눅스 명령
$ ~
: 홈디렉터리(C/User/사용자아이디)$ clear
: 화면 정리$ pwd
: 현재 위치의 경로 | print working directory$ 리눅스명령 -옵션
: 옵션추가, 옵션은 순서상관없이 붙여쓰기 가능$ ls
: 현재 디렉터리안의 디렉터리와 폴더의 목록 | list- ls명령 옵션
$ ls -l
: 디렉터리의 상세정보까지 표시$ ls -a
: 숨김파일까지 표시$ ls -r
: 정렬 순서 거꾸로 표기$ ls -t
: 작성 시간 순으로(내림차순) 표시
- ls명령 옵션
$ cd
: 디렉토리 이동(./ 현재 작업중인 디렉터리, ../ 상위 디렉터리) | change directory$ cd ..
: 상위폴더로$ cd 폴더이름
: 폴더이름의 하위디렉토리로 이동 (이름의 일정문자만 치고 tab하면 자동완성)$ cd ~
: 홈 디렉터리로 이동
$ code .
: 현재 경로의 폴더, 파일들을 코드 편집기에서 열어줌$ code . -r
: VS code 터미널에서 사용시 -r 옵션으로 현재창에서 열기
$ mkdir 폴더이름
: 하위 디렉터리 생성 | make directory$ rm 폴더이름
: 해당 디렉토리 삭제 | remove$rm -r 폴더이름
: 해당이름의 디렉토리 안의 디렉토리와 파일까지 삭제
$ vim test.txt
: vim 편집기 문서 실행 ex모드로 실행됨 (저장하면 메모장 파일로 저장됨)
ESC: ex 모드 -> 저장(추가), 종료 모드 이동가능i
(Insert)ora
(Add): 입력(삽입)모드:w, :write
: 저장,:q, :quit
: 종료:wq
: 저장종료 (뒤에 파일 이름을 적으면 그이름으로 저장됨):q!
: 문서를 저장하지 않고 편집기 종료(확장자 .swp인 임시파일 생성)
$ cat 텍스트문서
: 터미널에서 텍스트 문서 확인 | concatenate(연쇄하다)$ cat 파일1, 파일2, 파일3...> 새파일
: 파일을 차례로연결한 내용으로 새파일 생성$ cat 파일1 >> 파일2
: 파일1의 내용을 파일2 끝에 연결
$ exit
: 터미널 종료
* 버전만들기의 이미지 출처: 책'Doit! 지옥에서 온 문서관리자 깃&깃허브 입문'의 이미지를 수정하여 사용함