**독자가 어느 정도의 command명령어를 사용할 줄 알 거나 리눅스를 다뤄본 적 있다는 가정하에 자주 사용되는 명령어만 간단하게 정리했습니다**
<기본적 Command 명령어>
rm 파일 : 파일을 삭제합니다
pip install 모듈 : 모듈을 설치합니다. 비슷한 명령어로 pip3가 있다.
<준비>
.git 디렉토리에 어떠한 변화가 생기는가를 통해 깃의 원리를 알아보자!
1. pip install gistory
2. '.git' 디렉토리로 이동 후 ‘gistory’커맨드 실행
3. 주소창에 localhost:호스트넘버를 실행하면 .git디렉토리를 분석할 수 있다
<Add의 원리>
(1)
.\index에는 우리가만든 파일들의 이름(f1.txt, f2.txt etc...)이 저장되어있다.
.\objects\d0\0491fd... 에는 파일이름은 없고 그 파일들의 내용이 저장되어있다
우리는 이objects안에 있는 파일들을 object(객체)라고한다.
(2)
git에서 f1.txt를 f3.txt로 cp를 한 후 .\index를 확인해본결과 위처럼 아이디값이 동일하게나왔다
f1.txt : d00491fd7e5bb6fa28c517a0bb32b8b506539d4d
f2.txt : d00491fd7e5bb6fa28c517a0bb32b8b506539d4d
따라서 우리는 아래 인용과같은 결과를 얻을 수 있다.
파일 이름이 달라도 내용이 같으면 같은 object를 가르킨다
왜그럴까?
1. add를 하면 git은 우리가 add 한 파일의 내용을 보고 그 내용과 몇가지 부가적은 내용을 추가하여 압축한다.
2. 그후 sha1이라는방법으로 해쉬시켜서 나온 값에 해당되는 디렉토리와 파일을 objects에 만든다.
3. 그 안에 파일의 내용을 저장한다.
4. 마지막으로 .\index에 우리가 만든 파일의 이름을 저장하면 완료된다
<Commit의 원리>
(1)
.\objects\를 확인해보면 commit한 version도 내용처럼object에 들어간다(47259a3bd68...)
옆에 보이는 'tree'의 값(2ae4db8f7ed866ce49769bdd19351ec0ddf1d8484)은 commit한 파일이름과 내용이 들어간다.
만약 commit한 파일이 여러개라도 전부 여기에 올라간다.
(2)
새로운 버전(version2)를 만든다고해도 version1의 f2.txt의 값을 볼 수 있다.
이때 version1의 값(47259a3bd68...)은 version2에서 parent가 된다.
또한 tree값이 version2에서는 새로 변경된 것을 볼 수 있다
각각의 버전은 그 버전이 만들어진 시점에 snapshot을 tree라는 정보구조를 통해 가지고 있다
(3)
디렉토리또한 마찬가지로 tree구조를 가지고 있다.
.\objects가 가지고 있는 정보는 크게 3가지로 분류할 수 있다
1.내용
2.tree
3.commit아이디
<status의 원리>
status가 파일을 인식하는 방법은 .\index와 .\objects의 차이를 비교한다
1. 둘이 일치하면 현재 commit할 내용이 없다
2. .\index에 있는 파일 아이디를 통해 확인된 내용과 시스템상 파일 내용의 값이 다르면 modified를 띄운다
3. add를 하면 .\index의 파일내용과 우리가 수정한 시스템상 파일 내용이 같으면 commit 대기상태이다. 또는
.\objects의 최신 파일 내용과 수정한 시스템상 파일 내용이 다르다면 add가되어 commit 대기상태임을 알 수 있어modified상태가된다
4. commit을 하면 projects(저장소Git),.\index,시스템상 파일(폴더)가 일치하기때문에 더이상 commit할 것이 없다는것을 알 수 있다.
'기초 > Git' 카테고리의 다른 글
[5일차]동기화 (0) | 2021.09.04 |
---|---|
[4일차]지역저장소,원격저장소 (0) | 2021.09.03 |
[3일차]Git의 혁신-Branch (0) | 2021.09.02 |
[1일차]버전관리의 본질 (0) | 2021.08.31 |
수업소개 (0) | 2021.08.31 |