속성 용어 설명
Git에서 사용하는 다양한 용어는 하나하나 실습하면서 소개할 예정이지만, 자주 사용하는 키워드를 우선 소개합니다.
- repository 또는 repo: 저장소 / Git으로 버전 관리하는 디렉토리를 의미
- local repository: 로컬 저장소 / 작업자의 개발 환경(PC)에 설정된 Git 저장소
- remote repository: 원격 저장소 / GitHub 등 외부 서버에 설정된 Git 저장소
- commit: 커밋 / 특정 상태를 기록한 것, 즉 버전을 의미 (데이터베이스에서도 사용가능, 메모리에 있는 것을 디스크에다가 반영했다는 뜻) (한마디로 진짜로 저장이 되었단 것 보장해줌)
- branch: 브랜치 / 한국어로 번역하면 가지치기 또는 갈래라고 하는데 또 다른 작업공간을 의미 (수많은 폴더들)
- merge: 머지 / 한국어로 병합 또는 합치기라고 하는데 특정 브랜치에서 작업한 내용을 또 다른 브랜치에 적용하는 것을 의미 (브랜치에서 작업한 내용을 또 다른 브랜치에 적용하는 것을 머지라고 함)
깃은 로컬에서 자기 혼자 관리하는 것, 깃허브는 애네가 만들어 준 구글 드라이브처럼 서버가 있는데 거기다가 계정을 만들면 나만 쓸 수 있는 공간을 할당해줌(구글 드라이브 처럼), 거기다가 내 소스를 올려서 버전관리를 하면 다른 사람도 같이 공유해서 볼 수 있다.
마스터, 디벨롭, 토픽 > 메인으로 우리가 프로그램을 개발하다가 추가적인 기능을 적용해봐야할 때 메인이 안정화가 안되는 상황으로 가면 안됨 그래서 메인은 그대로 가고 새로운 버전을 만들어서 디벨롭에서 적용을 해보고 괜찮으면 다시 합쳐주는 것
사용합니다.
#Small and Fast
Git은 초초 빠릅니다. C로 만들었고 분산 버전 관리 시스템이기 때문에 평소에 서버와 통신할 필요가 없고 대부분의 작업이 로컬에서 이루어집니다.
#Distributed
Git은 분산 버전 관리 시스템이고 로컬에 원격 저장소의 모든 데이터를 복제하기 때문에 사실상 개발자 수만큼 백업이 되어 있습니다. 필요하면 원격 저장소를 여러 개 만들 수 있고 다양한 작업방식을 도입할 수 있습니다. 진정한 분산 관리형 시스템입니다.
#Data Assurance
Git은 데이터 무결성을 보장합니다. 모든 파일과 커밋은 체크섬 검사를 하고, 특정 히스토리를 변경하면 해당 커밋 ID와 그 이후 모든 항목의 커밋 ID가 변경됩니다. 따라서 특정 커밋은 ID만 알면 변경되지 않았음을 확신할 수 있습니다. 너무 당연한 이야기 같지만 많은 버전 관리 시스템이 이러한 무결성을 제공하지 않습니다. (커밋 ID 라는 건 내가 작업해나가면서 여기까지 기억해, 또 작업하다가 여기까지 기억해 커밋을 적용할 수 있음 1번으로 돌아가고싶다 ID 1번으로 돌아가고 2번으로 돌아가고싶다 그럼 ID 2번으로 돌아감)
(area에다가)
Git의 단점
푸시하고 풀 / 업로드하거나 다운로드 / 로컬에서 내 거에다 적용 다시 불러옴 (로컬 용어x 깃허브)
https://subicura.com/git/prepare/git-setup.html
Git 설치
Git 설치하기
subicura.com
Git
git-scm.com
Lab6-User03@Lab6-PC03 MINGW64 ~
$ git version
git version 2.43.0.windows.1
#네임을 변경
Lab6-User03@Lab6-PC03 MINGW64 ~
$ git config --global user.name "kmj"
#이메일 변경
Lab6-User03@Lab6-PC03 MINGW64 ~
$ git config --global user.email "alswl_3693@naver.com"
#한글 출력 오류 방지
Lab6-User03@Lab6-PC03 MINGW64 ~
$ git config --gloval core.quotepath false
error: unknown option `gloval'
usage: git config [<options>]
Config file location
--[no-]global use global config file
--[no-]system use system config file
--[no-]local use repository config file
--[no-]worktree use per-worktree config file
-f, --[no-]file <file>
use given config file
--[no-]blob <blob-id> read config from given blob object
Action
--[no-]get get value: name [value-pattern]
--[no-]get-all get all values: key [value-pattern]
--[no-]get-regexp get values for regexp: name-regex [value-pat
--[no-]get-urlmatch get value specific for the URL: section[.var
--[no-]replace-all replace all matching variables: name value [ern]
--[no-]add add a new variable: name value
--[no-]unset remove a variable: name [value-pattern]
--[no-]unset-all remove all matches: name [value-pattern]
--[no-]rename-section rename section: old-name new-name
--[no-]remove-section remove a section: name
-l, --[no-]list list all
--[no-]fixed-value use string equality when comparing values tottern'
-e, --[no-]edit open an editor
--[no-]get-color find the color configured: slot [default]
--[no-]get-colorbool find the color setting: slot [stdout-is-tty]
Type
-t, --[no-]type <type>
value is given this type
--bool value is "true" or "false"
--int value is decimal number
--bool-or-int value is --bool or --int
--bool-or-str value is --bool or string
--path value is a path (file or directory name)
--expiry-date value is an expiry date
Other
-z, --[no-]null terminate values with NUL byte
--[no-]name-only show variable names only
--[no-]includes respect include directives on lookup
--[no-]show-origin show origin of config (file, standard input,mand line)
--[no-]show-scope show scope of config (worktree, local, globa command)
--[no-]default <value>
with --get, use default value when missing e
Lab6-User03@Lab6-PC03 MINGW64 ~
$
마지막 저장소를 초기화 하기 위해서 git init라는 명령어를 수행하라고 함
mkdir, cd, touch, echo 명령어
터미널 명령어를 소개합니다. Git도 배우고 터미널 명령어도 배우고 1석2조!
- mkdir: 디렉토리 생성
- cd: 디렉토리로 이동
- touch: 빈 파일 생성
- echo "[글자]" >> [파일]: 파일에 글자 추가
마스터 > 계정 > 사용자의 마스터라는 권한을 갖고 있다.
기본 명령어
Git/GitHub 안내서 - 기본명령어
subicura.com
추적되지 않는 파일들이 존재한다는 것을 확인할 수 있다.
현재 상태 추적
현재 상태 책갈피
두 개의 파일이 create 모드해서 뭔가 만들어졌다고 만들어졌다고 나오고 다시 Status 하게 되면 커밋할 게 없다 (클린되어 있다고 깔끔하게 작업이 완료됐다는 뜻이라고 함)
v1 커밋은 왜 치나
ㄴ 우리가 현재 상태를 저장할 건데, 구별하기 위해서임 나중에 작업을 하다가 또 커밋을 하게 되면 지금 한 거라 이전에 한 거랑 구별하려면 구별할 수 있는 내용이 있거나 이름을 봐야 내가 왜 커밋을 한 건지 알아야 해서 이름과 설명을 써놓음
v1 이름은 내맘대로 해도됨 대신에 이거를 구분하기 위해서 설명을 써놓음 (책갈피마냥)
두번째 커밋(책갈피) 가 생성됨
다양한 변화
추가/수정/삭제를 이용한 세 번째 이력을 만듭니다.
작업
- red 삭제
- orange에 내용 추가
- green 파일 추가
- 상태 확인
- 전체 파일 인덱스에 추가
- 세 번째 이력 커밋
git log - 이력 확인
git log [<options>] [<revision range>] [[--] <path>…]
git log는 다양한 옵션을 조합하여 원하는 형태의 로그를 출력할 수 있는 강력한 기능입니다. 이번 실습에선, 추가 옵션 없이 git log만 사용합니다.
작업
- 전체 로그 확인
2번 커밋까지 이력 초기화 > 결론적으로 3번 이력 삭제 확인
지웠던 red가 되살아나고 orange 내용이 수정되고 green파일이 사라진 것을 확인