Supplement · Git Engineering · 04-03-cau-hoi
28 câu hỏi Git: answer và follow-up
Trả lời theo data model, correctness boundary và operational trade-off.
1. Blob có lưu tên file không?
Đáp án: Không. Blob chỉ lưu bytes; tree lưu tên, mode và object ID.
Follow-up: Vì sao hai file cùng content có thể dùng chung blob?
Follow-up: Vì sao hai file cùng content có thể dùng chung blob?
2. Branch thực chất là gì?
Đáp án: Một ref di chuyển, thường trỏ commit tip; commit không “thuộc” độc quyền branch.
Follow-up: Detached HEAD khác branch checkout thế nào?
Follow-up: Detached HEAD khác branch checkout thế nào?
3. Commit hash thay đổi khi sửa message vì sao?
Đáp án: Message nằm trong commit content; hash đổi và descendants cũng đổi vì parent ID đổi.
Follow-up: Điều này ảnh hưởng signed commits và review links ra sao?
Follow-up: Điều này ảnh hưởng signed commits và review links ra sao?
4. Reflog có phải backup không?
Đáp án: Không; nó local, có expiry và không push. Nó là recovery window cho ref movements.
Follow-up: Recovery plan sau
Follow-up: Recovery plan sau
reset --hard là gì?5. Index là gì?
Đáp án: Proposed next tree, chứa path/mode/object ID và conflict stages.
Follow-up: Một file vừa staged vừa modified biểu diễn thế nào?
Follow-up: Một file vừa staged vừa modified biểu diễn thế nào?
6. diff và diff --cached khác gì?
Đáp án: Lần lượt so worktree-index và index-HEAD.
Follow-up: Lệnh nào xem toàn bộ thay đổi trước commit?
Follow-up: Lệnh nào xem toàn bộ thay đổi trước commit?
7. Conflict stages 1/2/3 là gì?
Đáp án: Merge base, ours, theirs; resolve và add đưa path về stage 0.
Follow-up: Dùng
Follow-up: Dùng
git ls-files -u điều tra thế nào?8. Loose object và packfile khác gì?
Đáp án: Loose lưu riêng; pack gom và delta-compress objects nhưng giữ nguyên IDs.
Follow-up: Delta chain dài tác động lookup ra sao?
Follow-up: Delta chain dài tác động lookup ra sao?
9. Reachable object nghĩa là gì?
Đáp án: Có đường đi từ root như refs/reflogs qua graph tới object đó.
Follow-up: Vì sao xóa branch chưa chắc giải phóng disk ngay?
Follow-up: Vì sao xóa branch chưa chắc giải phóng disk ngay?
10. Vì sao prune --expire now nguy hiểm?
Đáp án: Xóa ngay unreachable objects, phá recovery window và có rủi ro với writer đồng thời.
Follow-up: Quy trình cleanup production an toàn hơn là gì?
Follow-up: Quy trình cleanup production an toàn hơn là gì?
11. Commit-graph, bitmap và MIDX làm gì?
Đáp án: Tăng tốc graph walks, reachability/pack selection và lookup qua nhiều packs.
Follow-up: Khi nào acceleration data trở nên stale?
Follow-up: Khi nào acceleration data trở nên stale?
12. Fetch negotiation làm gì?
Đáp án: Wants/haves tìm common history, rồi server gửi pack missing reachable objects.
Follow-up: Nhiều refs và history phân kỳ ảnh hưởng bước nào?
Follow-up: Nhiều refs và history phân kỳ ảnh hưởng bước nào?
13. Protocol v2 cải thiện gì?
Đáp án: Command-oriented capabilities và giảm eager ref advertisement; không tự giảm payload objects.
Follow-up: Trace packet có rủi ro bảo mật gì?
Follow-up: Trace packet có rủi ro bảo mật gì?
14. --force-with-lease hơn --force ở đâu?
Đáp án: Chỉ update khi remote ref còn ở expected value, giảm overwrite thay đổi chưa biết.
Follow-up: Lease có thay thế team coordination không?
Follow-up: Lease có thay thế team coordination không?
15. Merge và rebase khác data model thế nào?
Đáp án: Merge tạo commit nhiều parent; rebase replay tạo commits mới trên base khác.
Follow-up: Vì sao rebase shared history gây disruption?
Follow-up: Vì sao rebase shared history gây disruption?
16. Conflict-free merge có đảm bảo đúng không?
Đáp án: Không; semantic conflicts có thể merge sạch nhưng behavior sai.
Follow-up: Test/review nào bắt cross-branch invariant?
Follow-up: Test/review nào bắt cross-branch invariant?
17. Squash merge đánh đổi gì?
Đáp án: History tuyến tính/revert đơn giản nhưng mất individual ancestry/topology của branch.
Follow-up: Bisect và audit bị ảnh hưởng thế nào?
Follow-up: Bisect và audit bị ảnh hưởng thế nào?
18. Shallow clone cắt gì?
Đáp án: Cắt ancestry tại shallow boundary; merge-base/blame/describe có thể thiếu semantics.
Follow-up: CI cần fetch base commit bằng cách nào?
Follow-up: CI cần fetch base commit bằng cách nào?
19. Partial clone blob:none cắt gì?
Đáp án: Cho phép blob thiếu và lazy-fetch từ promisor remote, vẫn giữ commit/tree graph.
Follow-up: Vì sao build toàn repo có thể chậm hơn?
Follow-up: Vì sao build toàn repo có thể chậm hơn?
20. Sparse checkout và sparse index khác gì?
Đáp án: Checkout giới hạn paths materialized; sparse index nén index bằng sparse-directory entries.
Follow-up: Tool compatibility cần test ở đâu?
Follow-up: Tool compatibility cần test ở đâu?
21. Submodule lưu gì trong superproject?
Đáp án: Gitlink tới exact submodule commit; URL/path metadata nằm trong
Follow-up: Vì sao phải push submodule trước superproject?
.gitmodules.Follow-up: Vì sao phải push submodule trước superproject?
22. Git LFS thay đổi dependency nào?
Đáp án: Git giữ pointer, LFS server giữ binary; thêm auth/quota/retention/backup dependency.
Follow-up: Clone thành công nhưng checkout LFS thất bại khi nào?
Follow-up: Clone thành công nhưng checkout LFS thất bại khi nào?
23. Worktree dùng chung và tách riêng gì?
Đáp án: Dùng chung object database/refs; mỗi worktree có HEAD, index và files riêng.
Follow-up: Vì sao một branch không nên checkout hai nơi?
Follow-up: Vì sao một branch không nên checkout hai nơi?
24. Client hook có enforce policy không?
Đáp án: Không đáng tin cậy: không clone mặc định và có thể bypass. Enforce ở server/CI/protected refs.
Follow-up: Pre-receive hook cần chống resource exhaustion thế nào?
Follow-up: Pre-receive hook cần chống resource exhaustion thế nào?
25. Signed commit chứng minh gì?
Đáp án: Chứng minh key đã ký exact commit nếu trust/key policy hợp lệ; không chứng minh review hay CI.
Follow-up: Key revocation và provenance xử lý ở lớp nào?
Follow-up: Key revocation và provenance xử lý ở lớp nào?
26. Shared CI object cache có rủi ro gì?
Đáp án: Poisoning, corruption, credential/object leakage và concurrent writes.
Follow-up: Thiết kế isolation, validation và clean-fetch fallback ra sao?
Follow-up: Thiết kế isolation, validation và clean-fetch fallback ra sao?
27. git fsck đảm bảo điều gì?
Đáp án: Kiểm integrity/connectivity theo Git model, không kiểm business correctness hay malware.
Follow-up: Khi repo hỏng, vì sao fresh clone thường tốt hơn sửa tay?
Follow-up: Khi repo hỏng, vì sao fresh clone thường tốt hơn sửa tay?
28. Mirror có phải backup đầy đủ không?
Đáp án: Không; deletion/corruption có thể replicate và còn thiếu LFS/config/hooks/permissions.
Follow-up: Một DR drill phải verify refs, LFS, RPO và RTO thế nào?
Follow-up: Một DR drill phải verify refs, LFS, RPO và RTO thế nào?