ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Git2 - SourceTree (1)Version Control
    생활코딩 Git 2021. 11. 8. 15:35

    https://youtube.com/playlist?list=PLuHgQVnccGMCejd1l8C8oyZSYQDtkMRAg

     

    GIT2 - SourceTree 버전관리편

     

    www.youtube.com

    ---------------------------------------------------------------

    @Git2 - SourceTree 버전관리 - 1.소개

    Git기본기능 + 이 프로그램이 제공하는 풍부한 기능이 있다. Git과 관련해서 가장 권위있는 도구중 하나. 파일의 이름을 더럽히지 않으면서 모든 변경사항을 보존할 수 있고 각각의 변경사항의 내용을 풍부하게 설명할 수 있다. 기대되시죠? 하세요 기대안하면 자기 손해예요

    --------------------------------------------------------------------------------------------------------------------

    @저장소 생성

    저장소 - 영어로 Repository

     

    프로젝트마다 저장소가 한 개

     

    내문서에다 폴더를 만들거고 그것을 깃으로 버전관리 할것임.

     

    하여튼 내가 저장소의 내용을 바꾸면 깃이 알고 있고 그걸 파일마다 나눠서 버전을 만들수도 있고

     

    아니 그게 아니고 파일을골라서 버전을 만드는거야 내가 안 고르면 버전에 안들어가 폴더안에 버전에 안들어간게 있으면 변경사항이 뜬다! + 저장소가 어떤 상태인지로 계속 연결해서 생각해<-<-<-

    그럼 그 폴더 전체를 사진 찍는건가? 변경사항이 생기면 골라서 버전에 넣을 수 있는거고? 아니 그건 아닌게 파일 만들고 리셋시키면 그럼 폴더전체 사진 찍는거면 만든게 사라져야되잖아 해보니까 아닌데? 만들고 m6으로 커밋하고 m5로 리셋하니까 다시 커밋하지 않은 변경사항이 뜬다.(파일을 지울 순 없나보네(이거아님, 아래 써놓음))->마지막 버전과 워킹디렉토리의 내용이 달라지면 무조건 스테이지에 올리겠습니까? 이게 뜨는구나

    =>있던 파일 수정 + 새 파일을 만들기 -> 그럼 변경사항이 뜨는데 -> 여기서 커밋안하고 이전버전 리셋시키면 수정한건 되돌려지지만 새 파일 만든건 안지워짐 버전에 안들어가 있는건 안건드리는거니까?

    =>근데? 새 파일 만들고 커밋을 한 다음에, 이전버전으로 돌려버리면 만들어진 파일도 없어져.

    =>왜냐면 파일을 만든걸 버전으로 만들었으니 그걸 되돌리면 파일이 없어지는거구나.

    =>커밋된 것 중에서 건드리는거고. = 버전은 폴더 전체를 사진찍는게 아니라 찝어서 저장한다

    =>각 버전은 이어져있구나.(그래야 이게 가능하지, 만약 파일이 많이 있는 걸 중간에 .git폴더를 만든다고 치면 처음버전을 짚어줘야하는거다. 모든 파일을 스테이지에 올라가지 않은 파일이라고 잡고 첫버전을 만들어줘야함. 그 다음부터 버전으로 저장 될 내용들은 각각의 파일들의 변경사항)

     

    소스트리에서 FIle - Clone / New --윈도우버전만 필기하자

    ->Create ->폴더선택 : 종류는 Git으로, 생성, 뭐 뜨면 예

     : .git 폴더가 생김. 여기에 git이 버전을 몰래 저장함.

    ----------------------------------------------------------------------------------------------------------------

    @버전 생성

    버전관리 폴더에 파일을 만들면 소스트리가 그걸 알게됨.

    Working Copy(파일 상태)라고 돼있는곳에 hello.txt가 보임 드래그로 스테이지에 올라간 파일로 옮기고

    아래다가 commit메시지를 뭐가 바뀌었는지 어떤 작업이었는지 자세하게 쓴다. 풍부하게

    ->commit --버전을 만들었으니까 제출

     

    그럼 화면에 없어졌는데, master라는걸 눌러보면 우리가 방금 추가한게 나옴.

     

    메모장 다시 수정하고 저장하고 master의 빈공간 클릭하면(새로고침인듯) Historymaster든 커밋하지 않은 변경사항이라고 뜸.

    ->파일 상태 눌러보고 또 뜨는데 위로(스테이지에) 올리고 메시지 넣고 커밋

    ----------------------------------------------------------------------------------------------------------------

    @5.하나의버전, 여러개의파일

    하나의 버전에 여러 개의 파일이 포함될 수 있다.

    폴더에 두 개의 파일을 수정하면 두 개의 파일이 뜸.

    이 두 개의 변경사항을 하나의 버전(작업)으로 묶고 싶다. : 두 개 같이 + 해서 커밋하면 history에 두 개의 파일이 보인다 --파일의 이름 바꾸는걸론 불가능한 작업임

    --------------------------------------------------------------------------------------------------------------------

    @6.버전쪼개기

    작업을 정신없이 하다보니 버전을 생성하는걸 까먹었을 때

    두 개의 수정된 파일을 스테이지파일스(커밋대기상태)하나씩 올려서 하나씩 커밋하는것임 그럼 그 파일 하나만으로 버전이 한 개 그 다음 파일 추가한걸로 버전이 한 개가 됨.

    ->깃은 수정된 모든 파일을 버전으로 만드는게 아니라 그 중에 버전으로 만들고 싶은것만 선택해서 만들 수 있구나.

     

    그니까 큰틀은 원본을 근거로 버전을 만드는건데, 깃은 가장최근버전(git directory에 저장돼있겠지)과 원본의 다른점을 알아챌 수 있고 파일마다 따로따로 볼 수가 있네 그럼 그걸 파일마다 따로 버전을 만들수가 있는 것.

     

    선택하는 행위 : 스테이징에 올린다.

    git은 로컬디렉토리가 있고(working directory), git directory가 있다(그건 repository라고한다).

    지정한 폴더의 파일들을 working directory, working copy라고 하고 버전 만들때마다 .git폴더안에 저장되는데 그곳을 git directory, repository라고 함.

     

    소스트리에서 스테이지에 올라간 파일들을 커밋대기상태라고하고 staging area(=index, 캐쉬)

    working directorygit directory처럼 물리적으로 존재하는게 아님. 내부적으로 논리적으로 하는 일.

    커밋을 하면 워킹카피에 있었던 것이 스테이징에어리어에있다가 .git이라는 디렉토리안에 버전의형태로 저장됨.

    ----------------------------------------------------------------------------------------------------------------

    @7.reset

    어떤 정보 시스템이든 CRUD할줄알면 할줄안다고 생각함.

    CR이 핵심. C가 없으면 아무것도 못하고 R을 안하는데 C할 필요가 없음.

    UD는 초심자분들은 거의 사용안한대

     

    버전 우클릭해보면 reset( current branch to this commit)이라는게 있는데

    한글로는 이 커밋까지 현재 브랜치를 초기화

    reset : 우리 저장소의 상태를 그 버전이되게 하는 것, 그걸 reset하겠다가 아니라 그 상태로 reset하겠다.

    hard를 선택하면(soft, mixed하면 수정안된대) 스테이징area에 올리지 않은 파일, commit하지 않은 파일, 그거 이후에 버전까지 다 날라감.

    이제 저장소가 옛날 상태로 돌아간걸 볼 수 있는데 여기서 충분히 감동을 하셔야된다~

     

    오늘 작업을 해놓고 소스트리키면 스테이징area에 올라가기전인 파일들이 있는 상태임.

    근데 작업 마칠때 보니까 오늘게 마음에 안들어!

    여기서 그냥 이전 버전으로 reset하면 파일이 원상복구되는 것.

     

    --협업할땐 이미 올라간 버전 지우면 안됨. 지금은 이해못하지만 위험해서 미리알려줌

    ----------------------------------------------------------------------------------------------------------------

    @revert

    기록을 훼손하지 않고 과거로 되돌리는 것이 revert

    저기서 1번 항목을 그냥 지워버리는게 아님. 이렇게 처리해줘야됨. 기록지우지 않음 여러 가지 이유로 부정사용 등이 있을 수 있으니.

     

    m1 m2 m3 m4 m5 m6이 있을 때

    m5로 되돌아가버리고 그 이후 다 지워버리는게 reset, m5를 커밋했을때의 상태로 되돌아가는 것.

    m6에서한것들을 취소하고 그걸 또 새로운 버전으로 만들고 싶다가 revert. 지우는 것 없음.

     

    소스트리에선 Reverse commit, 한글에선 커밋되돌리기

     

    이걸 하면 새로운 커밋이 자동으로 만들어짐!

    revert 7 revert한것임. 그게 없어진 것.

     

    어려운것임. 필요하게 되면 그때 공부할 에너지가 있으니까 하시게 될 것. 지금은 이런게 있구나~

     

    m1 m2 m3 m4 revert5 rever6 revert7 일때

    revert 7 을 했으니 revert6(바로이전단계) 와 같은 상태가 됐다.

    여기서 바로 m4revert하려고 하면 충돌이 일어남. 안됨. 이렇게 하고 싶으면 revert6을 취소, revert5을 취소.. 이렇게 하나씩 다 해야함.

     

    m4 revert한다는건 m4후에 일어난 모든 변화를 되돌려서 m3가 되겠다는게 아님.

    m4에서 일어난 변경사항만을 되돌리겠다는 것.

    근데 m4이후에 버전들이 있다면 이후에 생긴 변화들을 유실할 수가 있어서 에러비슷한 충돌이라는걸 내버림.

    --------------------------------------------------------------------------------------------------------------------

    @시간여행

    버전을 수정하는게 아니고(이건 reset)

    과거의 상태로 돌아가서 뭔가를 확인해보고 싶다.

    그럼 그냥 버전을 더블클릭하면됨 --파일도 다 사라지고 그렇게 됨.

     

    h1.txt

    h2.txt

    h3.txt

    인곳에

    .git을 만들고

    버전m1h1만 추가, 커밋

    버전m2h2, h3추가, 커밋하고

    m1를 더블클릭하면! h2, h3파일이 사라짐!!!

    =>이런 원리구나

     

    나중에 브랜치, 헤드라는걸 배우면 알겠지만

    시간여행을 끝내고 원래상태로 돌아가려면 가장 위 버전 더블클릭이아니고 마스터라는걸 클릭해야됨

     

    각각의 버전들은 commit이라고도 부름

    각각의 commit은 그 commit의 고유한 식별자가 있다.

    커밋: 751449a25d59045c980fbd2a1878851550cada27 [751449a] 이런식으로

    앞에 7글자 정도를 저렇게 보이게 두는데 이걸로 다른사람도 여러분의 버전을 식별할 수 있다. commit id라는 개념. 또는 sha1이라고도 함. 우클릭하면 Copy SHA to Clipboard가 있다. 이걸로 복사 됨.

    = 버전id = 리비전id…

    --------------------------------------------------------------------------------------------------------------------

    @비교

    버전과 버전의 차이점을 쉽게 비교할 수 있다.

     

    M4라고 하는 버전에 소속된 txt라고 하는 파일이라는 표현을 씀. --그니까 버전은 체인으로 이루어져있다고 생각하면겠네 그 버전에 소속된게 하나라도 이전의 내용들이 다 들어있다.

     

    버전을 누르면 옆에 그림으로 빨간색은 없어졌다 초록색은 추가됐다.

    - 3 빨간색, + 3 초록색 이렇게 돼있는거 궁금했었는데 그냥 변화가 없다는 설명만 함.

     

    근데 txt파일은 이게 쉬운데 이미지파일, hwp파일들은 이게 힘들어. 빨강 초록 대신 비교할 수 없습니다 이런 메시지가 나오는 경우가 있음.

    그럼 버전을 누르고 속해있는 파일을 우클릭하면

    Open Current(최신) Version / Selected Verison이 있다.

    Open Current(최신) Version은 그냥 지금 그 폴더에서 이 파일을 여는거야. 커밋하지 않은 변경사항 까지 된 것.

    Selected Verison은 그 당시의 버전으로 여는 것.

     

    그럼 그렇게 두 개 띄워놓고 비교해도되고

    Save As(다른이름으로저장이네) 로 임시디렉토리같은곳에 저장해놓고 그걸 다른프로그램으로 열어서 비교해도됨.

     

    비교를할 때 외부도구를 이용해서도 가능. 여러 가지 프로그램이 있는데 Diff는 가르다라는 뜻.

    KDiff3라는 프로그램이 있다.

    따로 깔아서 쓰는건 탐색기에서 드래그로 각각에 놓으면 됨.

     

    소스트리의 도구 -> 옵션 -> 비교(Diff)

    외부 비교 도구를 선택하면 된다. 이중에 하나거나 없는것도 가능해요~

    선택하면 이제 어떤 버전의 파일을 선택해놓고 액션에 외부 비교 도구를 누르면 현재상태와의 비교가 된다.

    '생활코딩 Git' 카테고리의 다른 글

    Git4 - SourceTree (4)Collaboration  (0) 2021.11.08
    Git3 - SourceTree (3)Backup  (0) 2021.11.08
    Git3 - SourceTree (2)branch & conflict  (0) 2021.11.08
    Git2 - CLI (1)Version Control  (0) 2021.10.05
    Git1  (0) 2021.10.05
Designed by Tistory.