Git/Github (1)

2022. 9. 28. 20:28프로그래밍/Git

    목차

UNIX

1965년 데니스 리치, 켄 톰슨 등이 벨 연구소에서 어셈블리어로 작성한 운영체제이다.

주로 서버용 컴퓨터에서 사용된다.

 

Kernel

하드웨어와 응용프로그램 간의 인터페이스 역할을 해주는 시스템 소프트웨어를 말한다.

 

Linux

1991년 리누스 토발즈가 작성한 유닉스 계열의 운영체제이다.

PC, 모바일, 서버, 임베디드 시스템 등의 다양한 분야에서 활용된다.

Redhat, Debain, Ubuntu, Android 등의 다양한 배포판이 존재한다.

 

Shell

사용자의 명령어를 인식하여 프로그램을 호출하고 명령을 수행하는 명령어해석기이다.

시스템과 사용자간의 인터페이스를 역할을 해준다.

 

- bash

Brian Fox 가 작성한 유닉스 쉘이다.

현재 리눅스의 표준 쉘이며 다양한 운영체제에서 기본 쉘로 채택되었다.

 

- zsh

Paul Falstad 가 작성한 유닉스 쉘이다.

macOS 에서는 카탈리나 버전부터 zsh 가 기본 쉘로 적용되었다.

철자 교정 및 테마 지원 등의 다양한 기능을 제공한다.

 

Shell Command

달러사인($) 은 명령을 실행할 준비가 되었다는 것을 의미한다.

 

# 현재 경로에 있는 파일 / 디렉토리 츨력
$ ls

# 숨김파일도 함께 출력
$ ls -a

# 파일의 상세 정보도 함께 출력
$ ls -l

# -a, -l 옵션 둘다 적용
$ ls -al

# 현재 디렉토리 출력
$ pwd

# 디렉토리 변경
$ cd

# 디렉토리 생성
$ mkdir [디렉토리명]

# 파일 생성 (텍스트 기반의 파일만 생성 가능)
$ touch [파일명]

# 파일 이동
$ mv [파일명] [디렉토리명]

# 파일명 변경
$ mv [기존파일명] [변경할파일명]

# 파일 복제
$ cp [새 파일명] [원본 파일명]
$ cp [원본 파일명] [저장할 디렉토리]

# 파일 삭제
$ rm [파일명]

# 와일드카드 활용하여 삭제
$ rm main.* (main 이라는 이름을 가진 모든 확장자의 파일)
$ rm *.txt (txt 라는 확장자를 가진 모든 파일)

# 디렉토리 삭제
# 디렉토리는 물리적으로 존재하지 않기 때문에 디렉토리 안의 모든 파일을 삭제한 후 디렉토리를 삭제함
$ rm -r [디렉토리명]

# 파일 내용 확인
$ cat [파일명]

# 주의사항!!! 절대 사용하면 안되는 명령어
# 컴퓨터 최상단의 모든 시스템 파일이 삭제되어 복구 불가능
$ rm -rf /

 

Vim Command

h j k l - left, down, up, right
i - insert mode
v - visual mode
ESC - back to normal mode
d - delete
dd - delete a line
y - yank
yy - yank a line
p - paste
u - undo
a - append
A - append from end of line
o - open line(under)
O - open line(upper)
H - move to the top of the screen
L - move to the bottom of the screen

 

Command mode

:q - quit
:q! - quit discarding all changes
:w - write
:wq - write and quit
:{number} - jump to {number}th line.

 

[ 파일 내용 수정하는 방법 ]

1. $ vi [파일명] 을 입력하여 편집기 열기

2. i 키를 눌러 insert mode 로 진입

3. 내용 수정후 esc 키를 눌러 insert mode 를 빠져나옴

4. :wq 를 입력하여 저장한 후 편집기 종료

 

git

리누스 토발즈가 만든 분산형 버전관리 시스템을 말한다.

 

- 빠른 속도

- 단순한 구조

- 분산형 저장소 지원

- 비선형적 개발 가능 (수천개의 브랜치 활용 가능)

 

git objects

Blob : 파일 하나의 내용에 대한 정보

Tree : Blob 이나 subtree 의 메타 데이터 (디렉토리 위치, 속성, 이름 등)

Commit : 커밋 순간의 스냅샷

 

git add : 스테이지 영역으로 가져다 놓기

git commit : 로컬 저장소로 가져다 놓기

git push : 원격 저장소로 가져다 놓기

 

# 변경사항을 누가 적용했는지 추적하기
$ git blame [파일명]

# 특정 라인만 추적하기
$ git blame -L [시작할 라인],[종료할 라인] [파일명]

 

Cloud Remote Repository Services

1. Github

가장 유명한 클라우드 원격 저장소 서비스

비영리 서비스였지만 MS 에 인수되었음

 

2. Bitbucket

Atlassian 이 서비스함

jira / trello / confluence 등의 부가도구와 유기적임

 

3. GitLab

GitLab 이 서비스함

서버 구성이 가능함

 

[ 전역 환경 설정 ]

$ git config --global core.editor "vim"

$ git config --global core.pager "cat"

# lg alias 설정
# From http://garmoncheg.blogspot.com/2012/06/pretty-git-log.html
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 --"

# 설정 확인
$ git config --global --list

# 설정 수정이 필요할 경우 vi 로 편집 가능
$ vi ~/.gitconfig

 

[ 리모트 확인 ]

# 현재 리모트 확인
$ git remote

# 리모트 목록 확인
$ git remote -v

 

Conventional Commits

commit 의 제목은 해당 commit 을 설명하는 하나의 구 또는 절로 완성되어야 하며 문장으로 작성하지 않는다.

또한 과거형이 아니라 현재형으로 작성한다.

 

[ commit prefix ]

- feat : 기능 개발 관련

- fix : 오류 개선 혹은 버그 패치

- docs : 문서화 작업

- test : test 관련

- conf : 환경설정 관련

- build : 빌드 관련

- ci : Continuous Integration 관련

 

commit 은 동작 가능한 최소의 단위로 자주 해야한다.

해당 작업단위에 수행된 모든 파일의 변화가 해당 commit 에 포함되어야 한다.

모든 사람이 이해할 수 있는 log 를 작성해야 한다.

Open Source Contribution 시에는 영어를 반드시 사용해야 하지만, 그렇지 않을 경우에는 팀에서 사용하는 언어를 따라 써야 한다.

제목은 50자 이내로 축약하여 쓰고, 내용은 문장형으로 작성하여 추가적으로 설명한다.

제목과 내용을 한 줄을 띄워 분리해야 한다.

내용은 해당 commit 의 구성과 의도를 충실히 작성해야 한다.

 

README.md

프로젝트와 Repository 를 설명하는 책의 표지와 같은 마크다운 문서를 말한다.

나와 동료, 해당 Repository 의 사용자들을 위한 문서이다.

 

.gitignore

git 이 파일을 추적할 때 특정한 파일이나 폴더 등을 추적하지 않도록 명시하기 위해서 작성된 문서이다.

해당 문서에 작성된 리스트는 수정사항이 발생하더라도 git 에서 무시된다.

특정 파일 확장자 또는 특정 디렉토리 아래의 모든 파일을 무시할 수도 있다.

 

# MacOS Setup
.DS_Store

# Python cache files
.py[cdo]

# Important files
/Important

# AWS key
key.pem

node_modules 같은 디렉토리 아래의 파일들의 수정사항을 무시하거나 key 를 숨기기 위해서 사용된다.

 

$ mkdir .hidden

유닉스 계열의 운영체제들은 파일명 앞에 . 을 붙이면 숨김 처리가 된다.

 

[ .gitIgnore 생성하고 편집하기 ]

$ touch .gitIgnore
$ vi .gitIgnore

# Custom

*.java
keyfile.*
.hidden/**
# * 를 두개 이어쓰는 것을 깃에서 권장하고 있음

 

License

1. MIT License

MIT 에서 만듦

모든 행동에 제약이 없음

저작권자는 소프트웨어와 관련된 책임에서 자유로움

 

2. Apache License 2.0

아파치 재단에서 만듦

특허권 관련 내용이 포함되어 있음

 

3. GNU General Public License v3.0

가장 많이 알려져 있음

의무 사항이 존재함 (GPL 을 따라야 함)

외부적으로 배포하는 경우에는 반드시 소스코드를 공개해야 함