git의 내부 동작
이미지 출처) [Git] 내부 동작 원리에 대한 이해
용어 정리
- 로컬(Local) = Working Directory = Working Copy
- 실제 위치: 프로젝트 폴더
- 현재 프로젝트 폴더에 있는 파일들을 의미한다.
- 인덱스(Index) = Staging Area = Cache
- 실제 위치: .git/index
- 개념적으로는 커밋이 이뤄질 준비가 된 파일의 내용들이 위치하는 영역을 의미함.
git add 명령어를 수행하면 변동 사항을 이 인덱스 영역에 반영시킬 수 있음.
- .git/index 파일에는 커밋이 이뤄질 준비가 된 파일들의 파일 명과 내용을 담고 있는 Blob 파일의 주소가 기록됨.
- 저장소(Repository)
- 실제 위치: .git/objects/ 아래
- 깃이 버전 관리를 하기 위해 필요한 데이터들을 저장하는 곳이다.
- 여러 버전들에 해당하는 파일들의 내용이 Blob 파일로서 이곳에 저장되어 있음.
- 이 곳에 저장된 파일들을 특별히 오브젝트 파일이라고 부름.
(Blob 파일도 오브젝트 파일의 한 종류)
- 오브젝트 파일
- Blob 파일
- 버전 관리하는 파일들 각각의 내용은 깃의 저장소에서 Blob 파일의 형태로 저장됨.
- 파일의 내용에 SHA1이라는 해싱 기법을 적용하여 Blob 파일의 이름을 얻어내서 내용이 같은 파일들은 하나의 Blob 파일로서 저장됨.
- Commit 파일
- 하나의 버전을 생성한다는 것은 하나의 commit 파일을 만드는 것.
- commit 파일은 하나의 tree 파일을 가리키고, 이 가리키고 있는 tree 파일의 주소와 직전 버전에 해당하는 commit 파일의 주소가 기록됨.
- Tree 파일
- 커밋 시점의 파일들 각각에 대해 그 파일 명과 해당 파일의 내용을 담고 있는 Blob 파일의 주소가 기록됨.
- 인덱스 파일(.git/index)과 성격이 유사함.
git 명령어의 작동 원리
- git add <파일명>
- 인덱스의 내용과 비교했을 때 로컬에서 변동된 사항을 인덱스에 반영시키는 명령어
- 새로 생성된 파일, 수정/삭제된 기존 파일이 add 명령의 대상이 됨.
- git commit -m <메세지>
- 인덱스의 내용을 바탕으로 새로운 버전(commit 파일)을 생성하는 명령어
- 특정 시점의 프로젝트를 하나의 버전으로서 저장해준다는 의미
고차함수와 async / await 같이 쓰기
Promise.all()를 활용하면 된다.
예시)
const newArray = await Promise.all(
array.map(async (value) => {
const newValue = await asyncFunc(value);
return newValue;
}
));
좋은 정보 얻어갑니다, 감사합니다.