- 버전 관리 소프트웨어 (VCS, Version Control System)
- 집중형 : 모든 소스 코드가 하나의 중앙 서버 저장소에서 관리되는 형태
- 분산형 : 여러 저장소에 각 버전별 소스를 개별 보관. 대표적으로 깃, 머큐리얼이 있음
- Vim 에디터 참고
- 수정 : Esc + : + i
- 저장 : Esc + : + w
- 종료 : Esc + : + q
- 깃은 윈도우와 유닉스 계열의 운영 체제를 모두 지원 하지만 각 운영 체제에서 엔딩 라인에 각각 LF(Line Feed: 유닉스/리눅스) 와 CRLF(Carriage Return Line Feed : MS-DOS/윈도우)를 쓰는데 호환되지 않으므로 설정 주의.
- Git Bash
- 현재의 작업 디렉토리 경로 표시, 처음 깃 배시를 시작하면 경로 주소 이름이 ~로 표시. ~ : 현재 자신의 계정 위치
- $ git 명령어 또는 옵션
- 명령어 하나 또는 하위 명령어로 옵션 주기, 옵션은 짧은 옵션(-)과 긴 옵션(--)으로 구분
- $ git help --all : 전체 명령어 확인
- $ git --version : 깃 버전 정보 확인
- 명령어 여러개를 묶어서 사용할 경우
- $ git tag; git branch 처럼 세미콜론으로 구분
git 환경설정
- config 명령어
- $ git config 설정값
- $ git config --unset 이메일 주소 : 기존 설정된 환경 파일 삭제
- $ git config -help : 명령어 옵션 확인
- 사용자 등록
- 로컬 사용자 : 로컬 저장소를 생성할 때마다 설정해야함
- 글로벌 사용자 : --global 옵션으로 글로벌로 공통 사용자 등록 가능
- $ git config --global user.name "사용자이름" // ex) $ git config --global user.name "ppotto"
- $ git config --global user.email "이메일주소" // ex) ex) $ git config --global user.email "ppotto@a.com"
- git 환경 설정 파일은 깃 저장소 안에 .git/config 파일로 저장되어 있음
- 로컬 환경 설정 파일과 글로벌 환경 설정 파일이 같이 있으면 로컬이 우선 적용됨
- config 내용 확인
- $ cat ./git/config
- 깃 상태를 컬러로 보기
- $ git config --global color.ui auto
Git 개념
초기화
- git 저장소에는 별도의 숨겨진 영역(숨겨진 폴더)에 변경 이력 등 기록 관리
- 깃 저장소 = repository
- 초기화 : 기존 폴더에 숨겨진 영역(숨겨진 폴더, .git)를 추가하는 것 -> 깃 저장소로 변경
- $ git init 경로명 // $git init . , $git init 현재 폴더 초기화
- $ ls -a 으로 확인 가능 // -a 옵션 : 폴더 안의 숨겨진 파일 같이 출력
- $ cp -r 원본폴더 복사폴더 // 숨겨진 폴더까지 복사하려면 일반적인 cp 명령어로는 안되고 -r 옵션 줘야함
워킹 디렉터리 = 워킹 트리
- 깃은 VCS의 특성 때문에 저장 공간을 크게 세 가지로 나눔
- 워킹 : 작업을 하는 공간
- 스테이지 : 임시로 저장하는 공간
- 리포지터리 : 실제로 저장하여 기록하는 공간
깃의 추적
- 깃은 워킹 디렉토리에 있는 파일들을 추적 tracked/추적안함 untracked 으로 구분
- git add 명령어로 추적 상태로 변경
스테이지
- 임시로 저장하는 공간, 워킹 디렉토리에서 제출된 tracked 파일들을 관리
- $ git status
- $ git ls-files --stage
- 스테이지 영역의 파일들은 stage 상태와 unstage 상태가 있음
- stage : 스테이지에 있는 파일과 워킹 디렉토리에 있는 파일 내용이 같음. 커밋하려면 stage 상태여야 함.
- unstage : 파일에 변화가 있음. 즉, 스테이지에 있는 파일 기록과 워킹 디렉토리에 있는 파일 내용이 차이가 있음.
- 워킹 디렉토리에서 tracked 상태인 코드 변경 시
- modified -> git add로 스테이지에 재등록해주어야함
- unmodified -> 수정하지 않았으므로 재등록 하지 않아도 됨
status 명령어 - 깃 상태 확인
- $ git status
.gitignore
- 워킹 디렉토리 안에 숨겨진 파일로 생성됨
- 저장소 폴더의 최상위 디렉토리에 두어야 함
- 제외하지 않는 파일과 필요한 파일은 이름 앞에 ! 사용
- # 제외하면 안되는 파일인 경우
- !config.php
$ git clone 원격저장소URL - 깃 저장소 복제
- $ git clone 원격저장소URL 새폴더이름
Commit
- 커밋 작업에 포함시키기 위해서는 stage 영역에 등록해야함
- $ git add : 스테이지 영역에 파일 등록 (tracked 상태로 변경)
- 파일을 등록 한 후 커밋하지 않은 경우 : rm --cached
- $ git rm --cached 파일이름 : 스테이지 영역에 등록된 파일 등록 취소, (untracked 상태로 변경)
- 파일을 등록 한 후 한 번이라도 커밋을 한 경우 : rm --cached 로 삭제한 후 reset 으로 HEAD 포인터 정리
- $ git reset HEAD 파일이름
- 커밋의 수정 부분이 적을수록 검토하기 쉽고, 오류도 찾기 쉬우므로 작은 단위로 코드를 수정하고 커밋하기를 권장
HEAD - 커밋을 가리키는 묵시적 참조 포인터, 마지막 커밋 위치를 가리킴
스냅샷
- 파일에서 변경된 부분을 찾아 수정된 내용만 저장
- HEAD가 가리키는 커밋을 기반으로 기록
첫 번째 커밋
- $ git commit -am // 파일 등록과 커밋 메시지 등록, 커밋을 동시에
- HEAD와 스테이지 영역 간 차이를 비교하여 새로운 객체 생성, 객치를 깃 저장소에 기록
- 커밋 메시지 - 커밋은 파일 이름을 여러개 사용하지 않고 하나만 가지기 때문에 모든 커밋은 반드시 커밋 메시지를 작성해야함
- $ git commit -m "커밋메시지"
- $ git commit --amend // 마지막 커밋 메시지 수정
- 커밋을 하면 스테이지 영역은 초기화 된다. 커밋 전후에 status 명령어로 상태 확인 할 것
- $ git log : 커밋 로그 확인
- $ git log --pretty=short // 첫 번째 줄의 커밋 메시지만 출력
- $ git show 커밋ID // 특정 커밋 정보 확인
- $ git log 파일이름 // 특정 파일 로그 확인
- -p : diff 기능(수정한 라인 비교)
- --stat : 히스토리 출력
두 번째 커밋
- $ git checkout -- 수정파일이름 : modified 상태인 파일을 커밋 전 마지막 내용으로 되돌리기
커밋 아이디
- SHA1 해시 알고리즘으로 중복되지 않은 고유의 키 생성
diff 명령어
- $ git diff // 워킹 디렉토리 내용와 스테이지 내용의 차이점 출력
- $ git diff head // 스테이지 영역에 있는 수정된 파일을 HEAD 포인터가 가리키고 있는 최신 커밋과 변경 내용 비교
- $ git commit -v // 커밋할 때 -v 옵션으로 vi 에디터에서 diff 내용 추가 할 수 있음.
서버
서버 저장소 = 원격 저장소
깃허브
- 깃 호스팅 서비스
프로토콜
- Local : 로컬 컴퓨터에 원격 저장소를 생성하는 것
- $ git remote add 원격저장소별칭 폴더경로
- HTTP : 계정, 익명으로도 처리할 수 있음
- SSH : 공개키는 서버에 등록, 개인키는 로컬에 저장. 익명으로 접속할 수 없음
- Git : 잘 안씀
원격 저장소의 리모트 목록 관리 - remote 명령어 사용
- $ git remote
- -help : 옵션 확인
- -v : 원격 저장소의 별칭 이름과 URL 확인
- 로컬 저장소에 원격 저장소를 등록하려면 서버 주소 필요
- 깃허브 같은 저장소는 프로토콜 + 도메인 주소
- 별칭 : 긴 서버 URL 문자열을 별칭으로 만들어 사용, 주로 origin
원격 저장소에 연결
- $ git remote add 원격저장소별칭 원격저장소 URL
- $ git remote rename 변경전 변경후 // 별칭 이름 변경
- $ git remote show 원격저장소별칭 // 상세한 원격 저장소 정보 출력
- 원격 저장소를 등록하면 원격 브랜치가 자동 생성된다.
- master : 현재 로컬 저장소
- 별칭/브랜치 : 서버 저장소의 브랜치
원격 저장소 삭제
- $ git remote rm 원격저장소별칭
서버 전송
push : 서버에 전송
- push : 커밋된 파일들을 원격 저장소로 업로드
- $ git push 원격저장소별칭 브랜치이름 : 별칭 서버의 master 브랜치에 현재 브랜치 업로드
- 원격 저장소에 푸시하면 master 저장소가 총 2개 생성된다. 로컬 저장소의 master 브랜치와 서버의 master 브랜치. 전송은 두 브랜치 간의 전송과 수신을 동기화 한다.
자동으로 내려받기
clone : 복제
- 기존 저장소를 이용하여 새로운 저장소를 생성
- clone 명령어는 초기화 init 명령어 외에 원격 서버 접속에 필요한 추가 설정을 자동 수행
pull : 서버에서 내려받기
- clone 후 원격 저장소에 현재 커밋 보다 더 최신 커밋이 있을 때 내려받음
- 내려받은 커밋 정보는 스테이지 영역이 아닌 원격 저장소를 위한 전용 임시 브랜치에 저장
- 내려받은 최신 커밋들을 현재 브랜치로 자동으로 병합 처리(원격 서버 파일과 로컬 파일을 하나로 합치는 과정)
- $ git pull
수동으로 내려받기
fetch: 가져오기
- 원격 저장소에서 코드를 수동으로 내려받는 작업
- 내려받은 후 현재 브랜치와 자동 병합하지 않는다. -> 원격 저장소의 최신 커밋들을 내려받았으나 로컬 저장소에 병합하지 않았으므로 git log를 실행해도 커밋이 추가되지 않는다.
- 수동 병합인 fetch를 하면 새로운 서버/master 형태의 임시 브랜치를 생성함. 이 임시 브랜치에는 커밋을 할 수 없음.
- $ git fetch 원격저장소URL
merge 명령어로 수동 병합
- $ git merge 원격저장소별칭/브랜치이름
Push 순서
- 원격 저장소에는 여러 명의 개발자가 동시에 커밋을 푸시할 수 없다.
- 순차적으로 푸시해야 함
- 원격 저장소에 푸시하려면 자신의 로컬 저장소를 최신 상태로 유지 해야함(pull 하여 자동 병합) -> 충돌 방지
- 권장 순서 (자신의 저장소와 원격 저장소의 상태를 자주 최신으로 유지하는 것)
- pull -> coding -> commit -> pull -> push
- 권장 순서 (자신의 저장소와 원격 저장소의 상태를 자주 최신으로 유지하는 것)
출처 : 이호진(2020), 「Git 교과서」, 길벗
https://book.naver.com/bookdb/book_detail.nhn?bid=16293640
'기록' 카테고리의 다른 글
[기록장] 좋은 영상 (0) | 2021.12.16 |
---|---|
개발 공부 계획 (0) | 2021.12.15 |
[IntelliJ] 자주쓰는 단축키 (0) | 2021.10.12 |
기록 (0) | 2021.09.27 |
모니터 글자 번짐, 색 번짐 현상 해결 방법 (0) | 2021.09.15 |
댓글