////
Search
🎮

Git

학습용

gistory 프로그램→ .git의 내부적인 변화를 보여주는 학습용(파이썬 3.9이하)
1.
pip install gistory로 설치
2.
gistory 명령어로 실행
3.
주소를 복사하여 gistory를 띄움
git branch 시각화 학습용

git add, commit 시 .git의 변화

1.
gid add를 통해 index를 수정한다. 이때 objects폴더에 파일이 해싱되어 저장된다.
따라서 commit을 하기 전에도 object폴더에 파일이 저장된다.
2.
commit을 하면 index의 복사본(tree)가 objects폴더에 생긴다.
commit은 index의 복사본인 tree를 가리킨다.
head로부터 연결된 branch가 commit을 가리킨다.
HEAD가 가리키고 있었던 커밋을 새로 생긴 커밋을 parent로 가리킴
3.
HEAD가 branch가 아닌 특정 checkpoint(commit)로 이동하면 detached head라고 부름
이때 tree가 가리키던 blob파일들을 working directory에 복사해준다.
→ git은 각 checkpoint의 모든 파일들을 가지고 있기 때문에 가능

파일을 해싱하여 저장하는 이유

파일을 모두 저장하면 용량의 문제가 생겨서 파일 내용을 해싱하여 저장하는 것
git은 파일의 내용을 sha1로 해싱 → 특정 길이의 암호문이 나옴
ex)
a.txt : Hello
b.txt: Hello
라는 같은 내용의 파일이 여러 개 있으면 실제 저장은 한 곳에 되고
그곳에 a.txt, b.txt가 저장됐다고 기록한다.
→ git은 최대한 용량을 아껴서 저장하려고 하기 때문이다.

해싱결과 앞 두글자는 폴더명으로 사용

폴더에 파일이 10000개가 넘으면 매우 느려짐
따라서 이를 피하기 위해서 hash의 앞 두글자로 폴더를 생성하여 저장된다.

명령어

checkout → HEAD가 가리키는 checkpoint를 바꾼다.
git log —oneline → 간략히 보여줌
git log —all → 현재 branch뿐만 아니라 모든 branch에 대한 정보가 나옴
git checkout -f <브랜치 or checkpoint> → 작성 중인 파일이 날라가더라도 강제로 checkout할 때 씀

단축키

cmd에서 start . → 해당 위치에서 폴더 탐색기를 띄운다.
폴더 탐색기에서 cmd → 해당 폴더에서 cmd창을 띄운다.

충돌

1.
충돌은 local repo와 remote repo를 비교하는 것이라서 index에 git add, commit을 하는 것은 충돌과 관련없다. git push, pull 시 충돌 발생 가능
2.
git push는 remote branch에서 추가로 작업된 commit이면 받아준다. 따라서 충돌을 해결한 후 commit한 것도 받아준다.