Cho dù bạn đang muốn tự mình thành lập một nhóm phát triển dự án của riêng mình hay muốn xin việc vào một công ty công nghệ, quản lý phiên bản (version control) của phần mềm là điều kiện tiên quyết bạn phải thành thạo. Có lẽ hiện nay, không có công ty nào, dù là startup mới khởi nghiệp cho đến những tập đoàn lớn lại không sử dụng version control.
Git và Github là 2 công cụ version control phổ biến nhất thế giới. Nó không những vừa giúp bạn kiểm soát tốt dự án và công việc của mình mà còn giúp team bạn có thể tăng tốc độ hoàn thành tiến độ, tránh những xung đột không đáng có về code trong quá trình phát triển.
Nếu bạn chưa biết đến Git là gì, hãy đọc bài viết này trước tại Spiderum
Yêu cầu:
  • Đã cài đặt git trong hệ điều hành
  • Biết sử dụng những lệnh cơ bản trong terminal
    (cd, mkdir, rm ...)
  • Biết sử dụng editor trong terminal (vim, emacs, nano)
Cài đặt config của Git
Khi bắt đầu sử dụng Git, bạn nên cài đặt các global config trong Git để thuận tiện cho việc sử dụng sau này. Ví dụ khi cần push code của bạn lên Github, bạn sẽ phải sử dụng email và password github mỗi lần push. Sau đây là một số config git hay sử dụng:
$ git config --global user.name "Long Le"
# Tên hiển thị của bạn khi bạn thực hiện thay đổi trong project

$ git config --global user.email "[email protected]"
# Email hiển thị của bạn

$ git config --global credential.helper 'cache --timeout 86400'
# Ghi nhớ mật khẩu trong vòng 1 ngày

$ git config --global color.ui true
# Làm git log màu mè hơn =))) Trông thế nhưng cái này cũng khá quan trọng đó :))
Ví dụ trong bài
Để dễ hình dung, ta lấy ví dụ sau:
  • Long tạo một project trong thư mục myProject
  • Long khởi tạo repo git trong myProject
  • Long thêm vào file README.md
  • Long commit sự thay đổi của project
  • Long thêm vào file LICENSE và chỉnh sửa README.md
  • Long commit sự thay đổi của project
Khởi tạo một repo
$ mkdir myProject
$ cd myProject
$ git init
Initialized empty Git repository in /Users/Minh/myProject/.git
Trong ví dụ này, file git trong máy Minh sẽ được lưu ở /Users/Minh/myProject/.git
Quy trình làm việc với Git
  • Tạo file README.md
  • Thêm vào stage
  • Commit sự thay đổi của project
  • Tạo file LICENSE và sửa file README.md
  • Thêm vào stage
  • Commit sự thay đổi của project
  • Tiếp tục quá trình trên...
Kiểm tra trạng thái của Git với project
  • Tạo file README.md
  • Kiểm tra trạng thái tracking hiện tại của Git
$ vim README.md  //Tạo file README.md
$ git status
On branch master

Initial commit

Untracked files:
  (use "git add ..." to include in what will be committed)

README.md

nothing added to commit but untracked files present (use "git add" to track)
Ở đây, Git phát hiện ra sự có mặt của file README.md được tạo thêm trong folder nhưng chưa được "track". Muốn Git track được các file trong folder, ta phải thêm file vào stage
Thêm file vào stage
  • Thêm file README.md vào stage
  • Kiểm tra trạng thái
$ git add README.md
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached ..." to unstage)

new file:   README.md
Commit sự thay đổi của project
  • Commit file README.md
  • Kiểm tra trạng thái
$ git commit -m "create README"
[master (root-commit) 436af89] create README
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md
$ git status
On branch master
nothing to commit, working tree clean
Option -m của git commit giúp bạn có thể viết tóm tắt nội dung commit ngay trong câu lệnh (create README). Nếu không dùng option -m, git sẽ mở default editor (nano, vim... tùy vào default config) và bạn sẽ phải viết tóm tắt nội dung commit vào đó.
Trạng thái hiện tại của project là: Trong nhánh master, không có sự thay đổi nào cần commit. Nhánh master là nhánh chính mặc định của git. Sẽ có những lúc bạn cần nhiều nhánh hơn là chỉ làm việc trên một nhánh chính (trong thực tế là bạn sẽ luôn cần!). Ở những phần sau, tôi sẽ nói kĩ hơn về các nhánh trong Git. Hiện tại, tất cả các câu lệnh Git đều chỉ tương tác ở nhánh master.
Lặp lại quá trình
  • Tạo file LICENSE và sửa file README.md
  • Kiểm tra trạng thái
$ vim LICENSE  //Tạo file LICENSE
$ vim README.md  //Sửa file README.md
$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

modified:   README.md

Untracked files:
  (use "git add ..." to include in what will be committed)

LICENSE

no changes added to commit (use "git add" and/or "git commit -a")
Lưu ý: Do file README.md đã được commit vào trong nhánh master nên Git đã biết file README.md thay đổi so với lần commit trước. File LICENSE mới tạo sẽ được Git cho vào "Untracked files".
  • Thêm LICENSE và README.md vào stage
  • Kiểm tra trạng thái
  • Commit
$ git add README.md LICENSE
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

new file:   LICENSE
modified:   README.md
$ git commit -m "add LICENSE and modify README.md"
[master 286cf99] add LICENSE and modify README.md
 2 files changed, 1 insertion(+)
 create mode 100644 LICENSE
Timeline lịch sử Git của project
Đến thời điểm hiện tại, Git đã có 2 commits trong nhánh master. Vậy làm thế nào để xem timeline lịch sử của Git khi đã có quá nhiều commit? Câu trả lời là git log
$ git log
commit 286cf99394f933b92a3bedf42afece49ef8510d8 (HEAD -> master)
Author: Long Le 
Date:   Thu Nov 23 17:13:22 2017 +0700

    add LICENSE and modify README.md

commit 436af897cf952e6ce183e5f5fd168b3251eced59
Author: Long Le 
Date:   Thu Nov 23 16:46:18 2017 +0700

    create README
Ở đây "Long Le" chính là "config user.name", "[email protected]" chính là "config user.email".
Nếu bạn đã setting git config --global color.ui true, bạn sẽ thấy git log thêm vào màu sắc rất rõ ràng!
Các cách khác nhau để thêm file vào stage
Trong ví dụ trên, khi bạn cần thêm 2 files README.md và LICENSE vào stage, bạn phải liệt kê tên của cả 2 files trong câu lệnh git add. Vậy nếu có rất nhiều file cần thêm vào trong 1 lần commit thì quả là bất tiện. Vì vậy có rất nhiều cách để thêm file(s) vào stage trong các trường hợp khác nhau như sau:
$ git add  //Thêm file(s) theo tên các files được liệt kê
$ git add --all //Thêm tất cả các file(s) bị thay đổi hoặc vừa mới tạo trong project
$ git add *.txt // Thêm tất cả các file(s) có đuôi .txt
$ git add docs/*.txt // Thêm tất cả các file(s) có đuôi .txt trong thư mục docs
$ git add docs/*.txt // Thêm tất cả các file(s) trong thư mục docs
Kết
Như vậy quy trình sử dụng git sẽ là:
$ git add docs/*.txt // Thêm tất cả các file(s) có đuôi .txt trong thư mục docs
Git có rất nhiều câu lệnh. Để tra cứu thêm cách sử dụng các câu lệnh, bạn có thể sử dụng git help  để hiểu rõ hơn cách sử dụng
Chúc mừng bạn!
Giờ thì bạn đã hiểu quy trình và cách thức một developer sử dụng Git hàng ngày để kiểm soát phiên bản của project rồi đó!
Đọc thêm