CodeGym /Các khóa học /JAVA 25 SELF /Nhập môn Git: tại sao cần kiểm soát phiên bản

Nhập môn Git: tại sao cần kiểm soát phiên bản

JAVA 25 SELF
Mức độ , Bài học
Có sẵn

1. Vấn đề khi không có kiểm soát phiên bản: vì sao chỉ sao chép tệp — là một ý tưởng tồi

Hãy bắt đầu từ một tình huống thực tế. Hãy tưởng tượng bạn đang làm việc với dự án Java của mình. Mọi thứ đều ổn cho đến khi đến lúc “thử nghiệm”. Bạn quyết định thay đổi điều gì đó nhưng sợ làm hỏng bản đang chạy ổn. Làm gì đây? Tất nhiên là sao chép dự án!

Kết quả là trên ổ đĩa của bạn xuất hiện những “kiệt tác” như sau:

MyProject/
├── Main.java
├── Main_backup.java
├── Main_final.java
├── Main_final2.java
├── Main_tochno_final.java
├── Main_tochno_tochno_final.java

Thấy quen chứ? Giờ hãy tưởng tượng có thêm một người bạn tham gia dự án. Cậu ấy cũng thích sao chép tệp — nhưng theo cách của riêng mình. Làm sao biết phiên bản nào là mới nhất và hoạt động ổn? Làm sao biết ai đã thay đổi cái gì? Làm sao khôi phục lại mọi thứ nếu thử nghiệm thất bại?

Không có kiểm soát phiên bản:

  • Rất dễ làm mất hoặc nhầm lẫn mã đang hoạt động.
  • Không thể “quay lại” phiên bản cũ.
  • Khó làm việc theo nhóm 2–3 người.
  • Hỗn loạn và sợ hãi trước các thử nghiệm.

Chính những vấn đề này được giải quyết bởi các hệ thống kiểm soát phiên bản — chẳng hạn như Git.

2. Tại sao lập trình viên cần Git?

Git là một hệ thống quản lý phiên bản mạnh mẽ, được dùng để theo dõi các thay đổi trong mã nguồn trong quá trình phát triển phần mềm. Nó cho phép các lập trình viên lưu lại các phiên bản khác nhau của tệp và phối hợp công việc của nhiều người trên cùng một dự án.

Các khái niệm cơ bản của Git:

Kho (repository)

Kho (hoặc “repo”) là nơi lưu trữ toàn bộ lịch sử dự án, bao gồm mọi thay đổi và các phiên bản tệp.

Commit

commit — là trạng thái đã được lưu của dự án. Mỗi commit trong Git chứa thông tin về những thay đổi nào đã được đưa vào dự án, bởi ai và khi nào. Các commit tạo thành lịch sử của dự án và cho phép quay lại bất kỳ phiên bản trước đó nào.

        gitGraph
        commit id: "1"
        commit id: "2"
        commit id: "3"
        commit id: "4"
        commit id: "5"
        commit id: "6"
    

Mỗi commit là một “ảnh chụp” của dự án, nối tiếp nhau, hình thành nên chuỗi lịch sử thay đổi.

Nhánh

branch — là một dòng phát triển độc lập. Theo mặc định, Git tạo nhánh main. Bạn có thể tạo nhánh mới để phát triển tính năng hoặc sửa lỗi, rồi hợp nhất chúng trở lại nhánh chính.

        gitGraph
        commit id: "1"
        commit id: "2"
        branch develop
        commit id: "3"
        commit id: "4"
        commit id: "5"
        checkout main
        commit id: "6"
        commit id: "7"
        merge develop
        commit id: "8"
        commit id: "9"
    

Từ nhánh chính main “tách ra” nhánh develop để phát triển song song. Sau khi hoàn thành, các thay đổi từ develop sẽ được hợp nhất (merge) trở lại main.

3. Các lệnh Git cơ bản (những gì diễn ra “dưới nắp máy”)

Bên dưới là danh sách các lệnh cơ bản để làm việc với Git qua terminal. Quan trọng là hiểu các lệnh nào nằm ở nền tảng của mọi thao tác. Tuy nhiên, chúng ta sẽ theo cách tiếp cận GUI và học cách thực hiện tất cả hành động này qua giao diện đồ họa tiện lợi của IntelliJ IDEA. Hãy xem các lệnh này như những gì diễn ra “dưới nắp máy”.

Lệnh Mô tả
git init Khởi tạo một kho Git mới trong thư mục hiện tại.
git clone Nhân bản (clone) kho từ URL vào một thư mục mới.
git add Thêm tệp vào khu vực staging cho commit tiếp theo.
git commit Ghi nhận (commit) các thay đổi đã chuẩn bị vào kho.
git push Gửi các thay đổi từ kho cục bộ lên kho từ xa.
git pull Cập nhật nhánh hiện tại với phiên bản mới nhất từ kho từ xa.
git branch Hiển thị, tạo hoặc xóa nhánh.
git merge Hợp nhất các thay đổi của nhánh chỉ định vào nhánh hiện tại.

Những lệnh này là các công cụ nền tảng để làm việc với Git, cho phép quản lý thay đổi mã, nhánh và việc hợp nhất trong các dự án ở mọi quy mô.

        sequenceDiagram
        participant Thư mục làm việc
        participant Khu vực staging (Staging)
        participant Kho lưu trữ cục bộ
        participant Kho lưu trữ từ xa

        Thư mục làm việc ->> Khu vực staging (Staging): git add (Chuẩn bị)
        Khu vực staging (Staging) ->> Kho lưu trữ cục bộ: git commit (Lưu cục bộ)
        Kho lưu trữ cục bộ ->> Kho lưu trữ từ xa: git push (Gửi lên máy chủ)
        Kho lưu trữ từ xa ->> Thư mục làm việc: git pull (Tải cập nhật)
    

4. Ba nơi lưu trữ mã nguồn

Khi bạn sử dụng hệ thống kiểm soát phiên bản cho mã nguồn của mình, nói một cách đơn giản, nó sẽ được lưu ở ba nơi:

1. Kho từ xa

Đây là nơi lưu trữ tập trung cho mã của bạn, thường đặt trên các dịch vụ như GitHub, GitLab hoặc Bitbucket. Chúng cung cấp lưu trữ tập trung và là nền tảng cho làm việc nhóm. Kho từ xa là điểm tích hợp cho tự động hóa các quy trình như build, kiểm thử và triển khai ứng dụng.

2. Kho cục bộ

Kho cục bộ là bản sao cá nhân của mã, được lưu trên máy tính của bạn. Trong kho này, bạn có thể thực hiện tất cả thao tác Git (commit, tạo nhánh, merge) mà không cần kết nối internet.

3. Thư mục làm việc

Thư mục làm việc trên máy của bạn chứa các tệp dự án hiện hành mà bạn đang làm việc. Đây là nơi bạn xem và chỉnh sửa tệp, thêm tính năng mới hoặc sửa lỗi.

Ba thành phần này phối hợp với nhau để cung cấp hạ tầng mạnh mẽ cho quản lý mã nguồn, cho phép lập trình viên quản lý lịch sử dự án và cộng tác.

5. GitHub — hồ sơ dự án của bạn

GitHublà nền tảng web hàng đầu để lưu trữ mã nguồn, sử dụng hệ thống kiểm soát phiên bản Git. Được thành lập năm 2008, nó nhanh chóng trở thành một trong những công cụ then chốt cho lập trình viên trên toàn thế giới.

GitHub cho phép người dùng tạo kho để quản lý dự án, kiểm soát và theo dõi thay đổi trong mã, và cộng tác với các lập trình viên khác. Với lập trình viên hiện đại, hồ sơ trên GitHub là phần quan trọng của portfolio có thể trình bày với nhà tuyển dụng tiềm năng.

6. Tạo kho đầu tiên của bạn trên GitHub

Bước 1. Truy cập https://github.com và đăng ký.

Bước 2. Nhấn nút New repository để tạo kho mới.

Bước 3. Thiết lập các tham số cho kho:

  1. Tên kho: đặt một tên có ý nghĩa.
  2. Công khai hay riêng tư: với dự án học tập, nên chọn “Public” để người khác có thể nhìn thấy.
  3. Add a README file: nhất định hãy tích lựa chọn này. README — là “khuôn mặt” của dự án.
  4. Add .gitignore: nhấn vào danh sách thả xuống và chọn mẫu phù hợp với ngôn ngữ của bạn.
  5. Choose a license: có thể bỏ qua.
  6. Nhấn Create repository.

Bước 4. Chúc mừng, kho từ xa đầu tiên của bạn đã được tạo!

7. Cài đặt và cấu hình Git

Mặc dù bạn có thể học các nền tảng Git qua các lệnh console (như trong video), trong công việc hằng ngày 99% lập trình viên sử dụng các công cụ tiện lợi tích hợp trong IDE. Mục tiêu của chúng ta — dạy bạn làm việc theo cách mà các chuyên gia vẫn làm.

Giao diện làm việc với Git trong tất cả IDE hiện đại của JetBrains — dù là IntelliJ IDEA cho Java/Kotlin, Rider cho C# hay PyCharm cho Python — gần như giống hệt nhau. Điều đó có nghĩa là khi đã biết Git trong một môi trường, bạn có thể dễ dàng áp dụng kỹ năng đó ở bất kỳ môi trường nào khác. Vì vậy, chúng ta sẽ dùng IntelliJ IDEA như ví dụ phổ quát. Mọi thứ bạn thấy ở đây sẽ trông và hoạt động y như vậy trong IDE bạn yêu thích.

Để làm việc với Git trên máy, trước hết bạn cần cài đặt Git. Nếu bạn dùng IntelliJ IDEA, rất có thể IDE sẽ đề nghị cài Git tự động nếu không tìm thấy trong hệ thống. Chúng tôi khuyên bạn hãy đồng ý — đó là cách đơn giản nhất.

Đóng dự án hiện tại bằng cách chọn File > Close Project, rồi nhấn Clone Repository.

img data-max-width="800" data-id="153e04ef-8321-4bee-806f-d74d21421eaf" src="https://cdn.javarush.com/images/article/153e04ef-8321-4bee-806f-d74d21421eaf/800.jpeg" alt="">

Nếu muốn tự cài đặt thủ công, hãy dùng trang chính thức: https://git-scm.com/downloads.

8. Một chút lịch sử: main vs master

Trước đây, nhánh mặc định trong Git có tên là master. Tuy nhiên, vào năm 2020, cộng đồng lập trình và các nền tảng lớn, bao gồm GitHub, đã chuyển sang thuật ngữ trung tính hơn — main.

Điều này quan trọng vì trong một số bài viết hoặc dự án cũ, bạn vẫn có thể gặp nhắc đến nhánh master. Trong các bài giảng của chúng tôi và trong các dự án hiện đại, nhánh chính sẽ luôn là main.

Có thể tìm hiểu thêm về chuyển đổi sang main qua các liên kết sau:

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION