[Git] 내가 보려고 정리한 git

임유정·2022년 12월 18일
0

Git

목록 보기
1/1
post-thumbnail

Git/Github 기초

무작정 깃에 대해 학습한 것이 아니라, 6시간에 걸쳐서 깃이 나오게 된 배경부터 깃을 잘 사용하기 위한 도구들을 재밌게 소개해주고, 깃 기본에 대한 강의를 들었다.
오늘 들었던 강의는 그래도 여러 번 학습한 경험이 있던 부분이었기에 복습 차원에서 공부했지만, 다음 시간에는 내가 모르는 부분도 대거 등장할 것 같다.
다음 강의까지 오늘 들은 내용을 더 온전하게 이해해서 깃을 잘 활용할 수 있도록 해야겠다.

깃이 출현하게 된 배경

  1. 유닉스가 유행하던 시절, 리차드 스톨먼이 오픈 소프트웨어 자유성 확보를 위한 GNU 프로젝트 돌입
  2. 그러나 GNU 프로젝트에는 커널이 없었고, 대학생이던 리누스 토발즈가 MINIX를 개조한 Linux를발표
    • 커널: 하드웨어와 응용프로그램을 이어주는 운영체제의 핵심 시스템소프트웨어
    • Shell: 운영체제의 커널과 사용자를 이어주는 소프트웨어
  3. 리눅스 커널을 만들기 위해 리누스 토발즈가 Subversion을 쓰다가 화가 나서 2주만에 git이라는 버전관리 시스템을 만들었다.

깃 관련 도구

Shell Command

  • ls (list segment): 현재 디렉토리의 파일 목록
    • ls -l = 한 줄 씩 보겠다.
    • ls -a = 숨긴 파일까지 보겠다. (.확장자명)
    • ls -al = 두 플래그를 동시에 사용 가능
  • cd 경로 (change directory): 디렉토리 이동
  • mkdir 디렉토리명 (make directory): 디렉토리 생성
  • touch 파일명(확장자포함): 파일 생성
  • mv 파일명 이동시킬위치 (move): 해당 파일을 이동
  • mv 파일명 새파일명: 파일 이름 변경
    • 이동시키면서 이름을 변경할 수도 있다.
  • cp 파일명 복사할위치 (copy): 파일 복사
  • rm 파일명 (remove): 파일 삭제
    • 와일드카드 *를 사용해서 여러개 파일 삭제 가능
  • rm -rf 디렉토리명: 디렉토리 삭제
  • cat 파일명: 글 내용 취합해서 보여줌

Vim

cli에서 가장 많이 쓰이는 에디터 중 하나

Vim command

h j k l - left, down, up, right
i - 삽입모드
esc - 노말모드로 이동
dd (delete) - 커서가 위치한 줄 삭제
d + j - 아랫줄 삭제
d + k - 윗줄 삭제
d + 숫자 + j - 아랫줄 숫자만큼 삭제
Y (yank) - 줄 복사
p (paste) - 붙여넣기
u (undo) - 되돌리기
A - 줄 맨뒤로 이동하여 삽입모드
0 - 줄 맨 앞으로 이동
H - 맨 위로 이동
L - 맨 아래로 이동
:w - 저장
:q - 나가기
:wq - 저장 후 나가기
:q! - 저장 안하고 나가기
:{number} - 해당 라인으로 이동

VCS (Version Control System)

  • 소스 코드 관리와 같은 뜻이며, 형상관리에 포함되는 요소들중 하나

깃의 특성

  • 빠른속도, 단순한 구조
  • 분산형 저장소 지원
  • 비선형적 개발(수천개의 브랜치) 가능
  • 수정 내용은 commit 단위로 관리하기 때문에, 인터넷이 연결되지 않아도 개발할 수 있다.
  • 새로운 기능 추가는 브랜치로 개발하여 편안한 실험 가능. 성공적으로 개발 시 merge하여 반영

git objects

  • Blob: 파일 하나의 내용에 대한 정보
  • Tree: Blob이나 subtree의 메타데이터(디렉토리 위치, 속성, 이름 등)
  • Commit: 커밋 순간의 스냅샷

git Process Flow

  • 개인 working directory에서 작업을 하고 git add명령어로 staging area에 올린다.
  • 커밋 메시지를 작성해서 local repo로 커밋을 한다.
  • git push 명령어를 이용해 remote repo에 저장한다.

git 환경설정

git config --global user.name "유저네임"
git config --global user.email "메일주소"
git config --global core.editor "vim"
git config --global core.pager "cat"

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
  • 전역적으로 사용할 깃의 유저이름과 메일을 등록하고, 기본 에디터를 vim으로 그리고 페이지를 보여주는 것은 cat 명령어를 이용하도록 설정한다.
  • git config --list로 설정을 확인할 수 있다.
  • 마지막 줄은 깃 로그 정보를 이쁘게 볼 수 있도록 도와주는 옵션이다.

깃 시작하기

프로젝트를 시작하는 방법은 크게 두가지가 존재

  1. git init
  2. git clone

git init

작업 공간에서 시작해서 github로 소스코드를 순차적으로 내보낸다.

  1. 프로젝트 폴더를 만든다
mkdir practice-git
cd practice-git
  1. git init 명령으로 local repo로서 역할을 시작한다.
  2. github에서 새로 비어있는 remote repository를 생성하고, 복사한 주소를 local repo에 등록
    • remote repo와 local repo의 이름을 맞춘다.
git remote add origin 복사한주소
  • origin은 복사한 주소를 부르기 위한 별명같은 존재로, 다른 것으로 사용해도 되나 주로 origin을 사용한다.
  1. 현재 브랜치 이름을 main으로 변경
    • 기존에 주로 사용하던 master 표현 대신 main으로 바뀌는 추세이다.git branch -M main
  2. 새 파일을 만들고 작업을 수행
  3. 작업이 끝났다면 git status 명령으로 현재 프로젝트의 상태를 확인
    • untracked files가 보인다면 다음 작업을 할 준비 완료
  4. workspace에 추가된 새로운 파일을 staging area로 보낸다.
    • git add 파일명
  5. 추가된 파일에 커밋 메시지를 작성해 local repo로 커밋한다.
  6. git status로 commit 할 내역이 존재하는지 확인한 후, 커밋이 끝났다면 remote report push한다.
    • git push -u origin main
    • origin remote repo의 main 브랜치로 push한다는 뜻
    • 첫 커밋이라면, -u(--set -upstream) flag를 붙여 push하여 현재 작업중인 branch가 업로드할 branch의 변동사항을 추적하도록 설정
    • 이후에는 -u 옵션 없이 바로 push한다. (origin main)을 안붙여도 동작한다.

git clone

github에서 remote repository를 먼저 생성한 뒤, 작업공간으로 끌어와 작업을 시작한다.

  1. github에서 remote repo를 생성하되, LICENSE, README.md, .gitignore 등의 파일과 함께 생성
  2. 터미널에서 주소를 복사하여 작업공간에 local repo를 생성하며 복제한다.
    • git clone remote repo주소
  3. 커밋까지는 git init 방식과 동일
  4. commit이 끝났다면 remote repo로 push
    • remote repo에서 먼저 끌어와 사용하는 구조이기 때문에 remote repo의 main과 local repo의 main 브랜치는 추적하도록 세팅되어 있다.
    • 따라서, 위의 -u flag를 붙이지 않아도 된다.
    • git push origin master

Conventional Commit

  • 오픈 소스 개발의 경우, 소스 코드뿐 아니라 커밋 메세지도 공개되기 때문에 모든 사용자가 읽을 수 있는 영어를 선택
  • 커밋은 동작 가능한 최소단위로 자주 할 것
  • 해당 작업단위에 수행된 모든 파일 변화가 해당 커밋에 포함되어야 함
  • 모두가 이해할 수 있는 log를 작성할 것
  • 커밋 제목은 구나 절(50자 이내)로 완성
  • 내용은 optional body에 엔터로 구분하여 작성하며, 문장형으로 작성
  • 커밋 메세지의 제목에 prefix 꼭 달기
    • feat: 기능 개발 관련
    • fix: 오류 개선 혹은 버그 패치
    • docs: 문서화 작업
    • test: test 관련
    • conf: 환경설정 관련
    • build: 빌드 관련
    • ci: Continuous Integration 관련
profile
console.log(youjung(🌼 , 🍣)); // true

0개의 댓글

관련 채용 정보