Git Step-4 : External tool for GIT
1. Gistory
git에서 파일을 어떻게 저장하고 관리하는지 볼 수 있는 웹 베이스 툴.
-
install
$pip3 install gistory Collecting gistory Downloading gistory-0.44-py3-none-any.whl (196 kB) |████████████████████████████████| 196 kB 635 kB/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
-
Usage
$<git project path>/.git/gistory Bottle v0.13-dev server starting up (using WSGIRefServer())... Listening on http://0.0.0.0:8805/ Hit Ctrl-C to quit.
브라우저를 열고 http://localhost:8805/ 접속
-
git add 명령으로 Staging Area에 저장되었을 때
변경전
[commit] fc236f439fb664666974e41a5f03eae998e1b0f7
tree aa11ae2bd24ac1ca92a879581451a452c4c0d4c0 parent f64068c96d1735c1ef757f7fb8395ba7235e21ad
100644 blob 7c4a013e52c76442ab80ee5572399a30373600a2 README.md 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 blob 9bc8aa15552abafff42f793fcc76a03e1616335c a_develop.txt
100644 blob 6759a3e5a1490473c7bc011b0457f22de82398af a_module.java 100644 blob 3c87d729edd556087d2953c5b4903f89923300d0 b_module.java 100644 blob 9ca2d2856add5b3641d1f545a320d02b4864d601 b_moudle.java 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 break-module.java 100644 blob a3151d16f6f13ebbeabb688bf96d747288761b8d clientMain.java 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 engin-module.java 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 engin-moudle-support.java 100644 blob cf5a77127db53088ee8a01efcbcf957827bfc21d final_module.java 100644 blob b802652b867ab815273cd0a2e8f063400e6a9a96 return-module.java 100644 blob f9e86734968b29a7adf12cdf74a863a77ae35680 serverMain.java$ls README.md b_module.java engin-module.java serverMain.java a.txt b_moudle.java engin-moudle-support.java a_develop.txt break-module.java final_module.java a_module.java clientMain.java return-module.java $code a_develop.txt 수정 후 저장 $git add .
변경 후
수정한 a_develop.txt의 SHA-1 hash값 2자리/나머지 이름으로 /objects 디렉토리에 저장함. ./objects/51/492775649300961b30bcd4aafdbbc7de7a7f3e
index파일에 현재 working directory를 스냅샷함. 이때 a_develop.txt만 변경 되었으므로 a_develop.txt의 hash값만 새로 만들어진 blob 51492775649300961b30bcd4aafdbbc7de7a7f3e로 변경해서 저장함.
./index 100644 7c4a013e52c76442ab80ee5572399a30373600a2 0 README.md 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 a.txt
100644 51492775649300961b30bcd4aafdbbc7de7a7f3e 0 a_develop.txt
100644 6759a3e5a1490473c7bc011b0457f22de82398af 0 a_module.java 100644 3c87d729edd556087d2953c5b4903f89923300d0 0 b_module.java 100644 9ca2d2856add5b3641d1f545a320d02b4864d601 0 b_moudle.java 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 break-module.java 100644 a3151d16f6f13ebbeabb688bf96d747288761b8d 0 clientMain.java 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 engin-module.java 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 engin-moudle-support.java 100644 cf5a77127db53088ee8a01efcbcf957827bfc21d 0 final_module.java 100644 b802652b867ab815273cd0a2e8f063400e6a9a96 0 return-module.java 100644 f9e86734968b29a7adf12cdf74a863a77ae35680 0 serverMain.java -
git commit 명령으로 repository에 저장되었을 때
./object에
tree 객체
와commit 객체
가 생성됩니다.tree 객체는 아래와 같이 index에 존재하는 파일들을 나타내는 객체입니다.
commit 객체는 tree객체와 parent(이전 커밋의 tree), author, commiter, commit message 정보를 저장합니다.
2. difftool Visual Studio Code로 사용하기
git diff 명령은 파일 또는 커밋의 차이를 비교합니다.
간단한 내용의 비교는 쉽게 확인할 수 있지만 많은 양의 코드를 비교할 때는 가독성이 떨어질 수 있습니다.
그래서 difftool이라는 외부툴을 이용하여 diff 결과를 볼 수 있도록 하는 기능이 있습니다.
git difftool --tool-help
라는 명령을 실행하면 이용할 수 있는 difftool 들을 확인할 수 있습니다.
$git difftool --tool-help
'git difftool --tool=<tool>' may be set to one of the following:
vimdiff
vimdiff2
vimdiff3
user-defined:
vscode.cmd code --wait $MERGED
vscode.cmd code --wait --diff $LOCAL $REMOTE
The following tools are valid, but not currently available:
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
guiffy
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
smerge
tkdiff
winmerge
xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.
많이 툴들이 있지만 Visual Studio Code를 이용하는 분들이라면 저와 같은 설정으로 diff 결과를 VSCode에서 확인할 수 있습니다.
$git config --global -e
//.gitconfig 파일에서 아래 내용을 추가하고 저장합니다.
[diff]
tool = vscode
[difftool "vscode"]
cmd = code --wait --diff $LOCAL $REMOTE
두 개의 커밋을 difftool로 비교 합니다.
$git log --oneline
0e3c111 (HEAD -> develop) modify 2
92fe575 modify
$git difftool 0e3c111 92fe575
명령이 실행되면 Visual Studio Code가 새창으로 뜨면서 두개의 커밋을 비교하는 화면이 나타납니다.
만약 git difftool로만 명령을 실행하면 LOCAL과 REMOTE를 비교하고, 변경된 파일이 여러개일 경우 하나씩 창이 열립니다.
예를들어 a.txt, b.txt파일이 remote와 달라졌다면 git difftool 실행 시
a.txt를 비교하는 VSCode가 열리고 이 창을 닫으면 b.txt를 비교하는 창이 열립니다.
3. mergetool Visual Studio Code로 사용하기
difftool과 마찬가지로 merge시에도 VSCode를 이용할 수 있습니다.
conflict를 VSCode로 처리하는 예
$ git checkout -b feature/test
$ echo 'change' > a.txt
$ cat a.txt
change
$ git add .
$ git commit -m "Modify a.txt in feature/test"
$ git checkout develop
$ echo 'original' > a.txt
$ git commit -am "Modify a.txt in develop"
$ git merge feature/test
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
//이 상태에서 mergetool을 사용하면 새로운 VSCode창이 열립니다.
$git mergetool
개발자가 소스를 수동으로 병합하고 저장합니다.
$ git commit -m "merge end"
$ git log --oneline --graph
정상적으로 merge가 되고 새로운 파일이 하나 생성됩니다.
$ git status -s
?? a.txt.orig
a.txt.orig는 conflict 상태의 정보를 담고 있습니다. 실수로 잘못 merge한 경우에 a.txt.orig를 확인해서 수정할 수 있습니다.
$ cat a.txt.orig
<<<<<<< HEAD
original
=======
change
>>>>>>> feature/test
댓글남기기