Cute Blinking Unicorn

서버/Git & GitHub

git / github 특징

민밥통 2023. 12. 12. 10:57

https://subicura.com/git/guide/#git%E1%84%8B%E1%85%B4-%E1%84%90%E1%85%B3%E1%86%A8%E1%84%8C%E1%85%B5%E1%86%BC

 

 

속성 용어 설명

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

https://git-scm.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 ~
$

 


a

마지막 저장소를 초기화 하기 위해서 git init라는 명령어를 수행하라고 함

 

mkdir, cd, touch, echo 명령어

터미널 명령어를 소개합니다. Git도 배우고 터미널 명령어도 배우고 1석2조!

  • mkdir: 디렉토리 생성
  • cd: 디렉토리로 이동
  • touch: 빈 파일 생성
  • echo "[글자]" >> [파일]: 파일에 글자 추가

마스터 > 계정 > 사용자의 마스터라는 권한을 갖고 있다. 


https://subicura.com/git/guide/basic.html#git-status-%E1%84%92%E1%85%A7%E1%86%AB%E1%84%8C%E1%85%A2-%E1%84%89%E1%85%A1%E1%86%BC%E1%84%90%E1%85%A2-%E1%84%92%E1%85%AA%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%AB

 

기본 명령어

Git/GitHub 안내서 - 기본명령어

subicura.com


추적되지 않는 파일들이 존재한다는 것을 확인할 수 있다.


현재 상태 추적

 


현재 상태 책갈피

두 개의 파일이 create 모드해서 뭔가 만들어졌다고 만들어졌다고 나오고 다시 Status 하게 되면 커밋할 게 없다 (클린되어 있다고 깔끔하게 작업이 완료됐다는 뜻이라고 함)

 

v1 커밋은 왜 치나 

ㄴ 우리가 현재 상태를 저장할 건데, 구별하기 위해서임 나중에 작업을 하다가 또 커밋을 하게 되면 지금 한 거라 이전에 한 거랑 구별하려면 구별할 수 있는 내용이 있거나 이름을 봐야 내가 왜 커밋을 한 건지 알아야 해서 이름과 설명을 써놓음

v1 이름은 내맘대로 해도됨 대신에 이거를 구분하기 위해서 설명을 써놓음 (책갈피마냥)


 

 

두번째 커밋(책갈피) 가 생성됨


다양한 변화

추가/수정/삭제를 이용한 세 번째 이력을 만듭니다.

작업

  1. red 삭제
  2. orange에 내용 추가
  3. green 파일 추가
  4. 상태 확인
  5. 전체 파일 인덱스에 추가
  6. 세 번째 이력 커밋


git log - 이력 확인

git log [<options>] [<revision range>] [[--] <path>…​]

git log는 다양한 옵션을 조합하여 원하는 형태의 로그를 출력할 수 있는 강력한 기능입니다. 이번 실습에선, 추가 옵션 없이 git log만 사용합니다.

작업

  1. 전체 로그 확인


2번 커밋까지 이력 초기화 > 결론적으로 3번 이력 삭제 확인

 

지웠던 red가 되살아나고 orange 내용이 수정되고 green파일이 사라진 것을 확인