생활코딩

Coding Everybody

commit의 원리

토픽 생활코딩 > 프로젝트 관리 > 버전관리 시스템 > 지옥에서 온 Git (새 수업으로 대체)

수업소개

commit을 했을 때 내부적으로는 어떤 일이 일어나는가를 알아봅니다. 

수업

댓글

댓글 본문
  1. 박병진
    오브젝트 파일 3가지
    1) 파일의 내용: blob
    2) 디렉토리의 파일 명 & 내용명에 정보를 담는 곳 : tree
    3) commit : 각각의 id를 가지고 있다. - hash의 정보로 통하여 저장된다.
  2. 주니어개발자
    진짜 고잉갓 ㄷㄷ
  3. 최우형
    지금까지 이러닝 본 것 중에 가장 임팩트 있고, 잘 설명하시네요. 놀랍습니다. 감사합니다.
  4. supernet
    완료!!
  5. geuni
    .git/objects 디렉토리 확인해보니 파일 또는 디렉토리를 삭제한다 하더라도
    해당 파일 or 디렉토리의 object 는 삭제되지 않았네요!
    대화보기
    • geuni
      디렉토리 또는 파일을 삭제했을 경우 어떻게 동작하는지 궁금해서 해보니깐
      ```
      d1 디렉토리 삭제
      - d1/f1.txt 도 삭제됨.

      git add d1 && git commit -m "d1 삭제"

      gistory 확인해보니 d1 object와 d1/f1.txt object에 대한 변경 이력은 존재하지 않고,
      d1 object(tree), d1/f1.txt object(blob) 에 대한 index가 삭제됨.
      그래서 한번 생성된 object는 삭제되지 않는것인가 해서

      mkdir d1
      cp f1.txt d1/f1.txt
      git add d1
      git commit -m "d1 디렉토리 추가 후 f1.txt copy"

      실행한 뒤 gistory 확인해보니
      d1 tree object와
      d1/f1.txt object(내용이 같아 생성되지는 않고, 기존 f1.txt object를 바라봄)

      가 잘 추가되어서 d1 의 체크섬(해시)가 삭제하기 전에 처음 추가했을 때의 체크섬(해시)와 동일한지 확인해보니
      동일하게 추가 되었네요
      물론 같은 디렉토리 구조와 파일 내용 이니깐 체크섬(해시)값이 같겠지만..
      새로 추가된거 같지는 않고 이전에 만들어뒀던 d1 object 그대로 있으면서 이에 대한 주소 값을 가지고 있는 index만 삭제되고, 다시 git add로 추가했을 때 index만 다시 새로 만들어서? 사용하는거 같은데 맞을까요??
      그러면 같은 추가되거나 삭제했을 때 object를 직접 다루는게 아닌 추가만 하고 index만 추가하거나 삭제하는 방식인것일까요??
      index가 object의 주소값을 내용으로 가지고 있으니깐 index가 유일하게 object에 접근할 수 있고, index가 없으면 object의 주소와 파일명이 없으니깐 접근할 수 없는것 같기도 하고.. 흠
      ```
    • 컴퓨터좋아하는전기전자공학전공생
      이 부분은 주소(address, C 언어에서의 pointer 개념), 몇 가지 자료구조(tree, 각종 container) 개념들을 알면 도움이 될 거 같네요. 잘 모르는 내용이라 이해가 안 가시면, 자료구조, 알고리즘이라는 개념들이 어떻게 실제 툴(이 강의의 경우 git)에 응용되는지 보여준다고만 생각하셔도 될 것 같습니다.
    • YoungJu Nam
      헷갈리는 부분이였는데 부연 설명 감사합니다!
      대화보기
      • GoldenEgg
        감사합니다 너무 어렵게 느껴졌던 git이 이젠 재밌네요 아직 완전 초보라서 그렇겠죠.. 아무튼 멋진 강의 감사드립니다!
      • PassionOfStudy
        * commit의 주요한 정보 2가지
        1) 이전 커밋이 누구인지 부모를 나타내는 parent값
        2) 커밋이 일어난 시점에 작업 디렉토리에 있는 파일의 이름과 그 파일의 이름이 담고
        있는 내용 사이의 정보가 tree에 담겨있다.

        * object파일은 크게 3가지 중에 하나이다.
        1) blob
        2) tree
        3) commit
      • 정준원
        설명을 너무 잘해주시네요. 큰 프로젝트를 함에 있어서 깃은 필수적으로 써야하는 버전관리 시스템인데 정말 내부적으로 어떻게 일어나고 사이트를 계속 찾아봐도 이해하기가 어려웠던 깃을 이렇게 쉽게 설명해주시다니 너무나도 감사드립니다. 이고잉님 입장에서 힘들게 얻었던 그러한 정보들을 저희가 이고잉님을 통해서 쉽게 얻을수 있다는게 살짝은 억울 하실수도 있지만 너무나도 큰 도움 받고있다는거!! 정말 감사드립니다!!
      • 남택봉
        잘 보고 있습니다. 좋아요~
      • software.lee
        좀 어렵네요 ㅜ.. 감사합니다
      • 제로스
        음.. 음.. 뭔가 좋은 느낌 ㅡ ㅡ
        이고잉님 감사합니다.
      • 정우희
        commit message object(이하 cmo)와 tree를 구분짓고 cmo가 tree를 참조하는 이유는 git이 어디에선가 tree를 다른 객체를 통해서 공유해야만 하기 때문이 아닐까요?
        강의를 순차적으로 듣고 있는데, 여기까지의 지식만으로는, 확인은 해보지 않았지만, git revert가 가장 유력한 후보일 거라고 생각합니다. 복제한 파일에서 sha1으로 중복을 최소화하는 개념과도 통하기도 하고요.
      • haMsa
        기스토리 실행시 나오는 페이지에 연결되어 있는 영상을 중간에 (필기하면서ㅠ) 보니 이해가 잘 갔습니다.
      • 누더기
        commit, tree, blob 모두 외부에서 보기에는 큰 차이점이 없는 object 입니다.
        구분이 되는 이유는 용도가 다르기 때문입니다.
        간단하게 구분해 보면,
        blob - 파일 하나의 내용을 보관
        tree - blob 목록, tree 목록(포함 디렉터리, 없으면 제외) 보관
        commit - parent(이전 commit, 이전 commit 없으면 제외), tree, author(코드 작성자), commit(코드 제출자) 보관
        대화보기
        • VivaHong
          commit 과 tree의 object id를 따로 만든 이유가 parent id로 구분하기 위함인지 좀 헷갈리네요..;
        • 밀하우스
          좋은 강의 잘봤습니다. 이번 강의는 꽤나 어려웠네요..ㅎㅎ
        • 특히나 유익한 강의였습니다.
          다른 부문의 대규모 데이터 분산화 처리에서 보았던 방식과 유사한 것도 확인할 수 있었어요.

          저는 비전공생인데, 이렇게 원리를 쉽게 설명해주시는 것이
          learning curve를 빠르게 하는데 도움이 되는 것 같습니다.
        • blindlee1324
          보통이라면 원리같은 건 별로 신경쓰지 않을텐데, 설명을 잘 해주셔서 보기만 해도 재밌네요
        • 옴멤메
          ㅁㄴㅇㄹ //
          허허...일상 '생활' 가능?
        • adsf// 허허...gistory만든걸 자랑하고 싶은거냐고 물어보다니.
          그런걸 자랑하고 싶으면 egoing님이 이런걸 무료로 강의나 할까싶네요
          git명령어 수행시 내부적으로 어떤 동작들이 이루어 지는지 원리를 알면 훨씬 이해가 잘됩니다.
          본인이 어렵다고 저렇게 예의 없게 댓글을 달다니 보기 무척 안좋네요.
          어디서나 무료로 좋은 의도로 뭔가 하면 항상 꼬투리를 잡고 더 많은걸 바라는 사람들이 있더군요.
          그것도 항상 예의 없이, 버릇없게 댓글을 답니다. 그 일로 상심해서 연재 같은걸 중단 하시는 분들도 계시던데
          egoing님은 그러실 분은 아니지만 힘내시라고 댓글 답니다.
        • GIT 초보자
          정말 감사드립니다.
          GISTORY는 엄청난 도구입니다.
          원리를 알아야지 뭐랄까... 속이 뻥 뚫리는 기분이 듭니다.

          소프트웨어 분야를 공부할 때 원리를 알아보려다가 힘이 다 빠지는 경우가 있는데
          GIT 공부를 할 때에는 생코님 덕분에 원리를 쉽게 알 수 있어 쉽게 편하게 공부가 됩니다!

          정말 감사드립니다~
        • 저는 gistory에 엄청 감탄했고 도움을 많이 받고 있습니다. 저는 이렇게 들을 수 있다는 것만으로도 감사할 따름입니다. 항상 응원합니다!
        • jeros
          글에서 그 사람의 인격이 묻어납니다.
          돈을 받고 들어도 아깝지 않은 강의를 무료로 듣고 있는데...
          감사하다는 말이 먼저나와야 사람인겁니다.
        • 비둘기99
          asdf
          너무 어려워서 초반부터 포기하게 만들지말자 라는 이야기는 뭐 좋은 취지 같은데
          말투가 너무 공격적이고 꼬여있네요
          아무리 온라인이고 익명이지만 예의는 지키죠
          무료로 강의듣는것만해도 감사할줄 알아야죠
        • grace
          double thanks!!!!
        • BANIP
          저어 밑에사람 말하고싶은건 알겠는데 엄청 아니꼽게 말하시네
        • eremuse
          egoing님의 수업은 나날이 버전업이 되어가는군요.
          gistory를 통해서 git의 원리를 알려주는 강의는 이것이 유일하지 않을까 싶네요.
          설명을 정말 잘해주셨지만 아마도 용어와 텍스트로만 설명하다 보니 개념을 정리하는데 어려움이
          있나 봅니다. 하지만 그래도 원리를 이해하고 나아가 직접 실습을 통해 확인할 수 있다는 것은
          egoing님 말처럼 오랜시간 기억에 남아서 오히려 학습시간을 단축하게 될 것 입니다.^^
          'commit의 원리' 라고 구글에 검색해서 이미지를 찾아보시면 egoing님이 설명해주신 부분에 대한
          다이어그램이 있어서 아마 개념 정리하는데 도움 되실거에요 참고하시기 바랍니다.^^
        • groundntree
          * f2.txt 파일내용을 수정하고 커밋하기
          vim f2.txt
          git add f2.txt
          git commit

          * d1 디렉토리를 생성하고 f1.txt 복사해서 커밋
          mkdir d1
          cp f1.txt d1/f1.txt
          ls -al
          git add d1/f1.txt
          git commit
        • 이보나
          분명 이고잉님이 전에 언급하셨을텐데요 , 원리 건너뛰어도 상관없다고
          대화보기
          • egoing
            저는 완전히 괜찮습니다. 걱정 마셔요~ 응원 감사하고요. 계속 재미있게 공부하셔요!
            대화보기
            • 날카로운지적이시다
              날카로운 지적이십니다만.
              아예 이 강의에서 이걸 빼는게 좋지 않을까 싶네요는 적절한 말은 아닌 것 같습니다.
              이해 못하겠으면 안보면 되지. 왜 이런 나같은 사람들에게는 매우 좋은 글을 그런식으로 좀 기분나쁘게 말하시는건지 모르겠습니다.
              그러한 좀 기분나쁜말에 이고잉님이 우울증에 빠져서 이런 내게 도움이 되는 영상을 볼 수 없게 되면은 내가 얼마나 손해인데;;; 그래서 이런 댓글을 답니다.
              이고잉님. 제가 댓글을 자주 안달았습니다만. 댓글을 자주 안달지만 이고잉님이 올리신 이런 영상들 정말로 고맙게 생각하고 있어요.!!!!!!!!!!!!!!!!!!!!!!!!!!!
              대학교 강의보다 100배 나아요. 온라인에서 공부하는 것에서 한줄기의 빛이에요 ㅠㅠㅠ...
            • egoing
              asdf님 조언 고맙습니다. 다음 강의를 만들 때 참고할께요.
              대화보기
              • egoing
                asdf님 말씀처럼 이 파트는 다소 어렵습니다. 이 부분을 건너 뛰고 git의 혁신인 branch로 넘어가시는 것도 좋습니다. 강의를 만들 때 원리부분을 몰라도 사용법을 익히는데는 아무 문제가 없도록 주의하면서 만들었습니다. 편하게 넘어가 주셔요~
              • 갓고잉
                커밋안에 트리가 있고 트리안에 트리랑 블랍있고 또 트리안에 트리있고
                트리는 디렉토리고 블랍은 파일인가
                혼란하다혼란해