#24 Git - Working copy & index & Repository

김현준·2022년 12월 26일
0

GIT

목록 보기
24/41

이번시간에는 Working copy , index , repository 에 대해 알아보도록 하겠습니다.

일단 git 에서 저장소를 크게 분류하면 Working copy , Index , Repository 로 나눌 수 있습니다.

이때 reset 의 옵션에 따라서 삭제되는 파일의 범위가 달라집니다.

Git reset --softRepository 에 있는 파일만 삭제됩니다.
Git reset --mixedCache 에 있는 파일도 삭제됩니다.
Git reset --hardWorking copy 에 있는 파일까지 삭제됩니다.

실습을 통해서 한번 확인해보도록 하겠습니다.

f1.txt 파일을 만들어서 addcommit 를 해줍니다.

이후 다시 f1.txt 파일의 내용을 repository 로 변경해준후 git commit -am "2" 를 해줍니다.

그렇다면 지금 만든 f1.txtgit 의 저장소 중에 어느곳에 위치하고 있을까요?

첫번째로 cat 실행시 파일의 내용이 출력되므로 working directory 에는 파일이 존재합니다.

두번째로 gistoryindex 에서도 f1.txt 파일을 확인 할 수 있습니다.

마지막으로 .git/refs/heads/master 에서도 tree 에 들어가면 f1.txt 파일이 들어있기 때문에

현재 f1.txtWorking copy , index , repository 모두 저장되어있습니다.

이제 다시 f1.txtindex 로 수정하고 add 만 해보겠습니다.
commit 을 하지 않은 상태입니다.

commit 을 하지않은 파일은 git의 어느 저장소에 저장되어있을까요?

일단 cat 실행시 내용이 출력되므로 working directory 에는 존재합니다.
그리고 gistroyindex 에서도 존재합니다.

하지만 .git/refs/heads/master 에서는 파일의 내용이 변하지 않았습니다.
따라서 add 만 했을 때는 Working copy , index 에만 저장됩니다.

이번에는 f1.txt 파일의 내용을 working directory 로 해보겠습니다.
cat 을 실행시 화면에 출력되기 때문에 Working copy 에는 존재합니다.

다만 index 에서는 파일의 내용이 변하지 않았습니다.
addcommit 을 하지않으면 파일은 오로지 Working copy 에서만 존재하게 됩니다.

처음 이 사진을 다시 볼까요?

git reset --soft 실행시 repository 에 있는 내용은 지워지지만 indexworking copy 에 있는 내용은 지워지지 않습니다.

git reset --mixed 실행 시 repositoryindex 의 파일만 지워집니다.

마지막으로 git reset --hard 실행시 모든 저장소에서 파일이 지워지게 됩니다.

git log 에 있는 commit 메세지 11reset 을 해보겠습니다.

git reset --soft commit_id 실행시 변경된 것을 확인 할 수 있습니다.

이때 git log -p 를 실행시 f1.txt 가 처음으로 commitinit 이라는 내용을 가지고 있습니다.

git diff 를 해보겠습니다. diffindexworking copy 의 차이점을 알려줍니다. index 저장소에는 index 가 존재하고 working copy 저장소에는 working copy 라는 내용이 존재하는것을 확인 할 수 있습니다.

이를통해 gir reset --softindexworking copy 는 변하지 않고 유지되고있다는 것을 확인 할 수 있습니다.

이번에는 git reset --soft ORIG_HEAD 를 해보겠습니다.
working copy 저장소에는 working copy 내용이 그대로 있습니다.

그리고 index 에는 index 가 그대로 있습니다.

마지막으로 .git/refs/head/master 에는 repository 내용이 존재 하게 됩니다.

이번에는 --mixed 옵션을 사용해보겠습니다.

git diff 사용시 init 의 내용이 변경되었습니다.

이번에는 git reset --hard 를 해보겠습니다.
그러면 f1.txt 내용은 init 이 됩니다.

정리하겠습니다. 11 번째 commitinit 이라는 내용을 담고있고
22 번째 commitrepository 를 담고있었습니다.

이때 git reset --soft 를 실행시 repository 에서 이전 commitinit 으로 돌아가게 됩니다. 다만 --soft 를 사용했기 때문에 Repository 저장소에서만 변경됩니다.

다음으로 git reset --mixed 를 했습니다. 따라서 indexinit 으로 변경되게 됩니다.

마지막으로 git reset --hard 를 함으로써 working directory 저장소에 있는 working copy 의 내용 까지 전부 init 로 변경되었습니다.

오늘은 여기까지 하도록 하겠습니다.

profile
울산대학교 IT융합학부 22학번

0개의 댓글