Post

[DevOps]Git이란?

git이란?
“컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다.”

Git

1. 특징(협업에 관한 다양한 기능)

  1. Branching and Merging : Branch 기능을 제공하여 동시에 여러 작업을 진행하고 합치고 충돌을 해결 할 수 있음.(많은 회사에서 브랜치를 만들고 메인 브랜치에 머지하는 방식을 사용)
  2. Small and Fast : C언어로 만들어 졌으며 평소에 서버와 통신할 필요가 없고 대부분의 작업이 로컬에서 이루어짐.
  3. Data Assurance : 데이터 무결성 보장.
  4. Staging Area : 다른 버전 관리 시스템과 달리, 커밋 이전에 staging area(index)라 불리는 상태를 가짐. 이 상태에서 커밋 내역을 검토하고 일부 파일만 커밋이 가능.
  5. Free and Open Source : 오픈 소스 라이선스인 GNU Genral Public License version 2.0으로 무료 제공.

2. 기본 용어

용어내용
repository(repo)저장소, Git으로 버전 관리하는 디렉토리를 의미
local repository로컬 저장소, 작업자의 개발환경(PC)에 설정된 Git 저장소
remote repository원격 저장소, GitHub 등 외부 서버에 설정된 Git 저장소
commit특정 상태를 기록한것, 즉 버전을 의미
branch또 다른 작업 공간을 의미
merge특정 브랜치에서 작업한 내용을 또 다른 브런치에 적용하는 것을 의미
origin원격 저장소 이름
1
2
3
4
5
6
7
origin | 원격 저장소 이름
main or master | 브랜치 중 기본적인 브랜치
head | 내가 어떤 작업공간에 있는지 확인.

git init
git remote add [origin] [https url]
git pull 

3. git 환경설정

1
2
3
4
git version # 설치 확인
git config --global user.name 'user name'       # 이름 설정
git config --global user.email 'user@email.com' # 이메일 설정
git config --global core.quotepath false        # 한글 출력 오류 방지

4. 기본 명령어

1
2
3
4
5
6
7
8
9
10
11
git init        # 로컬 Git 저장소 설정
git status      # 현재 작업중인 파일의 상태 확인
git add [-A] [(pathspec)..]                                               # 파일의 변경사항을 index에 추가, git은 commit 전 index에 저장. | -A option : 전체 파일
# git add . (all file)
# git add [file_name] (file_name add)
git commit [-m 'msg'] # -m option                                         # 변경 이력 메시지 작성
git log [(options)] [(revision range)] [[--] (path)...]                   # 다양한 옵션을 조합하여 원하는 형태의 로그를 출력하는 기능.
git reset [(commit)] [--soft | --mixed [-N] | --hard | --merge | --keep]  # 특정 커밋까지 이력을 초기화
# git reset HEAD  (모든 파일 add 취소)
# git reset HEAD [file_name] (file_name add 취소)
git revert (commit)# 특정 커밋을 취소하고 새로운 커밋을 만듦.

5. 작업 분기

  • 강력한 브랜치 기능을 이용하여 비선형 개발이 가능
1
2
3
4
5
6
git switch (-c|-C) (new-branch)       # qmfoscl todtjd | -c option : branch & swtich 동시 수행
git branch add-color  # add-color 브랜치 생성
git switch main # main 브랜치로 이동

git merge [(commit)…] # 현재 브랜치에 특정 브랜치에 합침.
git merge --abort # CONFLICT(충돌 메시지) 시 작업 취소

6. Github(remote repository) 공유

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git remote add (name) (url)                                     # 원격 저장소 연결
(ex. git remote add origin https://github.com/.../sample.git)   # origin : git은 여러가지 원격 저장소를 등록할 수 있고 기본 저장소의 이름이다.
# git 사용시 현재 local과 원격 저장소(github)와의 연결을 해야함
# git remote -v (현재 연결 원격 저장소 확인)
# git remove add <name> <url> (해당 원격 저장소 연결)
# git remote remove <name> 원격 저장소 연결 끊기

git push [-u | --set-upstream] [(repository) [(refspec)…]]      # 원격 저장소에 로컬 저장소의 모든 커밋을 푸시함 | -u option : 이후에 다른 이름 지정 안하고 push 가능.
git clone (repository) [(directory)]                            # 원격저장소에서 로컬 저장소로 복제.
(ex. git clone https://github.com/.../sample.git dirname)
git pull [(repository) [(refspec)…]]                            # 원격 저장소 내용 가져오기, 변경된 내용을 로컬 저장소로 가지고옴(동기화 X)

git rm <file_name> (원격저장소, local 저장소에 있는 file 삭제)
git rm --cached <file_name> (원격 저장소에 있는 파일만 삭제, local 저장소 파일은 삭제 안함)
git reset --hard HEAD (git rm 한 file 복구)

7. In Visual Studio Code(GUI)

1
2
U 상태 # Untracked
A 상태 # add

8. .gitignore

.gitignore 파일은 Git으로 관리되는 저장소에서 추적하고 싶지 않은 파일이나 폴더를 지정할 때 사용하는 파일입니다. 이 파일은 git add 명령을 실행하기 전에 미리 설정되어 있어야 합니다. 또한, .gitignore 파일을 자동으로 생성해주는 사이트도 있습니다.

.gitignore 자동생성 사이트

해당 사이트에 운영체제(OS), 개발환경(IDE), 프로그래밍 언어(Language)를 입력하면 .gitignore 파일 내용을 자동으로 생성해줍니다.

.gitignore 파일을 작성할 때는 아래와 같은 규칙을 따릅니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 기호로 주석을 추가할 수 있습니다.
# 빈 줄은 무시됩니다.
# * 기호는 0개 이상의 문자를 나타냅니다.
# / 기호는 경로를 구분하는 데 사용됩니다.
# ! 기호는 해당 파일이나 폴더를 무시하지 않도록 설정합니다.
# 아래는 .gitignore 파일에서 사용할 수 있는 예시입니다.

# 확장자가 .a 인 모든 파일을 무시합니다.
*.a

# folder_name 폴더의 모든 파일을 무시합니다.
folder_name/

# folder_name 폴더의 확장자가 .a 인 모든 파일을 무시합니다.
folder_name/*.a

# folder_name 폴더를 포함한 하위 모든 폴더에서 확장자가 .a 인 모든 파일을 무시합니다.
folder_name/**/*.a

# 현재 폴더의 확장자가 .a 인 모든 파일을 무시합니다.
/*.a

9. Error

directory를 변경할때 현재 유저의 소유권을 변경하게 되어 오류가나는데, 해당글을 넣으면 예외처리가 된다.(참고)

1
git config --global --add safe.directory directory_root

Gist

gist?
요점, 요지 라는 뜻으로 github gist는 짧은 코드, 메모 등을 기록 또는 고유 목적으로 사용하는 무료 서비스.

gist를 통해 mardown안에서 .ipynb형태도 삽입 가능합니다.

REFERENCES


  1. git wikipedia : https://ko.wikipedia.org/wiki/깃_(소프트웨어)
  2. git guide: https://subicura.com/git/guide/#git의-특징
  3. gist : https://bamdule.tistory.com/223
This post is licensed under CC BY 4.0 by the author.