교육/엘리스 SW 학습 내용

[엘리스sw] 1주차 5일 - Git

꼽파 2024. 1. 1. 14:38


  • 1. Git이란?

  • 2. Git 시작하기

  • 3. Git 가지 치기

  • 4. Git 원격 저장소

  • 1. Git이란?

    Git을 사용하는 이유

    · 파일의 버전이 달라지는 경우

    · 한 파일에 동시에 접근하여 수정하는 경우

    → Git을 활용하여 각 파일의 스냅샷 형태로 저장하여 원하는 버전으로 이동 가능함


    Git의 특징

    가지치기와 병합 main코드에서 독립성 유지하면서 개발 진행 가능함.
    가볍고 빠르다 · SVN (subversion) : 중앙시스템에 여러 개발자들이 접속하여 항상 네트워크가 필요함.
    · git : 대부분 서버와의 통신 없이 로컬에서 진행됨. 다른 사람과 코드를 공유할 때만 중앙 서비스에 접속함.
    분산 작업 복사된 프로젝트에서 동시에 작업 진행 가능함.
    데이터 보장 CommitID가 같음 = 파일 구성이 완벽히 같음.
    누가 어느 파일을 작업했는지 기록이 남음.
    준비 영역
    (Staging area)
    working directory [작업 영역] → git add → staging area [준비 영역] → git commit → repository [저장소]
    오픈 소스 소스코드를 공개한 상태에서 누구나 프로젝트의 발전에 기여할 수 있음.
    Git 호스팅 서비스 GitHub, Bitbucket, GitLab

    Git 설치와 초기 설정

    설치된 상태

     

    Git 초기 설정

    git --version Git 설치 확인
    git config --global user.name "elice"
    git config --global user.email gitaccount@elice.com
    사용자 정보 설정
    git config user.name "elice"
    git config user.email gitaccount@elice.com
    사용자 정보 설정
    (프로젝트마다 다른 사용자 정보)
    git config --list 설정 정보 확인

    Git 저장소 생성

    cd (디렉토리) : 프로젝트 경로로 감

    git init : 기존의 디렉토리를 git repository로 설정 git 저장소를 초기화

    ls -al : 파일 목록 출력 → 프로젝트 디렉토리에 .git 디렉토리가 생성됨.

    $ git init
    Initialized empty Git repository in /path/to/your/project/.git/
    
    $ ls -al
    total 12
    drwxrwxr-x 3 user user 4096 Dec 29 10:00 .
    drwxrwxr-x 7 user user 4096 Dec 29 09:55 ..
    drwxrwxr-x 7 user user 4096 Dec 29 10:00 .git

     


    2. Git 시작하기

    Git 파일 생성

    파일 영역의 라이프 사이클

     

    파일의 상태 라이프 사이클

    https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository

     

    저장소 생성 완료 후, 새로운 comment.js 파일 작업을 완료한 상태.
    이 파일을 저장소에 반영하는 단계는?


    1) comment.js 파일을 준비영역(staging area)으로 보냄.

    • git add comment.js
    • git add . : 현재 폴더의 모든 파일
    • git add README.txt main.py : 여러 개의 파일은 공백으로 구분

    2) staging 상태 확인

    • git status 

    Git 저장소 반영

    comment.js 파일 작업을 staging 하였으므로 
    이제 무엇을 수정하고 추가했는지 메시지를 남겨 저장소에 저장하는 작업 진행

     

    참고
    • git add : working directory → staging area
    • git commit : staging area → repository

     

    저장소 반영
    · 준비영역에 있는 파일들을 저장소에 반영
    · 메시지는 생략 가능하지만 넣는게 좋음.

    • git commit : .git 저장소 내에 staging 파일 저장
    • git commit -m "Initial commit"

    저장소 반영 내용 변경

    · 앞에서 적은 메시지에 오타가 있거나 누락된 파일이 있을 경우

    · 텍스트 편집기가 실행되어서 수정하고 싶은 부분을 수정하면 그대로 반영됨.

    • git commit --amend

    저장소 반영 내역 확인

    · 모든 commit을 확인할 수 있음

    • git log

    나노 에디터 

    • 새로운 파일 만들기 : nano (파일명)
    • 커멧 메시지 작성 후 저장 : ctrl X + Y + enter

    Git 관리 상태 확인

    • git status : Staging file들의 상태 확인
    • git log : .git respository에 존재하는 history 확인

     

    대표적인 log 옵션들

    git log -p -2
    • -p, --patch : 각 commit의 수정 결과를 보여주는 diff와 같은 역할을 수행함.
    • -n : 상위 n개의 commit만 보여줌.
    • git log --stat : 어떤 파일이 commit에서 수정되고 변경되었는지, 파일 내 라인이 추가되거나 삭제되었는지 확인
    • git log --pretty=oneline : 각 commit을 한 줄로 출력
    • git log --graph : commit간의 연결된 관계를 아스키 그래프로 출력
    • git log -S (function name) : 코드에서 추가되거나 제거된 내용 중 특정 텍스트(ex. function name)가 포함되어 있는지 검사 

     

    • Changes to be committed : 준비영역(staging-area)에 있음. → 여기서 없애려면 'git reset 파일명' 입력
    • Changes not staged for commit : 수정되었지만 준비영역에는 없음.
    • Untracked files : 준비영역에 없음.

    3. Git 가지치기

    Git Branch

    독립적으로 어떤 작업을 진행하기 위한 개념

    각각의 Branch는 다른 Branch의 영향을 받지 않음

     

    메인 Branch : 배포할 수 있는 수준의 안정적인 Branch

    토픽 Branch : 기능 추가나 버그 수정과 같은 단위 작업을 위한 Branch

    • git branch like_feature(브랜치명) : 해당 브랜치 생성
    • git branch : 현재 브랜치 확인
    • git checkout like_feature(브랜치명) : (브랜치명)으로 브랜치 전환
    • git checkout <snapshot hash(16진수)> : head가 해당 브랜치로 이동함
    git checkout d97d38
    
    git log --pretty=online

    fast forward

    like_feature Branch의 working directory에서 새로운 정보를 넣어 commit하려고 함.

     

    1) like_feature로 위치를 이동시킴.

    • git checkout like_feature

    2) like_feature branch에서의 작업을 끝마치고, master Branch로 통합함.

    • git checkout master
    • git merge like_feature

    like_feature branch의 내용이 master branch에서 업데이트 된 내용이기 때문에 곧바로 merge가 됨.
    이렇게 merge가 이루어지는 것이 fast-forward임.


    갈라지는 branch

    commit graph 확인 가능
    • git log --graph -all
    git checkout master을 이용하여 master로 checkout한 후 git merge like_feature로 merge함.
    • git checkout master
    • git merge like_feature

     

    Git Branch 삭제

    · 사용을 마친 branch는 -d 옵션으로 삭제

    • git branch --merged  : 병합된 브랜치 확인
    • git branch -d like_feature(브랜치명) : like_feature라는 브랜치 삭제됨.

    Git Merge

    merge conflict
    ·  merge한 두 branch에서 같은 파일을 변경했을 때 충돌이 발생함.
    ·  같은 파일인데 수정한 내용이 다를 때를 말함.

     

    • git merge like_features(브랜치명) : 브랜치 합치기
    Auto-merging conmment.js
    CONFLICT (content): Merge conflict in comment.js
    Automatic merge failed; fix conflicts and then commit the result.

     

    • git status : 어느 파일에서 충돌이 발생했는지 확인
    both modified : comment.js

     

    ·  충돌이 일어난 comment.js 파일을 열어보기
    ·  어느 것을 선택해서 쓸 것인지 선택해서 수정
    ·  <<<<<<<, =====, >>>>>가 포함된 행을 삭제해주기

     

    Git merge 충돌 해결
    ·  수정 완료 후 git add, git commit 과정을 거쳐 다시 Merge 해줌.

    • git merge like_feature(브랜치명)

    Git merge 충돌 방지
    ·  master branch의 변화를 지속적으로 가져와서 충돌이 발생하는 부분을 제거
    ·  master는 배포 가능한 안정적인 버전만 가지고 있어야 함.


     

    4. Git 원격저장소

     

    원격 저장소
    · 인터넷이나 네트워크 어딘가에 있는 저장소
    · ex) github, gitlab

     

    git 원격 저장소 받아오기

    • git clone : 기존의 git repository를 복사  (원격, 로컬에 모두 해당)

    현재 디렉토리에 직접 저장소를 생성

    git clone https://github.com/example/repo.git .

     

    현재 디렉토리 안에 새로운 폴더를 만들어서 저장소를 생성

    git clone https://github.com/example/repo.git


    원격 저장소 url로 받아오기
    ·gitlab 또는 github에서 원하는 프로젝트에서 clone 버튼을 누른다.
    ·2개의 옵션 중 clone with HTTPS 옵션으로 클론을 하게 됨.

    • git clone https://gitlab.com/dooly/living_with_gildong.git (주소) : URL의 Git 저장소를 복제하여 로컬 머신에 저장소 생성
    • git remote add origin https://gitlab.com/group/project (주소) : 로컬 저장소를 원격 저장소와 연결

    저장소 주소

    https://gitlab.com/group/project
    • gitlab.com : 웹 호스트 서비스
    • group : 그룹 명
    • project : 프로젝트 명

    연결된 원격 저장소 확인

    • git remote
    origin


    원격 저장소 살펴보기

    • git remote show origin : 현재 설정된 Git 원격 저장소인 origin에 대한 정보를 보여줌
    · 원격 저장소의 URL
    · 원격 저장소의 HEAD 브랜치
    · 로컬 저장소와 원격 저장소 간의 브랜치 관계
    · 원격 저장소의 태그 정보
    · 원격 저장소의 최신 변경 사항에 대한 정보

     

    원격 저장소 이름 변경

    • git remote rename origin(변경 전 이름) git_test(변경 후 이름)  : 원격 저장소 단축 이름을 origin에서 git_test으로 변경

    원격 저장소 삭제
    · 주소가 변경되었거나 필요 없어진 저장소 삭제

    • git remote rm git_test(원격 저장소 이름) : 로컬 저장소에서 원격 저장소인 git_test를 제거

    복사 후 붙여넣기

    • Shift + Ctrl + V

    feature/time-check라는 브랜치에서 작업한 내용을 master 브랜치에 합친 뒤 브랜치를 삭제하려고 함.


    1. feature/time-check 브랜치로 이동

    git checkout feature/time-check


    2. master 브랜치에 있는 작업 내용 병합

    git merge master


    3. master 브랜치로 이동

    git checkout master


    4. master 브랜치에서 feature/time-check 브랜치를 병합함.

    git merge feature/time-check


    5. merge conflict 해결 

    6. 충돌 해결이 완료되면 병합된 내용을 커밋함.

    git add .
    git commit -m "Merge feature/time-check into master"


    7. feature/time-check 브랜치를 삭제함

    git branch -d feature/time-check


    8. 다시 master 브랜치로 이동

    git checkout master

    커밋 해시나 브랜치 이름에 따옴표를 쓰지 않는 것이 일반적임.

    하지만 공백이나 특수문자가 있다면 묶어주는 것이 좋음.

    git reset --hard 9d46f1514b36dad6947508ffeb5754330ffb2c2b
    git reset --hard '9d46f1514b36dad6947508ffeb5754330ffb2c2b'
    728x90