경일 메타버스 20220419 3주차 2일 수업내용. 버전 관리 시스템과 Git, Git 명령어, 실제 Git 사용
Git
git merge : 타임라인이 남는다. 커밋트리가 복잡해진다.
git rebase : 커밋트리가 깔끔하다. 히스토리를 수정하기에 작업이 꼬이기 쉽다.
- 개발자 취향 차이
#1 원격 명령어
- git push / pull/ fetch
: 브랜치 이름
colon refspec으로 source:destination
git bash
#2 이외의 명령어
- git config : 설정
- git add : 스테이징 영역 추가
- git restore : 변경사항 폐기
- git log : 그래프 (로그)를 보여줌
- git status : 레포지토리 상태를 확인
- git init : 레포지토리 생성
#3 Git의 동작
- HEAD : 어떤 브랜치를 가리키는지에 대한 내용이 담겨 있음
- ref/heads 에 브랜치에 대한 파일이 있다.
- 해당 파일의 이름은 브랜치의 이름
- 그 파일에는 커밋 ID가 있었다. (해시값)
- ref/tags 에 태그에 대한 파일이 있다.
- 해당 파일의 이름은 태그의 이름
- 그 파일에는 해시값이 있었다.
- objects에는 변경 사항이 저장되어 있음. => 각 커밋의 내용.
#4 vi 사용법
- 명령어 모드랑 편집 모드랑
- 편집하고 싶을 땐 i키를 누름
- ESC키를 누르면 명령어 모드
- 파일을 저장하고 나가려면 명령어 모드에서 :wq 타이핑
원격 추적 : main브랜치는 o/main브랜치를 추적하도록 설정되어 있다. 이것은 main가 merge와 push할 내재된 목적지가 생겼다는 뜻.
git checkout -b 추적시킬-브랜치명 추적할-원격-브랜치명 : 브랜치를 새로 만들고, HEAD를 놓고, 브랜치가 원격 브랜치를 추적하도록 설정한다.
git branch -u 추적할-원격-브랜치명 (추적시킬-브랜치명) : 브랜치가 원격 브랜치를 추적하도록 설정한다. 현재 작업 중인 브랜치라면 브랜치명을 생략 가능하다.
git push 원격-저장소 위치 : 위치로 가서 모든 커밋을 수집하고, 원격 저장소에 부족한 커밋을 채워넣는다.
git push 원격-저장소 로컬-위치:원격-위치 : 로컬 위치로 가서 모든 커밋을 수집하고, 원격 저장소의 원격 위치에 부족한 커밋을 채워넣는다.
git fetch 원격-저장소 위치 : 위의 push와 같이, 원격의 위치로 가서 모든 커밋을 수집하고, 로컬 저장소에 부족한 커밋을 원격 브랜치 밑에 채워넣는다. 콜론 참조스펙도 사용 가능하다.
git fetch 원격-저장소 원격-위치:로컬-위치
- 딱히 인자가 없다면, 모든 원격 브랜치로 커밋들을 내려받는다.
콜론 참조스펙에서, 앞의 로컬 위치를 (없음)으로 지정 가능
git pull 원격-저장소 위치 : pull은 fetch에 merge를 더한 것이기에, 마찬가지로 원격의 위치로 가서 모든 커밋을 수집하고, 로컬 저장소에 부족한 커밋을 원격 브랜치 밑에 채워넣고 merge한다. 콜론 참조스펙도 사용 가능하다.
cd : change directory, 디렉토리 변경
mkdir 디렉토리명 : make directory, 디렉토리 생성
ls : list, 디렉토리 안 모두 표시
git init : git 시작, 레포지토리 생성. Initialize repository
touch 파일명 : 빈 파일 생성
clear : 지우기
rm -f 파일명 : 파일 삭제
git status : repository 상태 확인
git add 파일명 : git에 파일 추가, 파일명에 .을 입력하면 디렉토리 내 전부를 추가 → staged 상태로 변환, 스테이징 영역 추가
git commit : 커밋(commit)을 한다. 설정한 텍스트 에디터로 이동. (#이후는 주석)
git log : 커밋 기록 표시, 비교적 많은 정보
git lg : 커밋 기록 표시, 커밋 트리. 보기 쉬움.
git restore 파일명 : 변화 내용 복구
git config : git 설정, Configure repository
vi 파일명 : vim editor 열기
표시 내용 CONFLICT : 충돌이 일어났다는 의미.
위의 ====과 Change 위치 표시 등을 지우고, git add 해줌으로써 수동으로 충돌 해결.
병합 충돌 해결 기능 : 다음은 위와 같은 충돌 상황이지만, 툴이 visual studio code이기에 제공되는 충돌 처리 기능이 있다.
HEAD 표시의 위를 보면, 4가지 선택지가 나온다. 기존 변화를 남길지, 신규 변화를 남길지, 둘 다 남길지, 그리고 둘을 비교해볼지를 선택해 자동으로 충돌 없이 병합이 가능하다.
- 교수님처럼 로그를 git adog로 모든 브랜치를 예쁘게 한 줄에 그래프로 표시하기 위한 설정 명령.
git config --global alias.adog "log --all --decorate --oneline --graph”
실사용 : git adog
* 브랜치 명은 다른 커밋의 주소 등과 겹쳐서는 안된다. * HEAD로 지정된 브랜치는 강제 이동이 되지 않는다.
Window + E : 파일 탐색기 열기