Git 주니어 기술면접
새 면접Q. git checkout과 git switch의 차이점을 설명하고, Git 2.23 버전부터 switch 명령어가 도입된 이유를 말씀해주세요.
git checkout은 브랜치 전환뿐만 아니라 파일 복원, 커밋 체크아웃 등 여러 기능을 수행하는 다목적 명령어입니다. git switch는 Git 2.23부터 브랜치 전환 기능만을 담당하도록 분리된 명령어입니다. checkout의 다양한 기능이 초보자에게 혼란을 주고 실수를 유발할 수 있어, 기능을 명확하게 분리하기 위해 switch(브랜치 전환)와 restore(파일 복원)가 도입되었습니다. switch는 더 직관적이고 안전한 브랜치 관리를 가능하게 합니다.
- • checkout은 다목적 명령어로 브랜치 전환, 파일 복원 등 수행
- • switch는 브랜치 전환 전용 명령어로 Git 2.23부터 도입
- • 기능 분리로 명령어의 의도를 명확히 하고 실수 방지
- • restore는 파일 복원 전용으로 함께 도입됨
git restore 명령어는 어떤 상황에서 사용하며, git checkout -- 파일명과 어떤 차이가 있나요?
Q. Pull Request(PR)의 개념과 목적을 설명하고, 코드 리뷰를 위한 좋은 PR을 작성하는 방법을 말씀해주세요.
Pull Request는 자신이 작업한 브랜치의 변경사항을 다른 브랜치에 병합하기 전에 팀원들에게 검토를 요청하는 기능입니다. 코드 품질 향상, 지식 공유, 버그 조기 발견을 목적으로 합니다. 좋은 PR을 작성하려면 하나의 PR은 하나의 기능이나 목적에 집중해야 하며, 명확한 제목과 변경 이유, 테스트 방법을 포함한 상세한 설명을 작성해야 합니다. 또한 적절한 크기(보통 200~400줄 이내)를 유지하고, 스크린샷이나 테스트 결과를 첨부하면 리뷰어가 이해하기 쉽습니다.
- • 코드 병합 전 팀원의 검토를 요청하는 협업 도구
- • 하나의 PR은 단일 목적에 집중
- • 명확한 제목과 상세한 설명 작성
- • 적절한 크기 유지로 리뷰 효율성 향상
PR에서 Squash and Merge와 Rebase and Merge의 차이점과 각각의 장단점을 설명해주세요.
Q. Git의 Blob, Tree, Commit 객체가 무엇인지 설명하고, 이들이 어떻게 연결되어 버전 관리 시스템을 구성하는지 말씀해주세요.
Blob 객체는 파일의 내용을 저장하는 객체로, 파일명은 포함하지 않고 순수한 데이터만 담습니다. Tree 객체는 디렉토리 구조를 표현하며, Blob 객체와 다른 Tree 객체에 대한 포인터와 파일명을 저장합니다. Commit 객체는 특정 시점의 스냅샷을 나타내며, Tree 객체를 가리키는 포인터, 부모 커밋 정보, 작성자, 커밋 메시지 등의 메타데이터를 포함합니다. 이러한 객체들이 SHA-1 해시로 연결되어 변경 불가능한 체인을 형성하며, Git의 안정적이고 효율적인 버전 관리를 가능하게 합니다.
- • Blob은 파일 내용, Tree는 디렉토리 구조, Commit은 스냅샷 메타데이터 저장
- • 객체들은 SHA-1 해시로 식별되고 연결됨
- • Commit이 Tree를 가리키고, Tree가 Blob들을 가리키는 구조
- • 불변 객체 체인으로 데이터 무결성 보장
Git이 동일한 내용의 파일을 여러 곳에서 사용할 때 어떻게 저장 공간을 효율적으로 관리하나요?
Q. 여러 커밋에 걸쳐 작업한 내용 중 특정 커밋 하나만 다른 브랜치에 적용하고 싶을 때 사용하는 방법과 주의사항을 설명해주세요.
git cherry-pick 명령어를 사용하면 특정 커밋 하나만 선택해서 현재 브랜치에 적용할 수 있습니다. cherry-pick 커밋해시 형식으로 사용하며, 해당 커밋의 변경사항이 새로운 커밋으로 현재 브랜치에 추가됩니다. 주의할 점은 cherry-pick은 커밋을 복사하는 것이므로 동일한 변경사항이 다른 해시를 가진 새 커밋으로 생성되며, 이는 히스토리를 복잡하게 만들 수 있습니다. 또한 해당 커밋이 의존하는 이전 변경사항이 없으면 충돌이 발생할 수 있으므로, 가능하면 merge나 rebase를 우선 고려하는 것이 좋습니다.
- • git cherry-pick으로 특정 커밋만 선택적으로 적용
- • 새로운 커밋 해시로 복사되어 생성됨
- • 의존성 있는 변경사항이 없으면 충돌 가능
- • 히스토리 복잡도 증가로 남용은 지양
여러 개의 연속된 커밋을 한 번에 cherry-pick하려면 어떻게 해야 하나요?
Q. Git 설정을 관리하는 세 가지 레벨(system, global, local)을 설명하고, 각 레벨의 우선순위와 설정 파일 위치를 말씀해주세요.
Git 설정은 system, global, local 세 가지 레벨로 관리됩니다. system 레벨은 시스템의 모든 사용자와 저장소에 적용되며 /etc/gitconfig에 저장됩니다. global 레벨은 현재 사용자의 모든 저장소에 적용되며 ~/.gitconfig 또는 ~/.config/git/config에 저장됩니다. local 레벨은 특정 저장소에만 적용되며 해당 저장소의 .git/config에 저장됩니다. 우선순위는 local이 가장 높고, global, system 순으로 낮아지며, 같은 설정이 여러 레벨에 있으면 우선순위가 높은 설정이 적용됩니다.
- • system은 전체 시스템, global은 사용자, local은 저장소별 설정
- • 우선순위는 local > global > system 순
- • git config --global로 사용자 설정, --local로 저장소별 설정
- • 각 레벨은 다른 위치의 설정 파일에 저장됨
회사 프로젝트와 개인 프로젝트에서 서로 다른 이메일 주소를 사용하려면 어떻게 설정해야 하나요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!