git repo에서 hardLink를 쓰면 발생하는 일

Sorbet·2021년 11월 2일
0

하드링크란?

  • 같은 아이노드 테이블(디스크에 물리적인 블록)을 갖는 완전히 같은파일이 두곳에 동시에 존재하게끔 도와주는 OS 고유 기능인데, 하나의 repo에 2개의 하드링크 파일을 생성하면 총 3개의 파일이 존재하고(원본파일1 + 하드링크2개) 3가지 파일의 inode 는 동일한데요
  • 이 상태에서 git push 후, 다른곳에서 clone 하게 되면 inode파일이 각기 다른것을, 즉 전혀 별개의파일 3개로 인식됨을 알수 있습니다.

결국 git으로 관리되는 repository에서는 hardLink 기능을 사용하지 않는걸 권장합니다.

  • 설명 : 노란색의 co-work 에서는 3개의 파일이 각각 inode가 다른반면(~97,~98,~99) , 초록색의 로컬저장소 workspace 에서는 inode가 1612075 로 완전히 동일하다. 즉 같은 파일이라는 의미

TMI : 파일시스템과 아이노드테이블

  • fileSystem 이라고 부르는 fileTree, 그러니까 / (루트 디렉토리) 아래 /usr이 있고, /sbin이 있고, /user/home/~ 각각의 계정사용자들 폴더가 있는 이런 tree 구조의 파일시스템은 디스크에 저장되어 있고
  • 디스크 저장공간은 PC 입장에서 접근할때는 긴 일차원 배열형태라서, 1차원 배열의 실제 디스크의 물리적인 공간과, tree 구조의 filesystem을 번역해주는(mapping) 기술이 파일시스템 입니다.
  • 좀더 구체적으로는 FAT, NTFS, EXT4, AFPS ... 이라는 이름들로 구현되어있는 기술들은 내부적으로 inode table 이라는걸 사용해 1차원의 물리적인 배열의 선형 자료구조 저장공간에서 tree 형태의 비선형 자료구조 저장공간으로의 변환해줍니다.
profile
Sorbet is good...!

0개의 댓글