1. Tổng quan.
Git là một công cụ mạnh mẽ và linh hoạt cho quản lý phiên bản, và nó là một phần quan trọng của quy trình phát triển phần mềm. Bằng cách hiểu cách sử dụng Git một cách hiệu quả, bạn có thể theo dõi các thay đổi trong dự án của mình theo thời gian, hợp tác với các nhà phát triển khác một cách dễ dàng, và đảm bảo rằng bạn luôn có một bản sao an toàn của công việc của mình.
Chúng ta đã thảo luận về cách sử dụng Git để quản lý dự án phần mềm. Đầu tiên, chúng ta đã tìm hiểu về cách cấu hình Git với lệnh git config
, bao gồm cách thiết lập trình soạn thảo mặc định và cách sử dụng tham số --global
để áp dụng cấu hình cho tất cả các repository trên hệ thống của bạn.
Và phần này chúng ta sẽ đi qua các bước cơ bản để tạo một dự án mới với Git, bao gồm việc tạo một thư mục mới cho dự án, khởi tạo một repository Git mới, thêm file vào dự án, tạo commit và cuối cùng là push dự án lên một remote repository.
2. Quy trình tạo dự án với Git.
Dưới đây là các bước cơ bản để tạo một dự án mới với Git:
Tạo một thư mục mới cho dự án của bạn. Bạn có thể làm điều này bằng cách sử dụng lệnh mkdir
trong terminal:
mkdir ten_du_an
Di chuyển vào thư mục dự án. Sử dụng lệnh cd
để di chuyển vào thư mục bạn vừa tạo:
cd ten_du_an
Khởi tạo một repository Git mới. Sử dụng lệnh git init
để khởi tạo một repository Git mới:
git init
Lúc này, Git sẽ tạo một thư mục ẩn mới có tên .git
trong thư mục dự án của bạn. Thư mục này chứa tất cả các thông tin cần thiết cho repository Git của bạn.
Tạo và thêm file vào dự án. Bạn có thể tạo một file mới bằng cách sử dụng trình soạn thảo yêu thích của bạn, sau đó lưu file đó vào thư mục dự án. Khi bạn đã tạo xong file, sử dụng lệnh git add
để thêm file vào staging area:git add ten_file
git add ten_file
Nếu bạn muốn thêm tất cả các file trong thư mục dự án, bạn có thể sử dụng git add .
.
Commit các thay đổi. Khi bạn đã thêm tất cả các file bạn muốn vào staging area, bạn có thể sử dụng lệnh git commit
để tạo một commit mới:
git commit -m "Thông điệp commit"
Thông điệp commit nên mô tả ngắn gọn những thay đổi bạn đã thực hiện.
Lặp lại quá trình thêm và commit file. Khi bạn tiếp tục làm việc trên dự án của mình, bạn sẽ lặp lại quá trình thêm file vào staging area và tạo commit. Điều này giúp bạn theo dõi các thay đổi trong dự án theo thời gian.
Push dự án lên một remote repository (nếu cần). Nếu bạn muốn chia sẻ dự án của mình với người khác, hoặc nếu bạn muốn lưu trữ một bản sao của dự án trên một máy chủ từ xa (như GitHub, GitLab, Bitbucket, v.v.), bạn có thể sử dụng lệnh git push
để đẩy dự án của mình lên một remote repository. Trước khi bạn có thể push, bạn sẽ cần phải thêm một remote repository với lệnh git remote add
:
git remote add origin url_cua_remote_repository
git push -u origin main
Trong đó, url_cua_remote_repository
là URL của remote repository mà bạn muốn push dự án của mình lên.
3. Thực hành.
Quy trình dưới đây sẽ tạo một dự án mới với Git và thêm một file vào dự án đó.
Tạo thư mục lưu trữ dự án và nội dung của nó.
mkdir my_project
: Lệnh này tạo một thư mục mới có tên làmy_project
.cd my_project
: Lệnh này di chuyển vào thư mụcmy_project
vừa tạo.echo 'Hello world!' > index.html
: Lệnh này tạo một file mới có tên làindex.html
và ghi nội dung ‘Hello world!’ vào file đó.echo
là lệnh in ra nội dung trong dấu nháy đơn, và>
là toán tử chuyển hướng output của lệnhecho
vào fileindex.html
.
shell> mkdir my_project
shell> cd my_project
shell> echo 'Hello world!' > index.html
Khởi tạo một repository Git mới.
git init
: Lệnh này khởi tạo một repository Git mới trong thư mục hiện tại (my_project
). Khi bạn chạy lệnh này, Git sẽ tạo một thư mục ẩn mới có tên .git
chứa tất cả các thông tin cần thiết cho repository Git của bạn.
shell> git init
Initialized empty Git repository in /Users/hoanghd/My Drive/git/my_project/.git/
Thư mục .git
được tạo ra khi bạn khởi tạo một repository mới với lệnh git init
. Thư mục này chứa tất cả các thông tin cần thiết cho Git để quản lý repository của bạn.
shell> ls -al
total 8
drwxr-xr-x@ 4 hoanghd staff 128 Jan 30 10:05 .
drwxr-xr-x@ 3 hoanghd staff 96 Jan 30 10:04 ..
drwxr-xr-x@ 9 hoanghd staff 288 Jan 30 10:05 .git
-rw-r--r--@ 1 hoanghd staff 13 Jan 30 10:05 index.html
Cụ thể, thư mục .git
bao gồm:
config
: File này chứa cấu hình cục bộ của repository. Các cấu hình này chỉ áp dụng cho repository hiện tại và sẽ ghi đè lên cấu hình toàn cầu nếu có.HEAD
: File này chứa một tham chiếu đến nhánh hiện tại.objects
: Thư mục này chứa tất cả các đối tượng dữ liệu của Git, bao gồm file và thư mục, cũng như thông tin về lịch sử commit và nhánh.refs
: Thư mục này chứa các tham chiếu đến commit, bao gồm nhánh (refs/heads
) và tag (refs/tags
).index
: File này chứa thông tin về staging area, nơi Git theo dõi các thay đổi sẽ được commit tiếp theo.
Nói chung, bạn không cần phải tương tác trực tiếp với thư mục .git
– Git sẽ quản lý nó cho bạn. Tuy nhiên, hiểu về nó có thể giúp bạn hiểu rõ hơn về cách Git hoạt động.
Kết quả là bạn có một dự án mới có tên my_project
với một file index.html
và một repository Git để theo dõi các thay đổi trong dự án. Tuy nhiên, lưu ý rằng file index.html
chưa được thêm vào repository Git.
Thêm các thay đổi vào repository.
Để thêm file vào repository, bạn cần sử dụng lệnh git add index.html
hoặc git add .
để thêm toàn bộ file có sự thay đổi mới và sau đó tạo một commit với lệnh git commit -m "khoi tao"
.
shell> git add .
shell> git commit -m"khoi tao"
[main (root-commit) a5750ee] khoi tao
1 file changed, 1 insertion(+)
create mode 100644 index.html
Kết quả của lệnh cho thấy commit đã được tạo thành công:
[main (root-commit) a5750ee] khoi tao
: Đây là thông tin về commit vừa được tạo.main
là nhánh hiện tại.root-commit
cho biết đây là commit đầu tiên trong repository.a5750ee
là hash commit. “khoi tao” là thông điệp commit.1 file changed, 1 insertion(+)
: Đây là thống kê về những thay đổi trong commit. Trong trường hợp này, có một file đã thay đổi, với một dòng được thêm vào.create mode 100644 index.html
: Đây cho biết một file mớiindex.html
đã được tạo trong commit này.100644
là mode file, cho biết đây là một file bình thường (không phải là một thư mục hay liên kết).
Hiển thị lịch sử commit của repository.
Lệnh git log --oneline
được sử dụng để hiển thị lịch sử commit của repository Git hiện tại dưới dạng tóm tắt, với mỗi commit trên một dòng.
shell> git log --oneline
a5750ee (HEAD -> main) khoi tao
git log
: Là lệnh hiển thị lịch sử commit. Mặc định, nó sẽ hiển thị thông tin chi tiết về mỗi commit, bao gồm hash commit, tác giả, ngày giờ commit và thông điệp commit.--oneline
: Là tùy chọn để hiển thị lịch sử commit dưới dạng tóm tắt, với mỗi commit trên một dòng. Mỗi dòng sẽ chứa hash commit (được rút gọn) và thông điệp commit.
Kết quả của lệnh cho thấy có một commit trong repository:
a5750ee (HEAD -> main) khoi tao
: Đây là thông tin về commit.a5750ee
là hash commit (được rút gọn).(HEAD -> main)
cho biếtHEAD
(tức là commit hiện tại) đang trỏ đến nhánhmain
. “khoi tao” là thông điệp commit.
Kiểm tra trạng thái của working tree và staging area.
Lệnh git status
được sử dụng để kiểm tra trạng thái của working tree và staging area. Nó cho bạn biết những file nào đã thay đổi từ lần commit cuối cùng, những file nào đã được stage để commit tiếp theo, và những file nào chưa được theo dõi bởi Git.
shell> git status
On branch main
nothing to commit, working tree clean
Kết quả của lệnh cho thấy:
On branch main
: Bạn đang ở trên nhánhmain
.nothing to commit, working tree clean
: Điều này có nghĩa là không có thay đổi nào trong working tree so với lần commit cuối cùng. Tất cả các thay đổi đã được commit, và không có file mới nào chưa được theo dõi bởi Git.
Nói cách khác, working tree của bạn đang ở trạng thái sạch, tức là không có thay đổi nào chưa được commit hoặc chưa được stage.
Sửa đổi nội dung file sau đó kiểm tra lại status của repository.
Đầu tiên, lệnh echo 'Hello world 2024!' > index.html
được sử dụng để thay đổi nội dung của file index.html
. Nó ghi đè nội dung hiện tại của file bằng chuỗi ‘Hello world 2024!’.
shell> echo 'Hello world 2024!' > index.html
shell> git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
Sau đó, lệnh git status
được sử dụng để kiểm tra trạng thái của working tree và staging area.
Kết quả của lệnh git status
cho thấy:
On branch main
: Bạn đang ở trên nhánhmain
.Changes not staged for commit:
: Đây là danh sách các thay đổi trong working tree mà chưa được stage để commit tiếp theo. Trong trường hợp này, fileindex.html
đã được sửa đổi nhưng chưa được stage.(use "git add <file>..." to update what will be committed)
: Đây là gợi ý về cách stage các thay đổi để chuẩn bị cho commit tiếp theo. Bạn có thể sử dụng lệnhgit add index.html
để stage thay đổi của fileindex.html
.(use "git restore <file>..." to discard changes in working directory)
: Đây là gợi ý về cách hủy bỏ các thay đổi trong working tree. Bạn có thể sử dụng lệnhgit restore index.html
để quay lại trạng thái của fileindex.html
như trong lần commit cuối cùng.no changes added to commit (use "git add" and/or "git commit -a")
: Đây là thông báo rằng không có thay đổi nào đã được stage để commit. Bạn cần sử dụng lệnhgit add
để stage các thay đổi trước khi commit.
Lúc này bạn có thể dùng git add .
sau đó kiểm tra lại bằng git status
thì bạn sẽ thấy thông báo Changes to be committed
cho biết dữ liệu đã sẵn sàng để commit.
shell> git add .
shell> git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: index.html
Hãy tiến hành commit.
shell> git commit -m"commit2"
[main 95dc2d7] commit2
1 file changed, 1 insertion(+), 1 deletion(-)
Và kiểm tra lại bằng lệnh git log --oneline
bạn có kết quả 2 commit như dưới.
shell> git log --oneline
95dc2d7 (HEAD -> main) commit2
a5750ee khoi tao
Kết quả của lệnh cho thấy có hai commit trong repository:
95dc2d7 (HEAD -> main) commit2
: Đây là commit mới nhất.95dc2d7
là hash commit (được rút gọn).(HEAD -> main)
cho biếtHEAD
(tức là commit hiện tại) đang trỏ đến nhánhmain
. Điều này cũng có nghĩa là commit này là commit mới nhất trên nhánhmain
.commit2
là thông điệp commit.
a5750ee khoi tao
: Đây là commit trước đó.a5750ee
là hash commit (được rút gọn).khoi tao
là thông điệp commit.
Nói cách khác, bạn đã tạo một commit mới (commit2
) sau commit khoi tao
.