Xin chào các bạn đồng nghiệp tương lai của ngành phát triển ứng dụng di động! Chào mừng trở lại với series “Lộ trình học Lập trình viên iOS 2025“. Sau khi cùng nhau khám phá nền tảng ngôn ngữ Swift (và cả Objective-C), những kiến thức cơ bản về cú pháp, lập trình hướng đối tượng và hàm, quản lý bộ nhớ (ARC), vòng đời ViewController, xử lý lỗi và đa luồng, giờ là lúc chúng ta bước vào một khía cạnh cực kỳ quan trọng mà mọi developer, không chỉ riêng iOS, đều phải thành thạo: Quản lý mã nguồn.
Hãy tưởng tượng bạn đang xây dựng một ứng dụng iOS tuyệt vời. Mã nguồn ngày càng nhiều, bạn thử nghiệm các tính năng mới, sửa lỗi, và có thể làm việc cùng với đồng đội. Sẽ thế nào nếu bạn muốn quay trở lại một phiên bản cũ mà ứng dụng đang chạy ổn định? Hay làm sao để kết hợp công việc của bạn với đồng đội mà không ghi đè lên nhau? Đây chính là lúc hệ thống kiểm soát phiên bản (Version Control System – VCS) phát huy sức mạnh, và Git là ông vua trong lĩnh vực này. Khi kết hợp với GitHub, nền tảng lưu trữ mã nguồn đám mây phổ biến nhất, bạn sẽ có một bộ công cụ cực kỳ mạnh mẽ.
Trong bài viết này, chúng ta sẽ đi từ những khái niệm cơ bản nhất của Git đến cách sử dụng nó cùng với GitHub để quản lý dự án iOS của bạn một cách hiệu quả. Sẵn sàng chưa?
Mục lục
Hệ thống kiểm soát phiên bản là gì và tại sao lại là Git?
Về cơ bản, hệ thống kiểm soát phiên bản là một công cụ giúp theo dõi các thay đổi trong tập tin theo thời gian. Nó cho phép bạn quay lại các phiên bản trước của dự án, xem ai đã thay đổi cái gì, khi nào, và tại sao. Điều này là cực kỳ quan trọng trong phát triển phần mềm vì:
- Quản lý thay đổi: Bạn có thể theo dõi lịch sử phát triển của dự án chi tiết.
- Hợp tác: Nhiều người có thể làm việc trên cùng một dự án mà không gây xung đột.
- An toàn: Mã nguồn của bạn được sao lưu và bạn có thể dễ dàng phục hồi nếu có sự cố.
- Thử nghiệm an toàn: Bạn có thể tạo ra các “nhánh” riêng biệt để thử nghiệm tính năng mới mà không ảnh hưởng đến mã nguồn chính đang chạy ổn định.
Có nhiều loại VCS, nhưng Git đã trở thành tiêu chuẩn công nghiệp. Git là một hệ thống kiểm soát phiên bản phân tán (Distributed VCS – DVCS). Điều này có nghĩa là mỗi lập trình viên làm việc trên dự án đều có một bản sao đầy đủ của toàn bộ lịch sử dự án trên máy tính cục bộ của họ. Điều này mang lại tốc độ và tính linh hoạt vượt trội so với các hệ thống tập trung truyền thống.
Các Khái Niệm Cơ Bản Của Git
Trước khi bắt tay vào thực hành, chúng ta cần nắm vững một số thuật ngữ cốt lõi:
- Repository (Kho lưu trữ): Nơi chứa toàn bộ lịch sử dự án, bao gồm tất cả các tập tin, thư mục và các thay đổi của chúng. Có thể là kho lưu trữ cục bộ trên máy tính của bạn hoặc kho lưu trữ từ xa trên máy chủ (như GitHub).
- Commit: Một “phiên bản” hoặc “điểm mốc” của dự án tại một thời điểm cụ thể. Mỗi commit chứa một snapshot của toàn bộ dự án và một tin nhắn mô tả các thay đổi. Commit là đơn vị cơ bản của lịch sử trong Git.
- Branch (Nhánh): Một con trỏ đến một commit cụ thể, cho phép bạn làm việc trên một luồng phát triển độc lập. Nhánh `main` (hoặc `master`) thường là nhánh chính của dự án. Bạn tạo nhánh mới để phát triển tính năng hoặc sửa lỗi mà không làm ảnh hưởng đến nhánh chính.
- Merge (Trộn): Quá trình kết hợp các thay đổi từ một nhánh này sang một nhánh khác.
- Clone: Tải toàn bộ lịch sử của một repository từ xa về máy tính cục bộ của bạn.
- Pull: Lấy các thay đổi mới nhất từ remote repository về và tự động merge vào nhánh hiện tại của bạn.
- Push: Đẩy các commit từ repository cục bộ của bạn lên remote repository.
- Staging Area (Khu vực chuẩn bị): Một khu vực trung gian giữa thư mục làm việc của bạn và repository. Bạn thêm các thay đổi vào staging area trước khi tạo commit.
Cài Đặt Git
Git thường đã được cài đặt sẵn trên macOS. Bạn có thể kiểm tra bằng cách mở Terminal và gõ:
git --version
Nếu Git chưa được cài đặt, hệ thống sẽ nhắc bạn cài đặt Command Line Developer Tools (bao gồm Git) hoặc bạn có thể cài đặt thông qua Homebrew:
brew install git
Sau khi cài đặt, hãy thiết lập thông tin của bạn (chỉ làm một lần):
git config --global user.name "Tên của bạn"
git config --global user.email "emailcủa_bạn@example.com"
Bắt Đầu Với Git Trên Dự Án iOS Cục Bộ
Hãy tạo một dự án iOS mới trong Xcode (hoặc sử dụng dự án hiện có). Mặc định, Xcode thường tích hợp với Git và sẽ tạo một repository cục bộ cho bạn khi tạo dự án mới. Tuy nhiên, nếu bạn bỏ qua bước đó hoặc muốn bắt đầu với một dự án không có Git, bạn có thể tự khởi tạo.
Mở Terminal và điều hướng đến thư mục gốc của dự án iOS của bạn:
cd /duong/dan/toi/du_an_ios_cua_ban
Để khởi tạo một repository Git mới tại đây, chạy lệnh:
git init
Thao tác này sẽ tạo một thư mục `.git` ẩn bên trong thư mục dự án của bạn. Đây là nơi Git lưu trữ toàn bộ lịch sử và cấu hình của repository.
Dự án Xcode của bạn chứa nhiều tập tin, nhưng không phải tất cả đều cần được theo dõi bởi Git. Các tập tin tạm thời, dữ liệu người dùng, sản phẩm biên dịch (build artifacts), v.v., nên được bỏ qua. Để làm điều này, chúng ta sử dụng tập tin `.gitignore`. Xcode thường tạo sẵn tập tin này cho bạn khi khởi tạo Git. Nếu không có, bạn có thể tạo một tập tin mới tên là `.gitignore` ở thư mục gốc dự án và thêm nội dung mẫu dành cho dự án Swift/Xcode. Bạn có thể tìm thấy các mẫu `.gitignore` phổ biến trên GitHub.
Ví dụ nội dung cơ bản cho `.gitignore`:
# Xcode
.DS_Store
*.pbxuser
*.xcworkspace
!default.xcworkspace
*.xcuserdatad
!default.xcuserdatad
*.xcuserstate
# Build products
Build/
# Generated files
DerivedData/
# Swift Package Manager
.build/
# Optional
# Pods/ # Nếu bạn dùng Cocoapods và không muốn commit thư mục Pods
Sau khi khởi tạo repository và thiết lập `.gitignore`, hãy xem trạng thái hiện tại của dự án:
git status
Lệnh này sẽ cho bạn biết những tập tin nào đã thay đổi, những tập tin nào chưa được theo dõi (Untracked files). Các tập tin mà `.gitignore` loại bỏ sẽ không xuất hiện trong danh sách này.
Để bắt đầu theo dõi các tập tin dự án, bạn cần thêm chúng vào staging area:
git add .
Lệnh `git add .` sẽ thêm tất cả các tập tin mới hoặc đã thay đổi (mà không bị `.gitignore` bỏ qua) vào staging area. Nếu bạn chỉ muốn thêm một tập tin cụ thể:
git add TenTapTinCuaBan.swift
Kiểm tra lại trạng thái:
git status
Bạn sẽ thấy các tập tin đã được chuyển sang khu vực “Changes to be committed”.
Bây giờ, hãy tạo commit đầu tiên của bạn. Commit này sẽ lưu lại trạng thái hiện tại của dự án:
git commit -m "Initial commit - Setup basic project structure"
Cờ `-m` cho phép bạn cung cấp một tin nhắn ngắn gọn cho commit. Tin nhắn commit rất quan trọng! Hãy viết nó thật rõ ràng để mô tả các thay đổi mà commit này mang lại. Điều này giúp bạn (và đồng đội) hiểu lịch sử dự án sau này.
Bạn có thể xem lịch sử commit bằng lệnh:
git log
Lệnh này sẽ hiển thị danh sách các commit theo thứ tự thời gian đảo ngược, bao gồm mã hash của commit, tác giả, ngày tháng và tin nhắn commit.
Giới Thiệu GitHub
Git là công cụ quản lý phiên bản cục bộ, còn GitHub là một nền tảng dựa trên web cung cấp dịch vụ lưu trữ remote repository (kho lưu trữ từ xa). GitHub không phải là Git, nhưng nó là dịch vụ phổ biến nhất để cộng tác sử dụng Git. Các nền tảng tương tự bao gồm GitLab và Bitbucket.
GitHub cung cấp nhiều tính năng hữu ích ngoài việc lưu trữ mã nguồn:
- Lưu trữ tập trung mã nguồn của bạn trên đám mây (backup).
- Cộng tác dễ dàng với đồng đội (Pull Requests, Code Reviews).
- Theo dõi lỗi và quản lý công việc (Issues).
- Tích hợp với các công cụ CI/CD (Continuous Integration/Continuous Deployment).
- Thể hiện portfolio của bạn cho nhà tuyển dụng.
Để sử dụng GitHub, bạn cần tạo một tài khoản miễn phí trên trang web github.com.
Kết Nối Git Cục Bộ Với GitHub
Sau khi có tài khoản GitHub, bạn có thể tạo một repository mới trên đó để lưu trữ dự án iOS của mình. Trên giao diện web của GitHub, nhấn vào dấu “+” ở góc trên bên phải và chọn “New repository”.
Đặt tên cho repository (ví dụ: `MyFirstiOSApp`), chọn tùy chọn Public hoặc Private. Bạn có thể bỏ qua tùy chọn thêm README hoặc .gitignore ở bước này vì chúng ta đã có dự án cục bộ.
Sau khi tạo, GitHub sẽ cung cấp cho bạn các hướng dẫn để kết nối repository cục bộ của bạn với remote repository này. Thông thường, bạn sẽ thấy hai lệnh sau:
git remote add origin https://github.com/TenTaiKhoanGitHubCuaBan/MyFirstiOSApp.git
git branch -M main
git push -u origin main
Hãy giải thích từng lệnh:
- `git remote add origin [URL_repository_GitHub]`: Lệnh này thêm một địa chỉ remote (từ xa) vào repository cục bộ của bạn và đặt tên cho nó là `origin`. `origin` là tên quy ước phổ biến cho remote chính.
- `git branch -M main`: Lệnh này (hoặc `git branch -m master main` nếu nhánh chính cũ là `master`) đổi tên nhánh hiện tại (thường là `master` mặc định khi `git init`) thành `main`, là tên nhánh chính phổ biến hiện nay.
- `git push -u origin main`: Lệnh này đẩy (push) các commit từ nhánh `main` cục bộ lên nhánh `main` trên remote `origin`. Cờ `-u` (hoặc `–set-upstream`) thiết lập nhánh `main` cục bộ theo dõi (track) nhánh `main` trên `origin`, giúp các lệnh `git pull` và `git push` sau này đơn giản hơn.
Sau khi chạy các lệnh này, mã nguồn dự án iOS của bạn (đến commit đầu tiên) sẽ xuất hiện trên GitHub.
Workflow Git Cơ Bản (Làm Việc Một Mình)
Khi làm việc một mình trên dự án iOS, workflow cơ bản sẽ là:
- Thay đổi mã nguồn: Viết code, thêm tài sản (assets), sửa giao diện trong Xcode.
- Xem trạng thái: Sử dụng `git status` để xem những gì đã thay đổi.
- Thêm thay đổi vào staging: Sử dụng `git add .` (hoặc cụ thể hơn) để chuẩn bị các thay đổi cho commit.
- Tạo commit: Sử dụng `git commit -m “Mô tả thay đổi”` để lưu lại các thay đổi. Hãy commit thường xuyên với các thay đổi nhỏ, logic. Ví dụ: “Implement login UI”, “Add validation for email field”, “Fix crash on profile screen”.
- Đẩy lên GitHub: Sử dụng `git push origin main` (hoặc tên nhánh bạn đang làm việc) để đẩy các commit cục bộ lên remote repository trên GitHub. Điều này giúp sao lưu công việc của bạn và bạn có thể truy cập từ máy khác.
Workflow Git Cơ Bản (Làm Việc Nhóm)
Làm việc nhóm là lúc sức mạnh của Git và GitHub thực sự tỏa sáng. Workflow phổ biến trong làm việc nhóm dựa trên các nhánh (branching):
- Clone Repository: Nếu bạn là thành viên mới tham gia dự án, bạn cần clone repository về máy cục bộ:
git clone [URL_repository_GitHub]
- Pull Thay Đổi Mới Nhất: Trước khi bắt đầu làm việc mỗi ngày, hãy luôn pull các thay đổi mới nhất từ remote repository để đảm bảo mã nguồn của bạn được cập nhật với công việc của đồng đội:
git pull origin main
- Tạo Nhánh Mới: Không làm việc trực tiếp trên nhánh `main`! Hãy tạo một nhánh mới cho mỗi tính năng hoặc sửa lỗi bạn đang làm. Tên nhánh nên mô tả công việc (ví dụ: `feature/login-screen`, `fix/crash-on-settings`).
git checkout -b feature/ten-tinh-nang-cua-ban
Lệnh này vừa tạo nhánh mới, vừa chuyển sang nhánh đó.
- Phát triển tính năng/Sửa lỗi: Làm việc trên nhánh mới của bạn. Commit thường xuyên các thay đổi cục bộ.
- Đẩy nhánh lên Remote: Khi sẵn sàng hoặc khi muốn sao lưu công việc, hãy đẩy nhánh tính năng của bạn lên GitHub:
git push origin feature/ten-tinh-nang-cua-ban
Lần đầu push nhánh mới, bạn có thể cần dùng `-u` như khi push `main`:
git push -u origin feature/ten-tinh-nang-cua-ban
- Tạo Pull Request (PR): Trên GitHub, tạo một Pull Request từ nhánh tính năng của bạn đến nhánh `main` (hoặc nhánh phát triển khác như `develop`). PR là nơi bạn đề xuất các thay đổi của mình được merge vào nhánh đích. Đây cũng là nơi đồng đội xem lại code (Code Review) và thảo luận.
- Code Review và Thảo luận: Đồng đội sẽ xem xét code của bạn, đưa ra góp ý hoặc yêu cầu thay đổi.
- Giải quyết Xung Đột (Merge Conflicts): Nếu có sự thay đổi trên nhánh `main` (hoặc nhánh đích) mà ảnh hưởng đến cùng dòng code bạn đã thay đổi trên nhánh tính năng, sẽ xảy ra xung đột merge. Bạn cần giải quyết các xung đột này (Git sẽ đánh dấu các phần xung đột trong tập tin), thêm các tập tin đã giải quyết vào staging, và tạo một commit mới. Git và Xcode (với giao diện Source Control) có công cụ hỗ trợ giải quyết xung đột.
- Merge PR: Sau khi code được duyệt và mọi xung đột được giải quyết, PR sẽ được merge vào nhánh đích (ví dụ `main`).
- Cập nhật Nhánh Cục Bộ: Sau khi PR được merge trên GitHub, hãy quay lại nhánh `main` cục bộ của bạn và pull các thay đổi mới nhất:
git checkout main git pull origin main
- Xóa Nhánh Tính Năng: Sau khi nhánh tính năng đã được merge và công việc hoàn tất, bạn có thể xóa nhánh tính năng cả trên remote và cục bộ để giữ cho repository sạch sẽ:
git branch -d feature/ten-tinh-nang-cua-ban # Xóa cục bộ (-D để xóa bất chấp) git push origin --delete feature/ten-tinh-nang-cua-ban # Xóa trên remote
Workflow này (thường gọi là Gitflow hoặc đơn giản hóa) giúp quản lý các thay đổi một cách có tổ chức và giảm thiểu rủi ro.
Một số lệnh Git hữu ích khác cho iOS Developer
Ngoài các lệnh cơ bản đã nêu, có một vài lệnh khác rất hữu ích:
-
git status
Luôn kiểm tra trạng thái trước khi thêm hoặc commit. Cung cấp cái nhìn tổng quan về những gì đang diễn ra.
-
git diff
Xem chi tiết các thay đổi chưa được thêm vào staging (`git diff`) hoặc đã được thêm vào staging nhưng chưa commit (`git diff –staged`). Rất hữu ích để xem lại công việc trước khi commit.
-
git log --oneline --graph --decorate
Xem lịch sử commit dưới dạng đồ thị đẹp mắt, hiển thị các nhánh và commit một cách trực quan.
-
git stash
Tạm thời lưu trữ các thay đổi hiện tại mà chưa muốn commit, để bạn có thể chuyển sang nhánh khác hoặc làm việc khác. Sau đó có thể áp dụng lại các thay đổi này bằng `git stash apply` hoặc `git stash pop`. Rất hữu ích khi bạn cần chuyển ngữ cảnh làm việc nhanh chóng.
-
git reset
Hoàn tác các commit. Cần sử dụng cẩn thận. Ví dụ: `git reset HEAD~1` để hoàn tác commit cuối cùng (giữ lại thay đổi trong thư mục làm việc), `git reset –hard HEAD~1` để hoàn tác commit cuối cùng và xóa sạch thay đổi.
-
git revert
Tạo một commit mới để hoàn tác các thay đổi từ một commit cụ thể. An toàn hơn `git reset` khi làm việc nhóm vì nó không làm thay đổi lịch sử commit.
Bảng Tóm Tắt Các Lệnh Git Cơ Bản
Để dễ hình dung, đây là bảng tóm tắt các lệnh cơ bản mà bạn sẽ sử dụng thường xuyên:
Lệnh Git | Mô tả | Ví dụ |
---|---|---|
git init |
Khởi tạo một repository Git mới trong thư mục hiện tại. | git init |
git clone |
Sao chép một repository từ xa về máy tính cục bộ. | git clone https://github.com/user/repo.git |
git status |
Hiển thị trạng thái của thư mục làm việc và staging area. | git status |
git add |
Thêm các thay đổi vào staging area để chuẩn bị cho commit. | git add . hoặc git add TenFile.swift |
git commit |
Lưu lại các thay đổi đã được thêm vào staging dưới dạng một commit mới. | git commit -m "Mô tả ngắn gọn" |
git log |
Xem lịch sử các commit. | git log hoặc git log --oneline |
git remote add |
Thêm địa chỉ của remote repository. | git remote add origin [URL] |
git push |
Đẩy các commit từ repository cục bộ lên remote repository. | git push origin main |
git pull |
Lấy các thay đổi mới nhất từ remote repository và merge vào nhánh hiện tại. | git pull origin main |
git branch |
Liệt kê, tạo hoặc xóa nhánh. | git branch ten-nhanh (tạo)git branch -d ten-nhanh (xóa) |
git checkout |
Chuyển đổi giữa các nhánh hoặc các commit. | git checkout ten-nhanh |
git merge |
Trộn các thay đổi từ một nhánh vào nhánh hiện tại. | git merge ten-nhanh-khac |
Lợi Ích Của Việc Sử Dụng Git/GitHub Trong Phát Triển iOS
Sử dụng Git và GitHub mang lại vô số lợi ích cho một lập trình viên iOS:
- Hợp tác hiệu quả: Dễ dàng làm việc cùng đồng đội, quản lý các đóng góp và giải quyết xung đột.
- Sao lưu an toàn: Mã nguồn của bạn được lưu trữ trên đám mây, tránh mất mát dữ liệu do hỏng ổ cứng hoặc các sự cố khác.
- Quay lại các phiên bản cũ: Nếu bạn làm hỏng thứ gì đó hoặc cần quay lại một trạng thái làm việc ổn định, lịch sử commit cho phép bạn làm điều đó dễ dàng.
- Thử nghiệm không sợ hãi: Sử dụng các nhánh để thử nghiệm tính năng mới, refactor code mà không lo làm hỏng mã nguồn chính. Nếu thử nghiệm thất bại, chỉ cần xóa nhánh đi.
- Showcase công việc: Profile GitHub của bạn là một portfolio tuyệt vời để trưng bày các dự án cá nhân hoặc đóng góp mã nguồn mở cho nhà tuyển dụng.
- Tích hợp với quy trình phát triển: Git và GitHub là nền tảng cho CI/CD, tự động hóa việc kiểm thử và triển khai ứng dụng.
Khi bạn tiếp tục hành trình học Lập trình viên iOS 2025, việc thành thạo Git và GitHub sẽ là một kỹ năng không thể thiếu, giúp bạn làm việc chuyên nghiệp hơn, hiệu quả hơn và mở ra cánh cửa tham gia vào các dự án lớn, làm việc nhóm.
Kết Luận
Git và GitHub ban đầu có thể hơi khó làm quen với các khái niệm và dòng lệnh mới. Tuy nhiên, chúng là những công cụ không thể thiếu trong bộ kỹ năng của bất kỳ lập trình viên hiện đại nào, đặc biệt là trong lĩnh vực phát triển ứng dụng di động nơi các dự án thường phức tạp và có sự tham gia của nhiều người.
Hãy bắt đầu sử dụng Git và GitHub ngay với dự án iOS cá nhân đầu tiên của bạn. Thực hành thường xuyên các lệnh cơ bản, làm quen với workflow, và đừng ngại thử nghiệm tạo nhánh, commit, push, pull. GitHub cũng cung cấp giao diện web và các ứng dụng desktop trực quan để giúp bạn làm quen trước khi sử dụng hoàn toàn bằng dòng lệnh.
Việc thành thạo quản lý mã nguồn là một bước tiến lớn trên lộ trình học của bạn. Hãy tiếp tục khám phá và thực hành! Hẹn gặp lại trong các bài viết tiếp theo của series, nơi chúng ta sẽ đi sâu hơn vào các chủ đề quan trọng khác của phát triển iOS.