일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Django
- 장고
- 알고리즘 연습
- web
- js
- react
- 파이썬
- 백준
- Git
- DRF
- Algorithm
- form
- MAC
- CSS
- 파이썬 알고리즘
- HTML
- Baekjoon
- 알고리즘
- django widget
- django rest framework
- javascript
- AWS
- c++
- PYTHON
- 알고리즘 풀이
- es6
- django ORM
- java
- API
- 알고리즘 문제
- Today
- Total
수학과의 좌충우돌 프로그래밍
04. git의 원리(1) gistory와 add의 원리 본문
안녕하세요 강민성입니다.
이번에는 git의 내부적인 원리를 알아보고자 합니다.
나중에 다시 소개하겠지만 이는 github 에서 저의 commit 수를 기록해주는 부분입니다.
github이라는 용어가 처음 나와서 소개를 하자면이 git 을 보조해주는 git 소스 저장소라고 생각하시면 됩니다.
물론 더 다양한 기능을 하고 복합적이지만 지금은 이렇게만 이해하시면 될 듯합니다.
어디 내놓기는 부끄럽지만 그래도 나름 git 을 써온다고 써왔지만
지금 까지 기계적으로 코드를 쳐왔습니다.
아마 많은 분들이 저와 같은 상황이라고 생각합니다.
이번 기회에 블로그 포스팅을 하면서 git 의 원리를 공부할 수 있어서 저에게도
좋은 기회가 되었습니다.
여러분도 원리를 알고 사용하시길 바랍니다.
git 의 원리
우리가 git 명령어를 입력하게 되면 우리 눈에는 보이지않는 숨겨진 폴더, .git 의 내용이
변하게 된다는 건 저번 시간에도 한 번 언급한 적이 있을 겁니다.
git 의 원리를 알기 위해서는 .git 내부적으로 어떻게 변하는지 알아야합니다.
하지만 매 순간 마다 어느 파일이 변하는지 확인하는 건 쉬운 일이 아닐 겁니다.
따라서 이를 보조해주는 프로그램을 설치 해보도록 하겠습니다.
gistory를 설치해보자
이름은 소제목 그대로 gistory 입니다.
gistory 는 파이썬으로 이루어져 있기 때문에 우선 파이썬을 설치해야합니다.
파이썬 설치 후 pip 를 이용해서 다운받아줍니다.
pip 사용법은 어렵지 않으므로 안다는 전제하에 진행하겠습니다.
pip install gistory
설치가 완료되었다면 .git 폴더로 들어간 후
gistory
다음 명령어를 치면 서버가 열리는 걸 볼 수 있습니다.
써있는대로 http://0.0.0.0:8005/ 로 접속을 해보겠습니다.
왼쪽 메뉴바에는 .git 안에 더 세부적인 디렉토리가 표시가 되고
클릭을 하면 그 안의 내용을 더 자세히 볼 수 있습니다.
git add의 원리를 알아보자
지금부터는 앞의 포스팅과 다른 디렉토리에서 실습을 진행하겠습니다.
앞의 내용을 복습하는 차원에서 한 번 훑어보자면
원하는 디렉토리로 이동 후,
mkdir git_principle (git_principle 이라는 디렉토리 생성)
cd git_principle (디렉토리 안으로 접근)
git init (git이 제어가능하도록 초기화)
cd .git (숨겨져있는 .git 디렉토리 안으로 접근)
gistory (gistory 실행)
http://0.0.0.0:8805/ 그 후 열린 서버로 접속하면 gistory 를 볼 수 있을겁니다.
(원인은 모르겠지만 .git 디렉토리 내부가 아닌 그 바깥 디렉토리에서 gistory명령어가
잘 작동하는 경우도 있었습니다. 운영체제의 차이인지 어떤 차이인지는 아직 모르겠으나
안된다면 댓글로 남겨주시길 바랍니다.)
현재 terminal에서는 서버가 돌아가고 있으므로 다른 명령어를 입력할 수가 없습니다.
다른 terminal을 하나 더 실행시켜 사용하도록 하겠습니다.
먼저 a 라는 내용을 가진 test.txt 파일을 하나 생성해보도록 하겠습니다.
아직까지는 gistory에 아무런 변화가 없습니다.
이번에는 이 파일을 add해보도록 하겠습니다.
(그 동안 계속 해서 써왔던 명령어들은 terminal 창을 생략해도 될 것 같습니다.
앞선 내용을 참고해주세요 !
add 한 결과, 2개의 파일이 변경되어 상단으로 올라왔고 최신화된 시간이 변경되었습니다.
먼저 objects 폴더부터 살펴보겠습니다.
그 안에는 78이라는 디렉토리가 만들어졌고
그 안에 다시 숫자와 영문조합의 이름을 가진 파일이 생성되었습니다.
그 파일 속 내용은 a 로 방금 add 한 test.txt 파일과 내용이 일치합니다.
이번에는 index 파일을 살펴보겠습니다.
파일 안에는 역시나 영문과 숫자의 조합으로 이루어져있는 내용이 들어있습니다.
눈썰미가 좋으신 분들은 눈치를 챘겠지만
objects 폴더 안에 있는 또 다른 디렉토리와 그 안의 파일 이름과 동일합니다.
즉 index 파일에서 이름을 지정하고 그 이름을 objects 에서 찾으면 그 안에 파일의 내용이 담겨있는 구조입니다.
다음으로는 z 라는 내용을 가진 test2.txt 를 만들어 add 해보겠습니다.
이번에도 index와 objects 가 변했고
index 안에는 파일의 이름이,
objects 안에는 index에서 지정한 이름이 앞 두 글자는 디렉토리로,
앞 두 글자를 제외한 나머지 부분은 파일의 이름으로 저장된 걸 볼 수 있습니다.
물론 이 안에 test2.txt 의 내용인 z가 담겨있습니다.
이번에는 조금 다르게 test.txt 를 복사해서 test3.txt 라는 이름의 파일을 만들어주었습니다.
복사하였으므로 당연히 안의 내용은 동일합니다.
변경 사항을 확인해보면, 마찬가지로 index와 objects가 변했습니다.
하지만 앞과는 조금 다른 점이 있습니다.
먼저 index에 test3.txt 에 해당하는 숫자,영문 조합이 생겼는데
이는 test.txt에 대응되는 것과 동일합니다.
objects 는 최신화만 되었지 실질적인 내용은 바뀌지 않았습니다.
여기서 한 가지 짚고 넘어가자면 objects 폴더 안에 있는 파일들을 객체라고 부릅니다.
그러면 test.txt 와 test3.txt 는 파일의 이름이 다르지만 같은 객체를 가르킵니다.
그 이유는 파일의 내용이 같기 때문입니다.
이는 다른 로컬에서 다른 사용자가 확인해도 같은 파일이름이 생성이 됩니다.
그 이유를 알아보도록 합시다.
objects 속 파일 이름 속 비밀은?
git 은 파일의 내용을 가지고 암호화 과정을 거칩니다.
sha1 hash 라는 암호화 과정인데 어떻게 암호화 하는지는 모르셔도 무방합니다.
예를 들어 a 에 대한 암호화 값은 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
다음과 같습니다.
여기서 앞의 두 글자를 따서 objects 내 디렉토리 이름을, 나머지 부분이 파일 이름을 결정합니다.
하지만 아쉽게도 위에서 본 것과 약간의 차이가 있습니다.
그 이유는, 파일의 내용 외에도 몇몇 부가적인 정보도 함께 암호화 하기 때문인데
이렇게 세부적인 부분보다는 전체적인 과정에 초점을 맞추시면 되겠습니다.
마무리
아무래도 원리를 설명하다 보니 내용이 길어지고 어려워는 듯 합니다.
하지만 원리를 알고 쓰는 것과 그렇지 않은 것은
앞으로 사용하는데 있어 많은 차이가 있을 겁니다.
모르는 부분은 댓글로 남겨주시면 함께 고민하면서 해결해보도록 하겠습니다 :)
'git' 카테고리의 다른 글
06. git branch 생성과 정보확인하기 (0) | 2019.02.07 |
---|---|
05. git의 원리(2) commit, status의 원리 (0) | 2019.02.06 |
03.git 변경사항 확인 및 과거로 돌아가기 (0) | 2019.02.04 |
02. git 설치 및 버젼관리(저장소 만들기 add, commit) (6) | 2019.02.03 |
01. git 이란? (0) | 2019.02.02 |