Skip to content

1. Khởi tạo & Clone (Initialization)

IMPORTANT

ROLE: HPN (Visual Concepts) & Engineer HPN (Security & Best Practices).
AUDIENCE: Professional Engineers. No hobbyists allowed.

1.1 Khởi tạo Repository (git init)

Để bắt đầu một dự án mới, chúng ta cần biến thư mục hiện tại thành một Git Repository.

bash
mkdir project-alpha
cd project-alpha
git init

Kết quả: Git sẽ tạo một thư mục ẩn .git để theo dõi mọi thay đổi.

NOTE

Không bao giờ chạm vào thư mục .git trừ khi bạn biết chính xác mình đang làm gì. Phá hỏng nó nghĩa là mất lịch sử dự án.


1.2 Sao chép Repository (git clone)

Khi tham gia một dự án đã tồn tại, bạn cần kéo mã nguồn về máy.

bash
git clone <url-repository>

Lệnh này sẽ:

  1. Tải toàn bộ mã nguồn.
  2. Tải toàn bộ lịch sử commit.
  3. Tự động git init cho thư mục vừa tải về.

Repository URL Formats:

  • HTTPS: https://github.com/user/repo.git (Dễ dùng, yêu cầu đăng nhập thường xuyên nếu không config credential helper).
  • SSH: git@github.com:user/repo.git (Chuẩn Enterprise, yêu cầu setup SSH Key).

CAUTION

HPN'S SECURITY PROTOCOL #1: KHÔNG TIN TƯỞNG CODE LẠ

Việc git clone một public repository và chạy nó (ví dụ: npm install, docker-compose up) KHÔNG kiểm tra code là hành động tự sát.

Kịch bản tấn công:

  1. Hacker tạo repo có chứa mã độc trong post-install script của package.json.
  2. Bạn clone về và chạy npm install.
  3. Mã độc chạy và gửi toàn bộ SSH keys, AWS credentials của bạn về server của hacker.

RULE: Luôn inspect code (đặc biệt là các file cấu hình và script) TRƯỚC KHI thực thi bất kỳ lệnh nào.

🧠 Quiz

Câu 1: Lệnh git init tạo ra điều gì trong thư mục dự án?

  • [ ] A) Một file .gitconfig để cấu hình user
  • [x] B) Một thư mục ẩn .git chứa toàn bộ metadata của repository
  • [ ] C) Một file README.md mặc định
  • [ ] D) Một remote connection tới GitHub

💡 Giải thích: git init tạo thư mục ẩn .git bên trong project, đây là nơi Git lưu trữ toàn bộ lịch sử, objects, refs và config. Không có .git thì không có repository.

Câu 2: Sự khác biệt chính giữa HTTPS và SSH khi clone repository là gì?

  • [ ] A) HTTPS nhanh hơn SSH
  • [ ] B) SSH không hỗ trợ private repository
  • [x] C) SSH sử dụng key pair để xác thực, không cần nhập password mỗi lần
  • [ ] D) HTTPS không hoạt động với GitHub

💡 Giải thích: SSH dùng public/private key pair nên sau khi setup một lần, bạn không cần nhập credentials lại. HTTPS yêu cầu đăng nhập thường xuyên nếu không dùng credential helper.

Câu 3: Khi chạy git clone <url>, Git tự động thực hiện những gì?

  • [ ] A) Chỉ tải source code mới nhất (latest snapshot)
  • [ ] B) Tải code và tạo một empty repository
  • [x] C) Tải toàn bộ source code, lịch sử commit, và tự động git init
  • [ ] D) Tải code và tự động push lên remote mới

💡 Giải thích: git clone thực hiện 3 việc: tải toàn bộ mã nguồn, tải toàn bộ lịch sử commit, và tự động khởi tạo Git repository (git init) cho thư mục vừa tải về.