인덱스에 파일을 추가 할 때 수행하는 작업을 확인하여 파일에서 Git이 수행하는 작업을 확인할 수 있습니다. 색인은 사전 커밋과 같습니다. 인덱스가 커밋되면 인덱스에 git checkout
있던 모든 것을 작업 디렉터리로 다시 가져올 수 있습니다 . 인덱스에 심볼릭 링크를 추가 할 때 Git은 무엇을 하는가?
먼저, 심볼릭 링크를 만드십시오.
$ ln -s /path/referenced/by/symlink symlink
Git은이 파일에 대해 아직 모른다. git ls-files
색인을 검사 할 수 있습니다 ( -s
인쇄 stat
출력).
$ git ls-files -s ./symlink
[nothing]
이제 심볼릭 링크의 내용을 인덱스에 추가하여 Git 객체 저장소에 추가하십시오. 인덱스에 파일을 추가하면 Git은 그 내용을 Git 객체 저장소에 저장합니다.
$ git add ./symlink
그래서 무엇이 추가 되었습니까?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink
해시는 Git 객체 저장소에서 생성 된 압축 된 객체에 대한 참조입니다. .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c
리포지토리의 루트를 살펴보면이 개체를 검사 할 수 있습니다 . 이것은 Git이 저장소에 저장 한 파일로 나중에 체크 아웃 할 수 있습니다. 이 파일을 살펴보면 파일이 매우 작다는 것을 알 수 있습니다. 링크 된 파일의 내용을 저장하지 않습니다.
(참고 120000
는 ls-files
출력에 나열된 모드 입니다. 100644
일반 파일 과 유사 합니다.)
그러나 저장소에서 파일 시스템으로 체크 아웃 할 때 Git 은이 객체로 무엇을합니까? core.symlinks
구성 에 따라 다릅니다 . 보낸 사람 man git-config
:
core.symlinks
False 인 경우 심볼릭 링크는 링크 텍스트가 포함 된 작은 일반 파일로 체크 아웃됩니다.
따라서 저장소에 기호 링크가 있으면, 체크 아웃 할 때 전체 파일 시스템 경로를 참조하는 텍스트 파일 또는 core.symlinks
구성 값에 따라 적절한 기호 링크를 얻습니다 .
어느 쪽이든, 심볼릭 링크가 참조하는 데이터는 저장소에 저장되지 않습니다.
.gitignore
심볼릭 링크를 폴더가 아닌 파일로 봅니다.