Git 시작하기

1. git이란?

  • 역사
    리눅스 커널 프로젝트를 위한 버전 관리 시스템으로 개발
    Birth year : 2005년

2. Git vs SVN 트렌드 비교

구글 트렌드를 이용하여 시간 흐름에 따른 관심도 변화를 봤을 때 SVN은 계속 하락, Git은 계속 증가

3. Git의 초기 목표

  • 속도 : 네트워크 및 파일 처리
  • 동시 다발적인 개발
  • 책임성 : 소스 수정 추적 용이
  • 대형 프로젝트를 효율적으로 지원

4. 동작원리

– branch

- hotfix : 중대한 버그 수정
- release : 마스터로 가거나 디벨롭으로 가거나
  • snapshot
    데이터를 가져오거나 프로젝트를 저장할 때마다 그 시점의 파일에 대해서 스냅샷을 저장
    변경되지 않은 파일은 다시 파일을 저장하지 않고 이전에 지정한 동일한 파일을 링크

  • checksum
    데이터를 저장하기 전에 체크섬으 ㄹ구하고 이 체크섬을 통해 데이터를 관리
    SHA-1 해쉬를 사용
    *SHA-1 해쉬 : 16진수 문자 40개로 구성된 문자열, 파일의 내용 또는 디렉토리 구조를 기반으로 계산
    파일 이름이 아닌 컨텐츠 해쉬값을 저장 -> 파일명이 변경되어도 내용이 동일하면 같은 해쉬

  • Sections

- checkout the project : 클론을 하면 레포지토리해서 워킹으로
- staging area : 내가 관리하고 있는 파일과 목록이 있음
- stage files : add 명령어가 들어감
- commit : 스냅샷을 떠서 저장

5. Git 설정

  • 설정 파일 정보 확인
    git에서는 책임성을 유지하기 위해 커밋한 사람의 이메일과 이름이 반드시 필요
    설정정보는 config 파일에 저장되어 있음

    *설정 파일 위치
    1) 시스템 전역 경로
    2) USER_HOME/.gitconfig
    3) Working 디렉토리 경로 /XXX/.git/config

    + 참고 bask 화면 clear : ctrl + L
  • 작업자 정보 입력
    $ git config --global user.name coozplz
    $ git config --global user.email coozplz@gmail.com

6. Git Workflow

  • Init : 깃의 레포지토리를 초기화
  • Status : 깃의 레포지토리의 현재상태를 조회
  • Add : 워킹 디렉토리에 있는 파일들을 staging area로 추가
  • Commit : staging area에 있는 파일들을 리포지토리의 영역에 추가
  • Log : 이전에 작성한 커밋이나 파일의 변경이력들을 추적하기 위한 명령어
  • Diff : 이전 커밋과 현재 디렉토리의 비교, 특정 두 개의 커밋을 비교하는 명령어
  • Branch : 개발을 병렬적으로 진행하기 위해서 필수적
  • Tag : 브랜치와 유사, 태깅처리
  • Checkout : 브랜치를 이동하거나 특정파일을 내려받는 명령
  • Merge : 병렬적으로 진행한 브랜치를 하나의 브랜치로 병합

7. Git 명령어

  1. Init : 현재 디렉토리를 Git 레포지토리로 설정하는 명령

    Init 후 반드시 해야할 ignore 설정 : 무시할 파일 설정, OS에서 생성하는 파일, Log 파일 등 관리할 필요가 없는 파일이 많다.

  2. Status : 레포지토리의 상태를 보여주는 명령

  3. Add: Working Directoty의 파일을 Staging Area로 옮기는 명령

  4. Commit : Staging 영역에 있는 파일을 Repository에 저장
    커밋메시지는 50자 이내로 해야 oneline옵션을 줄 경우 보기가 편함

  5. Log : 저장소에 있는 Commit 이력을 조회하는 명령

  6. Diff : 다른 커밋과 Working 디렉토리를 비교하는 명령

  7. Branch : 브랜치를 생성, 수정, 삭제 등을 하는 명령
    $ git branch 브랜치명 : 브랜치 만들기
    $ git branch : 브랜치 목록 조회
    $ git branch –d 브랜치명 : 브랜치 삭제
    $ git branch –m 브랜치명 바꿀브랜치명 : 브랜치명 수정

  8. Checkout 워킹 디렉토리의 소스를 특정 커밋으로 변경; 특정 파일을 특정 커밋이나 브랜치로 이동하는게 가능

  9. Merge : 다른 두 개의 소스를 병합하는 명령
    $ git checkout master
    $ git merge develop

*머지가 항상 잘될까?
되는 경우 : 중복되는 위치를 변경하지 않은 경우
안되는 경우 : 같은 파일의 같은 부분의 내용이 변경된 경우
(예) develop에도 common.md 파일이 있고 master에도 common.md 파일이 있으면 git이 어느것이 사용자가 원하는 코드인지 알 수 없어 충돌이 일어남 -> 자동으로 병합할 수 없다는 메시지가 출력됨

(git merge 실습)


다른 브랜치에서 동시에 변경이 이루어졌을 경우 충돌이 일어남, 어떤 코드를 사용할지 선택해주어야 함


GitHub를 이용한 소셜코딩

1. GitHub란

  • Git Repository가 많이 모여있는 서비스
  • 개발자들이 소통할 수 있는 Pull Request
  • 소스 공유와 참여가 쉽게 가능

2. GitHub 특징

  • Repository Fork : 프로젝트를 처음부터 생성하는 것이 아니라 다른 사람이 이미 만든 프로젝트를 나의 프로젝트로 옮기는 기능
  • Pull requests : 소스의 변경사항을 Fork한 저장소에 커밋 후 원작자에게 원본 소스변경을 요청하는 기능
  • Social Networking : 다른 사람이 어떤 프로젝트를 참여중이며 어떻게 코드를 작성하는지 볼 수 있고 프로젝트에 대한 의견 교환을 할 수 있는 기능
  • Changelogs : 다수의 사용자가 개발을 함께 진행하기 때문에 변경 이력 관리가 어렵지만 Github를 이용하여 편리하게 진행할 수 있게 도와주는 기능

3. Github 공개 저장소 생성

  • 레포지토리명 : 원격 저장소의 URL 정보가 로그인 ID/레포지토리명을 생성
  • 공개여부 : 저장소를 공개할지 여부, 비공개는 유료버전에서만 가능
  • README : 저장소에 들어왔을 때 처음 보여주는 페이지, ignore 파일 바로 추가 가능

4. 마크다운 문법 맛보기 : HTML 형식의 문서를 쉽게 작성하기 위한 문법

crome 웹스토어에서 stackedit에서 설치하면 기본 문서가 작성됨 (아래)

5. Git 명령어

  • Remote Add : 로컬 저장소에 원격 저장소 URL을 등록하는 명령
  • Fetch : 원격 저장소에 있는 내용을 로컬로 받는 명령
  • Pull :원격 저장소에 있는 내용을 로컬로 받고 자동으로 Merge 동작을 수행하는 명령, Fetch와 다운로드한다는 것은 동일하지만 Fetch는 워킹디렉토리에 바로 반영이 안되지만 Pull은 워킹 디렉토리에 바로 반영이 됨
  • Push : 로컬 저장소의 내용을 원격 저장소로 업로드
  • Clone : 공개된 원격 저장소를 다운로드하는 명령
  • Pull Request : 오픈 소스에서 기능 개선 또는 버그가 있는 경우 직접 수정하고 원작자에게 반영을 요청하는 기능(내가 사용하는 오픈 소스에 버그가 있는 경우, 신규 기능을 추가하고 싶은 경우)



참고

강의명 : 누구나 쉽게 배우는 Git(깃) & Github(깃허브)
수료일 : 2022. 08. 08.
강사 : Ohsung Kwon




" 강의를 듣고 "

한이음에서 새로운 프로젝트를 시작하며 git을 처음 사용해보기도 하고 vscode에서 git을 사용하는데에 어려움을 느껴 관련 강의를 찾아 듣게 되었다. 정보처리기사를 공부하며 알게되었던 git 구조와 git 명령어를 실제로 어디서 어떻게 사용하는지 알 수 있어 좋았고, vscode에서는 어떻게 적용해야할지 생각해보며 강의를 들었다. github 레포지토리를 만들어 코드공부할 때마다 꾸준히 올리고 git 사용방법을 익혀야겠다고 생각했다.

profile
📩 qtly_u@naver.com

0개의 댓글