본문 바로가기
Programming

[실무자가 알려주는 git 입문] 강의 노트

by 선의 2022. 1. 11.

1) git 입문 - 이론

(1) 형상 관리를 위한 git

소프트웨어의 형상은 다양함(웹페이지, 프로토타입, 소스코드 등...) && 계속 변함

요구 사항 변경 → 디자인 문서 업데이트 → 소스코드에도 영향을 줌 → [verification] 수정이 필요한 버그, 개선이 필요한 요구사항 발생 → (반복) ⇒ 고객에게 릴리즈되는 소프트웨어 완성

형상 관리: 소프트웨어의 변경점을 체계적으로 추적하고 관리하는 일련의 모든 활동(SCM)

— 중요성: 프로젝트의 리스크를 최소화 && 소프트웨어의 품질 확보

— 대상: 소프트웨어 개발 모든 단계에서 발생하는 산출물(서비스 정의서, 요구사항 명세서, 스포리보드, 와이어프레임, 소스코드, 설계문서, API 문서, 가이드 문서...)

— 소스코드를 형상관리 할 수 있는 도구 ⇒ Git(이외에도 많음)

git의 목표: 빠른 속도, 단순한 구조, 비선형적 개발(수천개의 동시 다발적인 병렬 개발과 공유), 완벽한 분산(↔ 중앙 집중) && 무료, 커맨드 기반, 설치 공간 작음

— 중앙 집중형 CVCS: 서버에서 작업할 파일을 가져온다 → 맡은 부분 개발 → 서버에 보낸다 // 간단, 네트워크 끊기면 노답, 이 때 손실되면 복구 힘듬

분산 집중형 DVCS: 서버에 작업할 파일 있음 + 각각의 개발자들에게도 풀셋 파일 있음 // 네트워크 없어도 작업 가능, 있으면 원격 서버(원래 서버)로 올리기 가능, 복원도 가능, 대부분 분산 집중형 씀

2) Git 설치

나는 이미 설치함

위에 언급된 모든 장점때문에 없으면 컴공생활 망함

소스트리나 깃허브 데스크탑 쓰는 친구들도 많던데, 나는 그냥 커맨드 입력하는 게 젤 편한 것 같다(그런데 언제 또 생각이 달라질지는 모름)

강의에서는 기본값 그대로 사용(나도 마찬가지)

  • 설치 여부 확인

Untitled

3) Git 기본 이해

저장소

— 원격 저장소

— 로컬 저장소(내 pc)

— 작업 디렉토리: pc에서 작업중 && git에서 관리 O 추적 X

— 스테이징 영역: 작업한 내용이 올라가는 임시 저장 영역, git add를 통해 추가, commit을 준비

— 로컬 레포지토리: 커밋들이 영구적으로 저장되는 영역, 원격 저장소로부터 clone한 커밋들이 존재하는 영역

커밋: git에서 가장 의미있는 변경의 단위
커밋하다 == 변경점을 로컬 저장소로 저장하는 과정
(살짝 찔림 난 그냥 아무 변경지점에나 커밋해서...)

git 기본 플로우

  • 원격 저장소의 소스코드를 클론
  • 작업 디렉토리에서 소스코드 작업
  • 스테이지 영역에 git add
  • 의미 있는 변경점이 쌓이면
  • git commit
  • 로컬 저장소에 영구적으로 저장
  • (원격저장소 변경점 git pull 하고)
  • 내 커밋들 git push

Git 기본 플로우 이해

기본환경설정, 원격저장소

기본 환경 설정 사용자의 이름, 이메일 기본 설정으로 등록

git config --global user.name "이름"
git config --global user.email "이메일주소"

기본 에디터를 vim으로 기본 설정 + 설정 정보 확인

Untitled

mkdir ~/gittest

mkdir: making directory
~/ 루트 밑에 새로 놓겠다

원격저장소 생성

깃헙, 깃랩 등이 있음

깃허브에는 많은 오픈소스 프로젝트들이 많다

gitlab은 상용화 sw에서 많이 사용한다

강의에서는 gitlab을 사용

Untitled

git init을 입력하면 마스터 브랜치, .git 폴더가 생성된달

Untitled

git remote <저장소 별칭> <원격저장소 주소>
→ ㄹ컬저장소와 원격저장소를 연결

git remove -v
→ 연결된 원격 저장소를 알 수 있음

코드 변경점과 커밋

Untitled

파일 생성 및 수정

Untitled

깃에서 vi editor를 쓰는 게 너무 신기함

저번 학기에 리눅스 관련 수업 들었을 때 puTTy에서 연습하면서 이거를... 쓸 일이 있을까...? 그런 생각이 있었는데 방학 되자 마자 씀

작업 디렉토리의 파일 상태

untracked: 변경점은 발생했으나 git에 의해 관리되지 않은 파일, 단 한번도 staging area에 포함되지 않은 파일

tracked: git에 의해 관리되는 파일, staging area에 한 번 이상 포함된 파일

스테이징 영역에 변경점 추가

Untitled

코드변경과 커밋

커밋의 단위는? 동료들과 논의하는 게 좋다

git commit을 입력하면 커밋 메세지 창이 뜬다
i를 누르고 커밋 메세지 입력 + esc + :wq + enter

커밋 히스토리 확인 git log

Untitled

생성한 커밋의 이름, 커밋 메세지...

해시값을 가지고 커밋 아이디를 생성함

파일 추가 수정 + 변경된 코드 확인(git diff)

Untitled

현없에서는 많이 사용 못함) 변경점이 적은 경우 쉽게 파악이 바로 가능하지만, 많을 때는 파악이 어려움

커밋 생성과 복구

Untitled

커밋 히스토리 과련 옵션

git log -u
git log -u 'commit ID'
git log -1
git log -2
git log --name-only #파일리스트 출력
git log --oneline # 커밋 한 개당 한 줄
git show 'commit ID'

커밋 되돌리기

1)

git commit --amend

마지막 반영한 최신 커밋 메시지를 수정하고 싶을 때, 최신 커밋 수정 가능한 에디터가 실행됨

Untitled

2) 커밋에 추가할 변경점이 있을 때

UntitledUntitled

커밋 되돌리기2

git revert '마지막에 반영한 commit Id'

git에서 코드를 되돌린다

Untitled

원격저장소에 커밋 반영하기

git push <원격저장소 이름> <브랜치>
git clone <원격저장소 주소>
git pull 

 

- 코드프레소 Java 웹 개발 체험단 활동 중(https://www.codepresso.kr/)