스터디 노트🖊️_Day 38(Git)

정설령·2023년 4월 24일
0
post-thumbnail

✔️ Git 1~5

버전관리

  • 버전관리 시스템(형상관리)
    • Configuration Management Systems
    • Version Control Systems
    • Source Data + History
    • 협업, 작업추적, 복구 등이 가능
  • Git 특징
    • Distributed Version Control Systems
    • commit 하더라도 개인저장소 내에 적용됨 (다른개발자에게영향없음)
    • 원하는 순간에 배포(Push) 가능
    • 오프라인에서도 작업가능
    • 자신만의 version history를 가짐
  • Git 기반 서비스
    • Github
      • https://github.com
      • Git을 호스팅해주는 웹서비스, 협업을 위한 기능을 제공
      • 소스코드 보안이 중요한 경우 사용을 기피
    • Gitlab
      • https://gitlab.com
      • 설치형 버전 관리 시스템 - 소스 코드 보안이 중요한 기업에서 주로 사용
      • 클라우드 버전 관리 시스템 - 10명 이하 무료 (Github와 유사)
      • Issue tracker, Git Remote Repository, API, Team, Group 기능 제공
  • Git Global Configuration
    • Line ending
      • Windows : CR (\r) + LF (\n)
      • Unix or Mac : LF (\n)
      • Windows 사용자와 Mac 사용자가 같은 Git Repository를 작업할때 코드에서 변경된 내용이 없어도 CRLF 차이로인해 commit이 발생할 수 있음

Git 기본 용어

  • Repository
    • 소스코드가 저장되어있는 여러개의 Branch가 모여있는 디스크상의 물리적 공간
    • Local Repository와 Remote Repository로 구분
  • Checkout
    • 특정시점이나 Branch의 소스코드로 이동 하는 것을 의미
    • Checkout 대상 - Branch, Commit, Tag
    • Checkout을 통해 과거 여러시점의 코드로 이동이 가능
  • Stage
    • 작업할 내용이 올라가는 임시 저장 영역
    • 이 영역을 이용하여 작업한 내용중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있음
  • Commit
    • 작업할 내용을 Local Repository에 저장하는 과정
    • 각각의 commit은 의미있는 변경 단위이고, 변경에 대한 설명을 commit log로 남김
    • 권장 - commit을 아끼지마라. (게임의 save point, 아끼면똥됩니다.)
    • 참고 - commit단위나 commit log format을 정해놓은 회사나 팀도 있음 (빌드 서버를 사용하는 경우)
  • Tag
    • 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
    • Tag가 붙은 commit은 commit id (version) 대신 tag name으로 쉽게 checkout 가능
  • Push
    • Local Repository의 내용 중, Remote Repository에 반영되지 않은 commit을 Remote Repository로 보내는 과정
    • 권장 - Push하는 순간 다른 개발자들도 영향을받기 때문에 검증되지않은 코드는 Push 하지 않도록 함.
  • Pull
    • Remote Repository에 있는 내용 중, Local Repository에 반영되지 않은 내용을 가져와서 Local Repository에 저장하는 과정
    • 다른 팀원이 변경하고 Push한 내용을 Local Repository에 가져올 수 있음
    • 참고 - Push 과정에서 Conflict(충돌)이 일어나서 Push가 거절된 경우, Pull을 통해 Remote Repository의 변경 내용을 Local Repository에 반영하여 Conflict를 해결한 뒤 다시 Push를 시도해야함.
  • Branch
    • 특정 시점 (commit 단위)에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
    • 개발의 주축이 되는 branch를 master branch (혹은 main branch) 라고 함
    • 모든 branch는 최종적으로 다시 master branch에 merge (병합)되는 형식으로 진행 됨
  • Merge
    • Branch의 반대개념으로 하나의 Branch를 다른 Branch와 합치는 과정
    • Merge되는 두 Branch는 주종관계가 성립. 예 - dev branch 를 main branch 에 merge
    • Merge되는 과정에서 Confict (충돌)이 발생하는경우, Diff를 수정하여 Conflict를 해결한 뒤 Merge를 진행할 수 있음

Local Repository

  • 3단계 구성
    • Working Directory (작업공간) : 실제 소스파일, 생성한 파일들이 존재
    • Index (Stage) : Staging area (준비영역)의 역할, git add한 파일들이 존재
    • HEAD : 최종 확정본, git commit한 파일들이 존재
  • 작업공간 생성 후 git init
  • 파일 생성 후 스테이지에 추가
  • git commit

Remote Repository

  1. Local Reposiroty와 Remote Repository 연결
    • github에서 Local Repository와 같은 이름의 repository를 생성
    • Remote Repository 접속시 비밀번호 대신 Token 사용을 위해 생성
      • 사용자메뉴-Settings-Developer settings-Personal access tokens 클릭 후 생성
      • 생성된 Token 값은 별도로 저장해둘 것
    • Local Repository에 Remote Repository 등록 및 확인

  2. Remote Repository에 파일 올리기
    • git push

  3. Remote Repository에서 작성한 파일 Local Repository에 내려받기
    • git hub에서 README.md 파일 생성
    • git pull


문제

  1. Local Repository 생성하기 (위치 : git_ws 폴더하위, 이름 : exam_project)

  2. 파일 생성 후 Git으로 관리 시작하기 (파일 : exam.txt, Index 추가, HEAD 등록)

  3. Remote Repository 생성하기 (이름 : exam_project, 빈프로젝트)

  4. Remote Repository 등록하기
    • exam_project 의 Local Repository에 앞서 생성한 remote repository 등록 후 확인
    • token은 앞서 수업에서 생성한 token 계속 사용

  5. Local Repository 변경 내용을 Remote Repository에 반영하기

  6. Remote Repository 변경 내용을 Local Repository에 반영하기
    • exam.txt 파일수정 : This is git exam.

    • Local Repository 에반영후내용확인

  7. Local Repository 에서 exam3.txt 생성후 Remote Repository 에 반영하고 확인

    ※ 텍스트 파일 생성 시 내용을 담아 생성할때
    - 덮어쓰기
    → $ cat > exam3.txt
    입력내용 (ctrl+d 입력)
    - 이어 붙이기
    → $ cat >> exam3.txt
    추가 할 내용 (ctrl+d 입력)

    • exam3.txt : This is git exam3.

  8. Remote Repository 에서 exam3.txt 수정후 Local Repository 에 반영하고 확인
    • exam3.txt : This is commit exam.


Git - Remote Repository

  • HelloGit 생성 (README File & .gitignore (python) 선택 > Create repository)
    • README File
      • 프로젝트에대한설명, 사용방법, 라이센스, 설치방법등에대한내용을기술하는파일
      • 나, 직장동료, 프로그램 사용자를 위해 존재
    • .gitignore
      • Git 버전 관리에서 제외할 파일 목록을 지정하는 파일
        • 사용자가 원하지 않는 파일들을 자동을 commit 대상에서 제외시켜 줌
  • Default Branch
    • github에서 repository를 생성할 경우 branch 이름이 master가 아닌 main으로 설정되는 경우가 있음
    • 해당 이름은 변경 가능하며, repository 셋팅 메뉴에서 default 값 변경도 가능
  • Remote Repository 복제
    • Local Repository를 생성하지 않은 상태에서 Git Clone 명령을 사용하여 Remote Repository를 Local에 복제할 수 있음
    • Git Clone
      - 폴더를 만들고, Git Init으로 해당 폴더를 초기화하고, Remote Repository를 등록하고, Remote Repository의 내용을 Pull하는 모든 과정을 Git Clone으로 할 수 있음

Branch

  • Branch 조회( * : 활성화된 branch)
    • Local Branch 조회
    • Remote Branch 조회
    • Local + Remote Branch 조회
  • Branch 생성 및 이동
    • Local Branch 생성
    • Local Branch 이동
    • Local Branch 생성 + 이동
    • Remote Branch 생성


  • Branch 삭제
    • Local Branch 삭제

    • Remote Branch 삭제


Git Graph & Log

  • git graph 및 실습환경
    • remote repository에서 log_project 생성
    • local repository에 내려받고 hello.py 생성
    • remote repository에 업로드 1
    • hello.py 내용 수정 후 업로드 2
    • VScode에서 git graph 확인
    • 'dev' local branch 생성 및 이동
    • hello.py 내용 수정 후 업로드 3

  • git log
    - Branch별 변경 이력을 볼 수 있음
    • main branch로 이동 후 로그 확인
    • dev branch로 이동 후 로그 확인

      → modify 2 작업은 dev branch일 때 작업했으므로 main에는 나타나지 않는 로그 형태

"이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다."

0개의 댓글