ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL #7] Git
    CodeStates_Backend/TIL (Today I Learned) 2022. 5. 3. 14:27

    코드스테이츠 백엔드 부트캠프 39기 9일차

    📌 경로 , 명령어or코드 , 파일

     

    Git - 버전 관리 시스템 끝판왕

    분산형 버전 관리 시스템 git. 개발자에게 git은 필수다!

    git 을 배우면 오픈 소스 생태계에 기여할 수도 있을 것이다.

     

    변경 사항을 저장할 때는 항상 comment 를 상세히 적어둬야 한다.

    commit 을 할 때 마다 해당 시간에 Snapshot 이 하나씩 생성된다.

    commit 과 변경 사항 comment

     

    소스코드가 아닌 부분도 변경 사항이 생기면 하이라이트로 확인할 수 있다. 매우 좋은 듯..

    코드가 아니어도 변경 사항이 하이라이트로 표시된다!

     

     


    Git , Github

    git은 로컬에서 폴더를 지정해 해당 폴더 내부 파일들의 버전을 관리하는 시스템이고,

    github는 여러 사람들이 공동의 클라우드에서 git 을 함께 할 수 있게 하는 시스템이다

    아래 그림처럼 각자 개인의 로컬 git으로 작업하고 이를 공동의 github로 push 하는 방식으로 협업을 한다.

    각자 로컬 작업 후, github 로 git 작업 수행

     

     

    공동의 github 원격 저장소에 개입하는 것과 반대로, 공동 원격 저장소에 있던 프로젝트를 내 원격 저장소와 로컬에 가져올 수도 있다.

    fork 와 clone 이다.

     

    fork : 남의 원격 저장소를 내 "원격 저장소"로 가져오는 것.

    clone : 어떤 원격 저장소를 내 "로컬 저장소"로 가져오는 것.

    fork 와 clone

     

     

    로컬에서 변경된 내용을 commit 한 후, 원격 저장소로 push 하여 업로드를 할 수 있다.

    github 에는 Pull Request 라는 기능이 있어서, 내가 제안한 코드 변경사항을 Pull Request로 반영을 요청할 수 있다.

    Push

     

    공동 원격 저장소에서 다른 사람의 변경 사항이 적용되었다면 이를 새롭게 가져올 필요도 있다.

    이 때 Pull 명령을 사용한다.

    Pull

    [참고] pull 은 fetch + merge 로써 automerge 를 수행한다.

     

     


    git 설치 방법

    Mac OS 에서 터미널에 그냥 git 이라고 명령하면 된다.

     

     


    git 환경 설정

    1. 사용자 이름, 이메일 주소 설정

    git config --global user.name "Nbo-KimHyeongSeob"
    git config --global user.email "seobseoby7@gmail.com"

    2. 기본 에디터 변경 (vi -> nano)

    git config --global core.editor nano

    3. 설정 확인

    git config --list

     


    github 연결

    SSH(Secure SHell) 등록

      ssh 는 '보안 shell 접속'을 뜻하며, CLI 환경에서 다른 PC에 접속하거나 요청할 때 사용한다. 비대칭키를 이용해 사용자를 인증한다. 

      github에 'ssh 공개키(비대칭키 중 하나)'를 등록하고 ssh를 이용해 git clone 을 실습해본다.

     

    1. ssh 키 생성

    ssh 키는 비대칭키로 구성되며 이름에서 유추할 수 있듯이 두 개의 키가 서로 대칭이 되지 않는 형태로 존재한다.

    다음 명령어로 ssh 키 페어(쌍)을 생성하라.

    ssh-keygen

    ssh-keygen 결과

    경로 ~/.ssh./ 에 두 파일(ssh 키 페어) id_rsa id_rsa.pub 를 생성한다. 이 중 id_rsa.pub 는 공개해도 되는 공개키(Public Key)이고, id_rsa 는 공개하면 안되는 개인키(Private Key) 또는 비밀키(Secret Key) 라고 한다.

     

    2. 공개키(Public Key) 복사

    다음 명령어를 입력한다.

    cat ~/.ssh/id_rsa.pub

     

    3. github에 공개키 등록

     

     

     

     

     

     


    git clone 

    clone 이 정상적으로 되면 ssh 키도 정상적으로 등록된 것이다.

     

     


    git, github 의 workflow 학습

    git, github 의 기능과 명령어

    1. Fork
    2. clone
    3. status
    4. restore
    5. add
    6. commit
    7. reset
    8. log
    9. pull
    10. push
    11. init
    12. remote 
    13. remote -v

     

    혼자 작업 workflow

    1️⃣ 기여하길 원하는 원격저장소를 fork 를 통해 내 원격저장소로 가져온다.

    fork 1
    fork 2

     

     

    2️⃣ clone 으로 fork 한 내 원격저장소의 프로젝트를 로컬저장소로 가져온다.

        ssh 키로 등록을 해두었으므로 ssh 주소로 clone 을 진행한다.

    git clone git@github.com:Nbo-KimHyeongSeob/be-simple-git-workflow.git

    clone 결과

     

    3️⃣ git status 로 내 로컬저장소로 가져온 프로젝트의 상태를 확인한다.

        git status 는 commit 되기 전까지의 'staging area', 'unstaging area' 목록을 보여준다.

    git status 결과

        아무 변경사항이 없으므로, 아무 목록도 출력되지 않는다.

     

    [참고] : unstaging area와 달리, 아예 새롭게 생긴 파일을 untracked files 라고 표현한다.

     

     

    4️⃣ 변경 사항을 임의로 만들고 git status 를 해보자.

        기존에 존재하던 README.md 를 수정하였다.

    변경사항 생긴 후 git status 결과

        빨간색으로 modified: README.md 가 출력된다.

        빨간색으로 출력된다면 아직 add 가 되지 않은 'untracked file' 이다. add 를 하면 'staging area' 로 넘어가 commit 이 가능한 상태      가 된다.

     

     

    5️⃣ add 로 변경된 파일을 'staging area'로 넘겨보자.

    git add 를 한 후 git status 를 한 결과

        git add <파일명> 또는 git add .  (->모든 파일 다 add) 를 하면 add 수행된다. git add 후 git status 를 한 결과 초록색으로 수정된          파일 목록이 출력되는데, 초록색으로 출력되는 파일은 'staging area'에 있는 파일이다.

     

        ❓ [질문] add 가 완료된 후 다시 수정되면 어떻게 되는가?

                  -> add 된 파일은 그대로 'staging area' 에 있으며, 새롭게 수정된 파일은 'untracked file'에 올라간다.

                       새로 수정한 버전의 commit 을 위해서는 다시 add 를 실행해줘야 한다.

    같은 README.md 파일이지만 'staging area' , 'unstaging area' 에 둘 다 있다.

           여기서 git add 를 할 경우 최신 버전의 README.md(=새로 수정한 버전) 만 'staging area'에 남게 된다.

     

     

    6️⃣ restore 는 아직 commit 되지 않은 로컬저장소의 변경사항을 취소해준다.

        'unstaging area' 의 경우 git restore <파일명> 또는 git restore . (->모든 파일 다 restore) 로 변경사항을 제거해주고,

        'staging area'에 있는 파일의 경우 git restore --staged <파일명> ( . 도 동일하게 가능!)을 하면 'unstaging area'로 변경해준다.

    'unstaging area' 만 제거한 결과
    'staging area' 에서 제거 후 다시 'unstaging area' 까지 제거한 결과

     

     

    7️⃣ 이제 commit 을 해보자.

    commit 결과

    -m 옵션은 커밋에 대한 comment 를 적어둘 수 있다.

     

     

     

    8️⃣ commit 결과 확인

    git log 결과

        git 관련 로그들이 출력된다.

     

     

    9️⃣ reset 으로 commit 완료한 내용 취소하기.

        원격 저장소에 push 되지 않고 아직 로컬 저장소에만 commit 해 둔 기록이라면 reset 명령어로 commit 취소가 가능하다.

       

    git reset HEAD^ 결과

        HEAD3 , HEAD^^^ , HEAD~3 등의 사용법도 있고, hard 또는 soft 옵션도 있음 (추가 조사 필요)

     

     

    🔟 push 로 원격저장소에 업로드하기.

    push 결과

        연결된 내 원격저장소의 'origin' 의 'master' 브랜치로 업로드되었다. 

    내 원격저장소에 잘 push 되었음이 확인된다.

     

     

    1️⃣1️⃣ Pull Request(PR) : push 해놓은 변경 사항을 함께 작업하는 다른 사람들에게 알리는 것. github 에서 PR 을 할 수 있다.

             github 관리자는 PR 을 수락하여 merge 할 수도 있다.

     

     

    함께 작업 workflow

    1️⃣ git init 으로 원하는 디렉토리에 git 을 적용한다(로컬저장소가 되는 것). 만약 clone 으로 원격저장소를 가져왔다면 해당 디렉토리는 자동으로 git 이 적용된다고 보면 된다.

     

    2️⃣ git remote add origin <원격저장소 주소> : git 이 적용된 디렉토리(로컬저장소)와 나의 github의 원격저장소를 연결한다.

     

    3️⃣ git remote add <상대방 닉네임> <상대방 repository 주소> : 어떠한 상대방의 원격저장소와도 추가로 연결이 가능하다.

     

    4️⃣ git remote -v : 현재 로컬저장소와 연결된 모든 원격저장소 목록을 출력한다.

     

    5️⃣ git pull <상대방 닉네임> <브랜치명> : 연결되어 있는 '상대방 닉네임'의 한 '브랜치'를 로컬저장소를 가져오고 자동으로 병합(automerge) 까지 수행한다. 단, 병합 중 충돌(conflict)가 발생할 수 있다. 충돌은 상대방과 내가 동일한 라인을 수정한 것으로 git 에서 충돌을 알려주는 메시지를 띄어준다. 충돌 부분을 해결한 후 진행하여야 한다.

     

    [참고] 연결된 상대방 원격저장소로 push 도 가능하다. 권한 관련한 문제는 있을 수 있다.

     

     


     

     

Designed by Tistory.