Git_기초 (23.03.06.)

wonder1ng·2023년 3월 7일

데이터 공부(기초)

목록 보기
28/37

01_Git 개념

버전관리 시스템의 한 종류

01-01_버전 관리와 역사

  • 버전관리 시스템(형상관리):
    Configuration Management Systems
    Version Control Sysyems

  • 버전관리
    Source Data와 History를 통해 협업, 작업 추적, 복구 등이 가능.

  • 버전 관리 시스템 발명 전에는 로컬 컴퓨터에 폴더와 파일을 버전별로 복사하여 관리

  • Local Version Control Sysyems(로컬 버전관리 시스템)
    데이터가 망가지면 복구 어려움
    버전은 관리되지만 협업은 어려움

  • Centralized Version Control Systems(중앙 버전 관리 시스템)
    협업 가능하지만
    comnmit하는 순간 배포되어 다수에게 버그 유발 가능
    자신만의 version history를 가질 수 없음
    인터넷 안되면 작업 불가

  • Distributed Version Control Sysyems(분산식 버전 관리 시스템)
    commit해도 개인 저장소 내에 적용
    원하는 순간 배포(Push)가능
    오프라인 작업 가능
    자신만의 history 가짐

01-02_버전 관리 시스템

CVCS: CVS, SVN 등
DVCS: Mercurial, Git 등

cvs: 1980년댈 개발되었으나 현재 SVN으로 대체됨
SVN(https://subversion.apache.org/): 중앙 관리 시스템이지만 단점을 많이 보완하여 현재도 사용 중.
Git(https://git-scm.com/): SVN보다 빠른 속도와 많은 기능을 지님

01-03_Git 기반의 서비스

GitHub(https://github.com/): Git을 호스팅해주는 비설치형 웹 서비스. 협업을 위한 기능 제공. ※ 소스코드 보안이 중요한 경우 사용 기피(host 버전이 나와 사내에서 사용 증가)
GitLab(https://about.gitlab.com/): 설치형 버전 관리시스템으로 소스코드 보안이 중요한 기업에서 주로 사용. 클라우드 버전 관리 시스템 제공(10명 이하 무료)

02_Git 설치

git 설치는 Git 사이트 다운로드 페이지에서 다운 받아 설치

git을 설치했으면 git bash를 실행하여 아래 같은 형식으로 글로벌 유저 네임과 이메일 등 설정

git config --global user.name wonder1ng
git config --global user.email wonder1ng@velog.io
# 윈도우 한정 아래 코드 실행
git config --global core.autocrlf true
# 윈도우와 유닉스 기반 os의 차이로 윈도우는 autocrlf(자동 개행)를 설정해야 함.
# 윈도우는 cr(\r)lf(\n)가 개행. 유닉스 기반은 lf(\n)이 개행
git config --global core.editor vim
git config --list	# 현재 설정값 확인 가능. q로 탈출이라는데 나는 자동 탈출함.

03_Git 기본 용어

  • Repository: 소스코드가 저장된 여러 Branch가 모인 디스크 상의 물리적 공간. Local과 Remote로 구분.
  • Checkout: 특정 시점이나 BRanch의 소스코드로 이동하는 것을 의미. Checkout을 통해 여러 시점의 코드로 이동 가능. Checkout 대상 = Branch, Commit, Tag 등.
  • Stage: 작업할 내용이 올라가는 임시 저장 영역. Stage를 이용하여 작업한 내용 중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있음.
  • Commit: 버전을 지정하는 행위. commit하는 순간 버전 등록. 작업 내용은 Local에 저장. commt의 메세지는 변경에 대한 설명을 남겨야 하마. commit은 게임의 save point.
  • Tag: 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여 놓은 이정표. Tag가 붙은 commit은 commit id(version) 대신 tag name으로 쉽게 checkout 가능.

★Push: Local의 commit을 Remote에 보내 반영하는 것. ★ Push하는 순간 다른 개발자도 영향 받음. 검증된 것만 할 것.

  • Pull: Remote에 있는 내용 중 Local에 방영되지 않은 내용을 가져와 Local에 저장하는 과정. ★ Push 과정에서 Conflict(충돌)이 일어나서 Push가 거절된 경우 Conflict 해결 후 재시도
  • Branch: 특정 시점(commit 단위)에서 분기하여 commit을 쌓을 수 있는 가지를 만드는 것. 개발 주축 Branch를 Master(Main) Branch라 함. 모든 Branch는 최종적으로 Master branch에 merge되는 형식으로 진행.
  • Merge: branch의 반대 개념으로 branch를 합치는 과정. Merge되는 두 branch에는 주종관계 성립. Merge 과정에서 Conflict 발생 경우 Diff 수정하여 해결 후 진행.

04_Repository

  • Local Repository는 3가지 단계로 구성
    Working Directory(작업공간): 실제 소스 파일, 생성한 파일 존재
    Index(Stage/준비영역): git add한 파일 존재
    HEAD(최종 확정본): git commit한 파일들이 존재. 여기서 버전이 지정됨.

Local Repository 생성과 커밋

cd c:/Users 	# git bash에서 원하는 경로로 이동
mkdir git_ws	# 작업폴더 생성
git init		# 이제부터 Local Repository.
ls -all			# 숨긴 파일 포함 모든 경로 출력
touch test.txt	# test.txt 생성
git status		# Git에 존재하는 파일 확인
git add test.txt	# Index에 파일 추가
git commit -m 'first commit' test.txt	# 커밋과 설명(-m)
  • Remote Repository 생성
    github 사이트에서 github 가입 후 Create repository 버튼 눌러 프로젝트명 설정 후 생성 -> 우상단 프로필 누르고 Settings -> 좌하단 Developer settings -> Personal access tokens에서 Tokens (classic) -> 우측 Generate new token (classic) 선택 -> Note에 이름 적고 Expiration에서 No expiration 선택 -> 아래 repo 선택 -> 최하단 Generate token 선택 -> token 복사하여 다른 곳에 저장

Remote repositoty 생성할 때 .gitignore는 git 버전 관리에서 제외할 확장자 지정하는 파일. .gitignore에 기입한 조건에 해당하는 폴더 및 파일은 git status에서 미인식.

  • Remote Repository 등록 및 Git Push
    GitHub 메인 페이지에서 좌측의 Repositories에서 생성한 노트명 선택 https url 복사 후 아래 코드 실행
# 기본 등록
git remote add origin 주소 붙여넣기(Shift+Insert)	# 주소는 https://github.com/닉네임/노트명.git 형식.	origin 지금 설정하는 저장소 이름
# 토큰 등록
git remote add origin https://닉네임:토큰@github.com/닉네임/노트명.git
git remote -v 	# Remote repository 정보 확인
# Git Push. github에서 Remote Repository에 들어가거나 새로고침하면 push된 파일 확인 가능.
git push origin master	# git push 저장소이름 branch이름
git remote remove origin # 인덱스 제거

Git Pull
Remote repository에서 파일 하단의 Add a README 녹색 버튼 클릭 -> 하단의 Commit new file 선택 후 아래 코드 실행

git pull origin master	# git pull 저장소이름 branch이름
# 완료 후 폴더 확인

Git Clone

git clone repository코드(URL.git)

Branch 명령어

git branch			# Local branch 조회
git branch -r		# Remote branch 조회
git branch -a		# All branch 조회
git branch branchname		# Local branch 생성
git checkout master			# branch 이동
git checkout -b master		# branch 생성 및 이동
git push origin branchname	# Remote branch 생성
git branch -d branchname		# Local branch 삭제. 현재 사용 중인 branch는 삭제 불가.
git push origin -d branchname	# Remote branch 삭제.

05_VSCode

VSC 설치 완료 상태에서 아래 실행

# git bash에서 로컬 리포지토리에 접속한 상태로 아래 코드 입력시 VSC 실행
code .
# 열린 VSC의 Extension에서 Git Graph 설치
  • cat: 리눅스 명령어
    cat > 파일명.확장자: 생성 및 진입(기존 파일 덮어씀)
    cat >> 파일명.확장자: 기존 내용 덧붙임
    cat 파일명. 확장자: 내용 출력
cat > hello.py	# hello.py 생성 및 진입
print('hello, world')	# 입력. 저장 및 탈출은 Crtl+D
git log		# 해당 branch의 로그 확인
  • git editor
git config --global core.editor 'code'	# editor를 VSC로 변경
git config --global -e	# vim으로 접속한 경우 아래의 설명에 따라 행동
# config에 아래 코드 기입하여 저장 후 편집기 종료
[diff]		# diff는 버전 간 차이 조회
	tool = vscode
[difftool "vscode"]
	cmd = "code --wait --diff $LOCAL $REMOTE"

git bash editor vim 편집 탈출 명령
vim 상태에서 esc는 명령 모드 'I(알파벳 아이)'는 기입(insert) 모드. 저장 없이 탈출은 'q!', 저장 후 종료는 'q'. 명령어는 리눅스 명령어 참고.

  • diff: 버전 간 차이 조회
git diff branch1 branch2	# 두 branch 내용 비교
git difftool branch1 branch2	# difftool로 설정된 편집기로 diff 실행
y	# 위 코드 실행 후 y 선택
git diff commithash1 commithash2	# commithash = git log했을 때 commit 다음에 나오는 문자열
git difftool head head^		# 최종 commit과 그 전 commit 비교
  • merge: branch 병합
git config --global -e
# 아래 코드 삽입
[merge]
	tool = vscode
[mergetool "vscode"]
	cmd = "code --wait $MERGED"
# 설정 저장 후 시작. Branch: master, dev
git merge dev	# merge 실행. 정상 실행 시 Fast-forward, 충돌 시 CONFLICT 출력.
# 충돌 시
git mergetool	# 충돌한 파일 실행. 실행 시 mater 내용엔 <<<<<<< HEAD, 병합하는 쪽 내용엔 >>>>>>> dev(브랜치명)으로 표시
# 내용을 맞게 수정(충돌 표시도 다 제거) 후 저장.
git add test.txt	# 새로 add
git commit			# commit Message 열리는데 저장 후 편집 종료.
  • tag
git tag 태그명			# 마지막 commit에 tag 생성
git tag 태그명 커밋해시	# 해당 commit에 tag 생성
git push 저장소명 태그명	# remote tag 삭제
git tag					# tag 목록
git show 태그명			# tag 상세 정보
git tag -d 태그명			# tag 삭제
git push -d 저장소명 태그명	# remote tag 삭제

06_README

프로젝트에 대한 설명, 사용법, 라이센스, 설치법 등을 기술하는 파일.
GitHub에선 README 파일이 마크다운 문법이 적용되어 노출됨.

출처: 제로베이스 데이터 스쿨 강의 및 강의 자료

profile
데이터, 풀스택

0개의 댓글