본문 바로가기
기록

Git 정리

by vivi 2021. 10. 11.
  • 버전 관리 소프트웨어 (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 명령어 또는 옵션
    • 명령어 하나 또는 하위 명령어로 옵션 주기, 옵션은 짧은 옵션(-)과 긴 옵션(--)으로 구분
  • $ 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

댓글