ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210421 - TIL
    TIL/2021 2021. 4. 22. 01:48

    Git

     

    Git에 대해서 제대로(?) 공부하기로 했으니 git 공부를 시작했다.

     

    Git의 사용목적

    1.Version

        • 버전 관리가 쉬워진다. 변화점을 한눈에 볼 수 있다.
        • 여러 개의 파일을 관리할 수 있다.
        • 쉽게 이전 작업으로 돌아갈 수 있다.

    2. Backup

        • 언제 나의 컴퓨터가 망가질지 모른다.
        • Github에서 Remote repository를 생성한다. <-> Local repository와 반대되는 개념
        • Push를 하면 remote rep에 저장이 된다.
        • Pull 하면 Local으로 가져온다.

    3. Collaboration

        • 위의 push, pull을 하면 협업을 할 수 있게 된다.
        • 만약 같은 것을 수정하면 어떻게 될까??? 
        • 이때 git이 처리를 잘할 수 있도록 도와준다.

    SourceTree 이용하여 git 사용하기로 하자.

      • 나중에 CLI를 이용하여 git을 사용하는 것을 공부해보자.
      • Git Staging
        • working dir - 작업 중인 dir
        • working copy - 작업 중인 file
        • git dir - .git을 말한다,
        • stagingArea, index, cache  - 커밋 대기 상태

     

    Reset과 Revert

      • Reset commit
        • 나중에 협업할 때 이미 올라간 버전은 reset하지 말자!
        • 사용법은 내가 작업하고 working copy를 날릴 때 사용하자.
        • commit이 원하는 시점으로 리셋된다.
        • Hard로 하면 다 돌아간다. -mixed, soft는 안 날아간다네??
      • Revert
        • reverse commit = revert commit
        • reverse처럼 작업한 것을 없애지만 무엇을 바꿨다가 다시 되돌렸는지 알 수 있다.
        • 주의점은 여러 단계의 버전으로 revert 하고 싶다면 한 단계씩 넘어가야 한다. 한 번에 껑충 넘어가면 conflict 발생

     

      • 과거 상태로 돌아가고 싶다면 더블클릭을 하면 된다
      • 각 commit은 Id가 있다. (SHA-1)이라고 한다
        • tag를 이용하면 더 쉽게 할 수 있다.
      • 비교하고 싶을 때 open current version, open selected version을 하면 된다.
      • Diff Tool
        • 설정 - Diff에서 설정해줄 수 있다.
        • 차이점을 비교해주는 외부 프로그램을 사용할 수 도 있다. ex) KDiff3

     

    Backup

      • 정보를 .git에 저장한다.
      • git hosting - local repo를 remote repo에 업로드해주도록 도와주는 서비스 (아주 유명한 GitHub가 있다.)
      • Local Repository - 작업하는 나의 저장소
      • Remote Repository - 백업을 해 놓을 원격 저장소
      • Local -> Push -> Remote
      • Remote -> Clone -> Local2
      • Local -> Push -> Remote
      • Remote -> Pull -> Local 

    Local -> Remote 정보 전달 방식

      • HTTP, SSH 전달 방법이 있다.
        • HTTP는 보안이 살짝 부족하다. 하지만 사용이 쉽다.
        • SSH는 보안이 좋다. 하지만 사용을 위해 지식이 필요

    Remote -> Local 정보 전달 방식

     

    Local Remote 연결 (backup)

    repository -> Add Remote -> Http 주소 연결 후 이름은 기본적으로 origin으로 한다.

    Push로 remote에 올리는데 여기서 track에 대한 이해는 brach를 공부하고 공부하도록 하자.

     

    복원하기

     

      • 일단 저장소의 주소를 가져오자.
      • Clone으로 Remotr -> Local을 만들자.
      • 복사한 주소를 입력하고 저장 위치를 선택하면 끝!

     

    GitHub의 기능들

      • Issues Tracker
        • 공부를 해보자

     

    Collaboration(협업)

     

    head - 동그라미가 있는 부분 - 현재의 상태

    checkout - head를 옮기는 행위

     

    Branch

      • 기본은 master branch
      • 새로운 brach를 생성하자.
      • 이름 옆에 동그라미는 현재 brach를 나타낸다.
      • 보는 방법을 AllBraches로 해주자.
      • brach를 옮기면 해당 work copy로 간다.
      • delete하고 force delete하면 삭제된다.

     

    Conflict

      • 같은 파일에 서로 다른 부분을 수정하면 하나로 ‘알아서’ 합쳐준다.
      • 근데 같은 파일에 서로 같은 부분을 수정하면??
        • '알아서' 어떤 걸로 합쳐야 할지 몰라 Conflict가 발생한다.
        • 직접 이 conflict를 해결해야 한다.

     

    Merge

      • Branch를 나눴던 것을 합치는 것
      • base -  합치려고 하는 두 버전의 공통조상
      • merge commit 
      • 다른 부분을 수정하면 손쉽게 merge가 가능하다.
      • 같은 부분을 수정하면 conflict가 발생한다.

     

      • <<<<< HEAD
      • ========= - 구분자를 기준으로
      • >>>>> opentutorials
      • 위아래가 같은 부분을 수정했다. 나는 못 정하니까 네가 둘 중에 선택해줘
      • using Mine. using Theirs를 사용하거나 직접 수정을 하고 Mark Resloved 하면 된다.

     

    3 Way Merge

      • 2개의 brach를 병합하면 2-way merge
      • 3개를 병합하는데 base와 2개의 branch를 병합, 그리고 변화한 것들을 알아서 합쳐준다. 3-way

     

    외부 도구를 사용하여 merge

      • P4Merge라는 도구
      • preference로 들어가서 diff와 merge를 p4merge로 바꿔준다.
      • 들어가면 local base remote 이렇게 보이고 원하는 대로 바꾸고 저장하면 된다.
      • 백업 파일이 추가되는데 지워도 된다.

     

    공부할 것

      • git workflow
        • git flow - 모범사례를 살펴볼 수 있다. git flow라는 프로그램도 있다.
      • Cherry pick
        • 원하는 버전을 병합하는 방법
      • rebase
        • TimeLine을 깔끔하게 할 수 있다.
        • base를 옮기는 거처럼 생각하면 된다.

     

    Head, Branch, Commit 관계

      • .git에 head파일이 있다. -> master branch를 기본적으로 가리킨다.
      • master -> 버전을 가리킨다.
      • 커밋하면 -> master가 다음 버전을 가리킨다.
      • 한마디로 head -> master -> version의 흐름
      • 여기서 새로운 branch를 생성하면 head -> master -> version 확인 그 version을 새 branch가 가리킨다.
      • checkout을 하면 head -> brach -> version 으로 된다.
      • checkout은 기본적으로 head를 바꾸는 거
      • Head가 commit을 가리킬 수도 있는데 이를 detached라고 한다.

     

    Checkout vs Reset

      • Reset과 checkout의 차이는??
      • Reset은 head를 바꾸는 게 아니라 branch를 바꾼다. 이전 버전을 가리키게 되면서 최근 버전은 사라져 버리게 된다.

     

     

     


     

    728x90

    'TIL > 2021' 카테고리의 다른 글

    210425 - TIL  (0) 2021.04.26
    210422 - TIL  (0) 2021.04.23
    210419 - TIL  (0) 2021.04.20
    210416 - TIL  (0) 2021.04.16
    3월 1주차 회고  (0) 2021.03.08
Designed by Tistory.