1. Python 설치하기
www.python.org/downloads/release/python-390/
2. gistory Mac 설치하기
파이썬 설치를 마치고 나서 아래 명령어로 git story 설치 해줌
sudo pip3 install gistory
% sudo pip3 install gistory
WARNING: The directory '/Users/alice/Library/Caches/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting gistory
Downloading gistory-0.44-py3-none-any.whl (196 kB)
|████████████████████████████████| 196 kB 5.4 MB/s
Collecting six
Downloading six-1.15.0-py2.py3-none-any.whl (10 kB)
Installing collected packages: six, gistory
Successfully installed gistory-0.44 six-1.15.0
WARNING: You are using pip version 20.2.3; however, version 20.2.4 is available.
You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9 -m pip install --upgrade pip' command.
3. gistory 실행하기
내 로컬 git repo(.git 파일이 있는곳 )에서 gistory 실행한다.
% cd .git
% gistory
Bottle v0.13-dev server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8805/
Hit Ctrl-C to quit.
web browser에서 localhost:8805에 접속한다. 포트넘버는 위의 gistory 에서 나온 포트 번호 "8805" 사용한다.
다음과 같이 GUI 화면을 볼 수 있다.
계속 gistory running 상태로 만들고 새로운 터미너을 열어서 작업한다.
4. gistory : git add
git add [file] 명령어를 실행한 후 gistory 체크해 보았다.
% git add S03_exercise.java
[gistory]
add 된 파일의 이름은 ./index 에 보여지고
file 그 자체 object 는 ./objects 에 보여진다.
여기서 흥미로운 사실은 S03_exercise/src/Main.java 와 S03_exercise.java 는 같은 내용의 코드를 가지고 있다.
그래서 object ID 도 같은 것으로 보여진다. 이것이 Git의 특징 중이 하나이다. 파일이름이 다르지만 콘텐츠가 동일하다면 같은 오브젝트로 인식한다.
5. gistory : object 파일명의 원리
git의 저장 원리 : git 은 SHA1 hash 알고리즘을 통해 파일명을 바꾸고, 앞에 두자리 "aa" 라는 디렉토리를 만들고 그 뒤문자를 파일명으로 하여 오브젝트로 저장한다.
6. gistory : commit
Commit 또 오브젝트로 저장한다.
tree : object 가 링크되어 있음. Commit 된 파일이름과 내용을 볼 수 있다.
blob : 파일의 내용을 담겨있음
Parent : 이전 commit 의 정보
그러나 여기서 내 로컬에서는 이미 삭제를 한 폴더인데 아직도 commit에 남아있는 파일들이 있어
git rm 명령어를 통해 삭제 해 주었다.
% ls -al
total 24
drwxr-xr-x 6 alice staff 192 15 Nov 22:54 .
drwx------@ 9 alice staff 288 15 Nov 00:33 ..
drwxr-xr-x 13 alice staff 416 15 Nov 23:13 .git
-rw-r--r-- 1 alice staff 3985 15 Nov 01:27 S03_DataType.java
-rw-r--r-- 1 alice staff 1284 15 Nov 22:54 S03_exercise.java
-rw-r--r-- 1 alice staff 3269 15 Nov 22:07 S04_Condition.java
% git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: Condition_S04/.DS_Store
deleted: Condition_S04/.classpath
deleted: Condition_S04/.project
deleted: Condition_S04/.settings/org.eclipse.jdt.core.prefs
deleted: Condition_S04/bin/Main.class
deleted: Condition_S04/src/Main.java
deleted: DataType_S03.java
deleted: DataType_S03/.classpath
deleted: DataType_S03/.project
deleted: DataType_S03/.settings/org.eclipse.jdt.core.prefs
deleted: DataType_S03/bin/Hello.class
deleted: DataType_S03/src/Hello.java
deleted: Operator_S04/.classpath
deleted: Operator_S04/.project
deleted: Operator_S04/.settings/org.eclipse.jdt.core.prefs
deleted: Operator_S04/bin/Main.class
deleted: Operator_S04/src/Main.java
deleted: S03_exercise/.classpath
deleted: S03_exercise/.project
deleted: S03_exercise/.settings/org.eclipse.jdt.core.prefs
deleted: S03_exercise/bin/Main.class
deleted: S03_exercise/src/Main.java
아직도 commit 처리가 되지않은 삭제된 파일들이 있다.
이제 삭제 처리를 해준다.
% git rm -r Condition_S04
rm 'Condition_S04/.DS_Store'
rm 'Condition_S04/.classpath'
rm 'Condition_S04/.project'
rm 'Condition_S04/.settings/org.eclipse.jdt.core.prefs'
rm 'Condition_S04/bin/Main.class'
rm 'Condition_S04/src/Main.java'
% git rm -r Operator_S04
rm 'Operator_S04/.classpath'
rm 'Operator_S04/.project'
rm 'Operator_S04/.settings/org.eclipse.jdt.core.prefs'
rm 'Operator_S04/bin/Main.class'
rm 'Operator_S04/src/Main.java'
% git rm -r S03_exercise
rm 'S03_exercise/.classpath'
rm 'S03_exercise/.project'
rm 'S03_exercise/.settings/org.eclipse.jdt.core.prefs'
rm 'S03_exercise/bin/Main.class'
rm 'S03_exercise/src/Main.java'
% git rm -r DataType_S03
rm 'DataType_S03/.classpath'
rm 'DataType_S03/.project'
rm 'DataType_S03/.settings/org.eclipse.jdt.core.prefs'
rm 'DataType_S03/bin/Hello.class'
rm 'DataType_S03/src/Hello.java'
% git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: Condition_S04/.DS_Store
deleted: Condition_S04/.classpath
deleted: Condition_S04/.project
deleted: Condition_S04/.settings/org.eclipse.jdt.core.prefs
deleted: Condition_S04/bin/Main.class
deleted: Condition_S04/src/Main.java
deleted: DataType_S03/.classpath
deleted: DataType_S03/.project
deleted: DataType_S03/.settings/org.eclipse.jdt.core.prefs
deleted: DataType_S03/bin/Hello.class
deleted: DataType_S03/src/Hello.java
deleted: Operator_S04/.classpath
deleted: Operator_S04/.project
deleted: Operator_S04/.settings/org.eclipse.jdt.core.prefs
deleted: Operator_S04/bin/Main.class
deleted: Operator_S04/src/Main.java
deleted: S03_exercise/.classpath
deleted: S03_exercise/.project
deleted: S03_exercise/.settings/org.eclipse.jdt.core.prefs
deleted: S03_exercise/bin/Main.class
deleted: S03_exercise/src/Main.java
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: DataType_S03.java
% ls -ltr
total 24
-rw-r--r-- 1 alice staff 3985 15 Nov 01:27 S03_DataType.java
-rw-r--r-- 1 alice staff 3269 15 Nov 22:07 S04_Condition.java
-rw-r--r-- 1 alice staff 1284 15 Nov 22:54 S03_exercise.java
% git rm DataType_S03.java
rm 'DataType_S03.java'
완전히 깨끗이 삭제 후
다시 commit 을 해준다
% git commit -m "Delete Unused files and dir"
[master 226927c] Delete Unused files and dir
22 files changed, 828 deletions(-)
delete mode 100644 Condition_S04/.DS_Store
delete mode 100644 Condition_S04/.classpath
delete mode 100644 Condition_S04/.project
delete mode 100644 Condition_S04/.settings/org.eclipse.jdt.core.prefs
delete mode 100644 Condition_S04/bin/Main.class
delete mode 100644 Condition_S04/src/Main.java
delete mode 100644 DataType_S03.java
delete mode 100644 DataType_S03/.classpath
delete mode 100644 DataType_S03/.project
delete mode 100644 DataType_S03/.settings/org.eclipse.jdt.core.prefs
delete mode 100644 DataType_S03/bin/Hello.class
delete mode 100644 DataType_S03/src/Hello.java
delete mode 100644 Operator_S04/.classpath
delete mode 100644 Operator_S04/.project
delete mode 100644 Operator_S04/.settings/org.eclipse.jdt.core.prefs
delete mode 100644 Operator_S04/bin/Main.class
delete mode 100644 Operator_S04/src/Main.java
delete mode 100644 S03_exercise/.classpath
delete mode 100644 S03_exercise/.project
delete mode 100644 S03_exercise/.settings/org.eclipse.jdt.core.prefs
delete mode 100644 S03_exercise/bin/Main.class
delete mode 100644 S03_exercise/src/Main.java
그 후 에 gistory를 확인하면 파일들이 다 제거된 것을 볼 수 있다.
7. gistory : status
commit 을 이미 한 파일 중 하나의 파일을 vim 으로 수정한다.
% vim S03_exercise.java
% git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: S03_exercise.java
no changes added to commit (use "git add" and/or "git commit -a")
수정 된 파일이 아직 commit 에 반영되지 않을 것을 볼 수 있다.
파일 내용을 보면 아직 수정이 안될 것을 볼수 있다.
이제 git add 를 해본다.
% git add S03_exercise.java
% git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: S03_exercise.java
이제 gistory 를 보면 수정된 오브젝트가 있는 것을 볼 수 있다.
파일이름은 같으나 오브젝트 넘버가 다른것을 확인할 수 있다.
Before) 93af838d3d7738d810690a8c4cea5ea50612fae1
After) 725f4053c7bbd6159b5c7c5649d3c28066600c32
이제 commit 을 해보자
% git commit -m "Fifth Commit"
[master 712c850] Fifth Commit
1 file changed, 1 insertion(+), 1 deletion(-)
% git status
On branch master
nothing to commit, working tree clean
이제 gistory 에서 commit 확인
index 와 commit object의 파일명이 일치하고 내용이 변경된 부분을 확인 할 수 있다.
마지막으로 git working directory, index(stage), local repository , remote repository 의 관계를 도식화 하면 아래와 같다.
내용이 도움이 되셨다면 블로그 구독하기 부탁드리겠습니다.
* 이 글의 모든 저작권은 aliceintr에 있으며 무단 배포 및 사용은 자제해 주시기 바랍니다. *
'DevOps > GIT' 카테고리의 다른 글
github#6 git merge conflict (0) | 2020.11.20 |
---|---|
github#5 git HEAD file (0) | 2020.11.20 |
github#4 branch (0) | 2020.11.17 |
github #2 github reset (0) | 2020.11.16 |
github #1 github init, log, diff, add, status, commit (0) | 2020.11.15 |