Git (02): Cài đặt và cấu hình Git

Bài học trước: Git (01): Tổng quan
-----

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

2.1       Cài đặt Git


Trước khi có thể tìm hiểu và sử dụng Git, bạn cần cài đặt phần mềm Git vào máy. Để cài đặt Git có nhiều cách, có thể cài đặt như một package, như một phần mềm (installer) hoặc tải mã nguồn về rồi tự biên dịch.

Phần này hướng dẫn cách cài đặt như một phần mềm, và thực hiện trên môi trường Windows.

Tải gói cài đặt Git cho Windows tại đây (quá trình tải xuống máy sẽ được chạy tự động):

Quá trình cài đặt sẽ cài luôn công cụ Git Bash (cửa sổ dòng lệnh) để nhập lệnh. Ngoài ra, quá trình cài đặt cũng đã cấu hình để cho phép nhập lệnh cho Git từ cửa sổ Command Prompt (Run\cmd) và PowerShell.

Cũng có thể cài đặt Git bằng phần mềm Github Desktop. Phần mềm Github Desktop cho phép bạn làm việc với Git ở hai chế độ: dòng lệnh và đồ họa. Vào đây để tải Github Desktop: https://desktop.github.com/.

Đọc thêm ở đây (tiếng Anh):


Lab 1. Tải và cài đặt Git

Thực hiện tải và cài đặt Git vào máy của bạn.

Sau khi cài đặt Git thành công, chạy lệnh: git --version để kiểm tra phiên bản Git vừa cài đặt. Nếu hệ thống hiển thị được phiên bản là việc cài đặt đã thành công.

Ví dụ:

C:\Users\Maxsys>git --version
git version 2.20.1.windows.1.

Thực hiện lệnh git --version trên ba môi trường: Git Bash, Command Prompt và PowerShell.

2.2       Cấu hình môi trường làm việc


Tới thời điểm này, bạn đã có phần mềm Git trên máy tính. Giờ sẽ thực hiện thiết lập môi trường làm việc, chỉ cần thiết lập một lần trên mỗi máy tính, tuy nhiên, sau này bạn vẫn có thể cập nhật lại. Các thông tin cần cấu hình gồm: danh tính của bạn, chương trình soạn thảo văn bản.

Để đọc/ghi hoặc cập nhật thông tin cấu hình sử dụng lệnh git config.          

Với Git, bạn có thể cấu hình và lưu thông tin ở ba nơi khác nhau, tương ứng với ba mức cấu hình, gồm: system, global, và local

– system: nếu cấu hình ở mức này, thông tin sẽ được dùng cho tất cả người dùng và tất cả kho chứa trên hệ thống. Thông tin cấu hình được lưu tại /etc/gitconfig. Ví dụ trên hệ thống Windows sẽ là C:\Program Files\Git\mingw64\etc\gitconfig. Để cấu hình, cần thêm tham số --system cho lệnh git config. Ví dụ: $ git config --system user.name "Van Teo". Cần phải có quyền quản trị hệ thống mới thực hiện được mức cấu hình này.

– global: nếu cấu hình ở mức này, thông tin sẽ được dùng cho duy nhất tài khoản đang đăng nhập và cho tất cả các kho chứa mà bạn đang làm việc trên hệ thống. Thông tin cấu hình được lưu tại ~/.gitconfig. Ví dụ trên hệ thống Windows, user đang đăng nhập là tentaikhoan, thì thông tin sẽ được lưu tại C:\Users\tentaikhoan\.gitconfig. Để cấu hình, cần thêm tham số --global cho lệnh git config. Ví dụ: $ git config --global user.name "Van Teo". Đây là mức cấu hình hay được sử dụng.

– local: nếu cấu hình ở mức này, thông tin sẽ được dùng cho duy nhất một kho chứa. Thông tin cấu hình được lưu trong chính kho chứa, tại .git/config. Để cấu hình, sử dụng lệnh git config. Ví dụ: $ git config user.name "Van Teo".

Nếu trên một hệ thống mà cùng lúc cấu hình ở cả ba mức, thì thông tin ở mức nào có độ ưu tiên cao hơn sẽ được sử dụng. Thứ tự ưu tiên của mức local là cao nhất, sau đó đến global và cuối cùng là system.

Danh tính của bạn

Thông tin đầu tiên cần phải cấu hình trước khi sử dụng Git là tên và địa chỉ email của bạn. Git sẽ sử dụng hai thông tin này để gắn vào mỗi lệnh commit (mục đích để biết ai đã thực hiện commit).

Nên cấu hình danh tính của bạn ở mức global, và chỉ làm một lần. Git sẽ sử dụng thông tin này cho tất cả các thao tác bạn làm trên hệ thống. Nếu muốn sử dụng tên và email khác cho một dự án riêng, thì thực hiện thêm việc cấu hình danh tính tại mức local cho chính dự án đó.

Ví dụ,

$ git config --global user.name "Van Teo"
$ git config --global user.email nguyenvanteo@gmail.com

Mở .gitconfig để kiểm tra thông tin vừa cấu hình:

[user]
            name = Van Teo
            email = nguyenvanteo@gmail.com

Chương trình soạn thảo văn bản

Sau khi đã cấu hình danh tính, bạn cần thực hiện cấu hình để chỉ cho Git biết khi cần phải mở một chương trình soản thảo văn bản thì sẽ mở chương trình nào. Nếu không chỉ cho Git biết, nó sẽ tìm và mở một trình soạn thảo văn bản mặc định trên hệ thống của bạn.

Ví dụ, cấu hình để Git dùng Visual Studio Code khi cần mở chương trình soạn thảo văn bản:

$ git config --global core.editor code

Ví dụ, cấu hình để Git dùng Notepad khi cần mở chương trình soạn thảo văn bản:

$ git config --global core.editor notepad

Ví dụ, cấu hình để Git dùng Sublime Text khi cần mở chương trình soạn thảo văn bản:

$ git config --global core.editor "'C:/Program Files/Sublime Text 3/sublime_text.exe' -w"

Kiểm tra thông cấu hình môi trường làm việc

Để kiểm tra các thông tin cấu hình đã cài đặt, sử dụng lệnh git config --list. Có thể có từ khóa xuất hiện nhiều hơn một lần là do Git đã đọc từ nhiều tập tin cấu hình khác nhau (của mức system, global và local), trong trường hợp này Git sẽ lấy giá trị xuất hiện sau cùng để sử dụng (xem lại về thứ tự ưu tiên).

Để kiểm tra cụ thể một thông tin, sử dụng cú pháp sau: git config {key}

Ví dụ:

$ git config user.name

Hiển thị thông tin giúp đỡ

Muốn hiển thị thông tin trợ giúp khi cấu hình Git, sử dụng một trong ba lệnh sau (kết quả sẽ hiển thị trong cửa sổ trình duyệt):

– git <verb> --help
– git help <verb>
– man git -<verb>

Ví dụ:

– git config --help

Đọc thêm ở đây (tiếng Anh):


Lab 2. Cấu hình môi trường làm việc cho Git.

Thực hiện các cấu hình sau (mức global):

– Username: tên của bạn (ví dụ: Teo Nguyen)

– Email: hộp thư của bạn (ví dụ: teo.nguyen@gmail.com)

– Trình soạn thảo văn bản đi kèm với Git: một trình soạn thảo văn bản (ví dụ: Notepad++, VS code, Sublime Text)

– Sử dụng git config --list để kiểm tra, đảm bảo các thông tin đã cấu hình là chính xác

– Dùng File Explorer (Windows Explorer) để mở trực tiếp tập tin cấu hình

2.3       Tạo kho chứa


Trong thuật ngữ của Git, kho chứa (repository hay viết tắt là repo) là thư mục .git hay .git directory, trong đó chứa cơ sở dữ liệu của Git. Khi tạo một kho chứa trên máy cục bộ, Git thường tạo luôn ba thành phần (khu vực): working directory, staging area và .git directory.

Có hai loại kho chứa: kho chứa cục bộ (local repository) và kho chứa ở xa (remote repository).

– Kho chứa cục bộ: là kho chứa nằm trên chính máy tính của lập trình viên

– Kho chứa ở xa: là kho chứa nằm trên máy server chuyên dụng. Ví dụ, các kho chứa trên các server của Github, Gitlab, Bitbucket.

Có hai cách để tạo kho chứa: một là tạo kho chứa từ một thư mục trên máy cục bộ và hai là sao chép (clone) kho chứa từ server về.

Tạo kho chứa từ một thư mục trên máy cục bộ

Trên máy cục bộ, cần có sẵn một thư mục (thư mục trống hoặc đã có thư mục con/tập tin đều được), chuột phải vào thư mục chọn Git Bash Here hoặc mở chương trình dòng lệnh (ví dụ: Git Bash, Command Prompt hoặc PowerShell), dùng lệnh cd (là viết tắt của change directory) để di chuyển vào thư mục muốn tạo kho chứa.

Thư mục mặc định khi chạy chương trình Git Bash là C:\Users\tentaikhoan, trong Git Bash, thư mục này được kí hiệu là ~. Ví dụ: Maxsys@DESKTOP-7LPDOL6 MINGW64 ~

Có thể dùng lệnh ls hoặc dir để xem các tập tin và thư mục con của thư mục hiện tại.

Ví dụ: giả sử thư mục có sẵn là D:\myprojectmuốn tạo kho chứa từ thư mục myproject, cần di chuyển vào thư mục myproject.

$ cd d:/myproject

hoặc

$ cd d:\myproject

Đường dẫn thư mục hiện thời là: Maxsys@DESKTOP-7LPDOL6 MINGW64 /d/myproject

Và gõ lệnh,

$ git init

Lệnh này sẽ tạo kho chứa, là một thư mục ẩn có tên .git nằm trong thư mục myproject, thư mục này chứa các tập tin thiết yếu, quan trọng để vận hành kho chứa (là bộ khung vận hành kho chứa).
Mở D:\myproject\.git để xem nội dung của thư mục .git. Vì .git là thư mục ẩn nên để nhìn thấy tập tin này cần vào mục View của File Explorer, đánh dấu chọn vào mục Hidden items.

Nếu tạo kho chứa thành công, cửa sổ dòng lệnh sẽ xuất thông báo sau:

Initialized empty Git repository in D:/myproject/.git/
Maxsys@DESKTOP-7LPDOL6 MINGW64 /d/myproject (master)

Chữ master là tên nhánh (branch) hiện tại, sẽ tìm hiểu sau.

Tới thời điểm này Git vẫn chưa theo dõi (track) bất kì tập tin nào trong dự án. Tuy nhiên, bạn đã có thể sử dụng Git để theo dõi các tập tin và thực hiện commit (lưu phiên bản) lần đầu. Để theo dõi các tập tin sử dụng lệnh git add, để commit sử dụng lệnh git commit.

Nếu thư mục myproject chưa có tập tin, bạn cần tạo tập tin (ví dụ: tailieu.txt) trong working directory (working directory là thư mục myproject, không tính thư mục .git), sau đó sử dụng lệnh git status để xem trạng thái của thư mục myproject.

$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        tailieu.txt
nothing added to commit but untracked files present (use "git add" to track)
// thông báo trên cho biết, thư mục myproject đang có tập tin tailieu.txt chưa được Git theo dõi

Thực hiện theo dõi tập tin tailieu.txt,

$ git add tailieu.txt

Xem trạng thái thư mục myproject,

$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   tailieu.txt
// thông báo trên cho biết, tập tin tailieu.txt đã được Git theo dõi và sẵn sàng để commit

Thực hiện commit đầu tiên (initial commit),

$ git commit -m 'Phiên bản đầu tiên của dự án'
[master (root-commit) 4fec01c] Phiên bản đầu tiên của dự án
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tailieu.txt

Sao chép một kho chứa từ server

Cách thứ hai để có một kho chứa là sao chép kho chứa từ server về. Ví dụ, trên các Git server (Github chẳng hạn) đang có kho chứa của một dự án, và bạn muốn sao chép kho chứa đó về máy của mình.

Lệnh để sao chép là git clone, với lệnh này, Git sẽ chép gần như toàn bộ nội dung của kho chứa từ Git server về máy cục bộ. Khi đó, nếu kho chứa trên Git server bị mất, có thể sử dụng kho chứa trên máy cục bộ để phục hồi lại dữ liệu cho Git server với trạng thái giống với khi được sao chép về máy cục bộ.

Cú pháp của lệnh git clone:

git clone [url]

Trong đó, url chính là địa chỉ của kho chứa trên Git server.

Ví dụ, muốn sao chép kho chứa có tên langbiang trên Github về máy cục bộ, thì sử dụng lệnh sau (lưu ý phải có kết nối Internet) :

git clone https://github.com/legiacong/langbiang.git

Màn hình kết quả (trong Git Bash nhớ chuyển về ổ đĩa D:\ để dễ theo dõi kho chứa kết quả, vì kho chứa sẽ được chép từ Git server về đây):

Maxsys@DESKTOP-7LPDOL6 MINGW64 /d

$ git clone https://github.com/legiacong/langbiang.git
Cloning into 'langbiang'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

Mở ổ đĩa D:\ sẽ thấy thư mục langbiang, đây là working directory (không tính thư mục .git) nó được sinh ra từ kho chứa (thư mục .git). Kho chứa nằm trong thư mục langbiang. Staging area nằm trong thư mục .git. Vậy là bạn đã sẵn sàng để làm việc trên kho chứa này.

Nếu muốn chép kho chứa từ Git server về máy cục bộ với một tên mới, sử dụng cú pháp sau (tên mới được đặt ở cuối lệnh):

git clone https://github.com/legiacong/langbiang.git  newlangbiang

Màn hình kết quả,

$ git clone https://github.com/legiacong/langbiang.git newlangbiang

Cloning into 'newlangbiang'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

Mở ổ đĩa D:\ để xem kết quả.

Ngoài việc sử dụng giao thức HTTPS để sao chép kho chứa (như ví dụ trên), còn có thể sử dụng giao thức SSH.

Đọc bài viết sau (tiếng Anh):


Nếu không dùng lệnh clone mà thực hiện copy kho chứa giữa các máy cục bộ thì sao?


[Cloning a repository gives you a copy of that repository and configures the original repository as a remote.

Copying a repository just gives you a copy of that repository. (Though you can of course just add the remote definition afterwards via git remote add.)

Copying a repository copies its .git/config file, and thus its remotes. Cloning a repository does not copy the config file, and thus the remotes are not shared. (The repository that was cloned from is set as the origin remote in the resulting clone.)]

[Clone sẽ bao gồm cả copy kho chứa và thiết lập một liên kết tới kho chứa ở xa, trong khi copy thì chỉ lấy về được kho chứa mà không tự động thiết lập liên kết tới kho chứa ở xa (tất nhiên có thể làm việc này bằng tay)

Copy cắt đứt mối liên hệ với bản được copy, clone vẫn xem bản được clone là bản gốc và vẫn duy trì mối liên hệ - xem thêm phần push/pull]

Lab 3. Tạo kho chứa.

– Tạo một kho chứa trên máy cục bộ, trong kho chứa tạo tập tin và thực hiện commit


– Sao chép một kho chứa bất kì từ Github hoặc Gitlab về máy cục bộ 

</////02
-----------
Cập nhật [26/02/2020]
-----------
Xem thêm: Tổng hợp các bài viết về Làm web
Xem thêm: Làm web (04) - Git: thao tác với kho chứa

Git (01): Tổng quan

1         Tổng quan

1.1       Hệ thống quản lý phiên bản


Định nghĩa về quản lý phiên bản

Phiên bản (version) là các bản khác nhau của một hoặc nhiều tập tin, thư mục hay cả dự án (từ đây gọi chung là tập tin để tiện trình bày). Trong quá trình làm việc, nội dung của tập tin luôn thay đổi, vì vậy nhu cầu xem lại hoặc khôi phục lại trạng thái của tập tin tại một thời điểm nào đó trong quá khứ rất cần thiết. Hệ thống quản lý phiên bản (Version Control System – VCS) sẽ giúp làm được điều này. 

Hệ thống quản lý phiên bản bao gồm phần mềm và cách thức làm việc đi kèm với nó.

Một vài chức năng chính của hệ thống quản lý phiên bản:

– Khôi phục lại trạng thái của một tập tin ở các thời điểm khác nhau trong quá khứ

– Biết được ai đã thực hiện các thay đổi trên tập tin, và đã thay đổi những gì

– Dễ dàng khôi phục lại các nội dung hoặc tập tin bị xóa  

– Dễ dàng so sánh những thay đổi của tập tin theo các mốc thời gian

Dựa trên cách tổ chức và hoạt động, các hệ thống quản lý phiên bản được chia thành ba loại, gồm: hệ thống cục bộ, hệ thống tập trung và hệ thống phân tán.

Hệ thống quản lý phiên bản cục bộ

Đây là cách làm thủ công, đơn giản, không nhất thiết phải dùng tới phần mềm. Nó đơn giản chỉ là việc người dùng tự lưu trữ các tập tin ở các thời điểm khác nhau trong quá trình làm việc thành các tên khác nhau. Để tiện theo dõi, người dùng có thể đặt tên tập tin bao gồm thời gian, cộng với một vài từ khóa nhận diện. Ví dụ: logo_2020_02_20_xanh.gif, logo_2020_02_21_do.gif.

Với hệ thống này, người dùng rất khó để quản lý khi số lượng tập tin nhiều, liên tục thay đổi theo thời gian. Để hỗ trợ, các lập trình viên đã tạo ra các công cụ giúp quản lý các thay đổi, dùng cơ sở dữ liệu cục bộ để lưu trữ và quản lý các thay đổi.

Công cụ phổ biến được dùng để quản lý phiên bản cục bộ là RCS. Tìm hiểu thêm về RCS tại đây: https://www.gnu.org/software/rcs/

Hệ thống quản lý phiên bản cục bộ có thể lưu mỗi phiên bản trong một thư mục, sử dụng cơ sở dữ liệu để quản lý thông tin các thư mục. Tuy nhiên, hệ thống này không hỗ trợ làm việc trên môi trường cộng tác nhiều người. Xem hình minh họa [2],




Hệ thống quản lý phiên bản tập trung

Với hệ thống quản lý phiên bản cục bộ, các thành viên trong nhóm rất khó chia sẻ và cộng tác trong quá trình làm việc. Hệ thống quản lý phiên bản tập trung sẽ giải quyết được vấn đề này.


Hệ thống quản lý phiên bản tập trung (Centralized Version Control Systems – CVCS) gồm máy chủ chứa các phiên bản của tập tin và danh sách các máy khách được phép thay đổi các tập tin trên máy chủ. Các máy khách sẽ lấy các phiên bản của tập tin từ máy chủ về, thực hiện các thay đổi trên tập tin và cập nhật lại các thay đổi về máy chủ.
Xem hình minh họa,



Một số hệ thống quản lý phiên bản tập trung: CVS, Subversion (SVN), Perforce.

Hạn chế của hệ thống quản lý phiên bản tập trung là nếu máy chủ bị trục trặc sẽ dẫn tới gián đoạn việc cập nhật phiên bản của các thành viên, hoặc bị mất toàn bộ các phiên bản của tập tin trên server.

Hệ thống quản lý phiên bản phân tán

Hệ thống quản lý phiên bản phân tán giúp khắc phục hạn chế của hệ thống quản lý phiên bản tập trung.

Với hệ thống quản lý phiên bản phân tán, các máy client không chỉ chép phiên bản mới nhất của các tập tin từ server về, mà nó còn chép toàn bộ cả kho chứa (repository, repo), trong đó bao gồm cả lịch sử các phiên bản. Do vậy, nếu máy chủ gặp trục trặc thì vẫn có thể lấy bất kì kho chứa tại các máy client để khôi phục lại toàn bộ kho chứa cho máy server. Ví dụ các hệ thống quản lý phiên bản phân tán: Git, Mercurial, Bazaar, Darcs.


Xem hình minh họa,


Ngoài ra, hệ thống này cũng cho phép một máy client có thể liên kết với nhiều kho chứa ở xa cùng lúc, do vậy bạn có thể cùng lúc cộng tác với nhiều nhóm làm việc khác nhau.  

1.2       Lịch sử sơ lược về Git


Từ năm 2002, Linux sử dụng một hệ thống quản lý phiên bản phân tán (Distributed Version Control System - DVCS) có tên là BitKeeper

Năm 2005 hợp đồng với BitKeeper chấm dứt, cộng đồng Linux không tiếp tục sử dụng BitKeeper nữa mà tự xây dựng một DVCS mới, dựa trên các đặc điểm học được từ hệ thống BitKeeper.
DVCS mới cần đáp ứng được các yêu cầu sau:

– Xử lý nhanh

– Thiết kế đơn giản

– Hỗ trợ tốt cho "phát triển phi tuyến tính" (non-linear development), cho phép quản lý hàng ngàn nhánh song song

– Phân tán toàn diện

– Có khả năng xử lý các dự án phức tạp, với tốc độ cao và khối lượng dữ liệu lớn (giống như nhân Linux)


Trong năm 2005 Git đã ra đời, đáp ứng được các yêu cầu đặt ra và nhanh chóng được sử dụng rộng rãi.

1.3        Nguyên tắc làm việc của Git


Để sử dụng Git hiệu quả, cần biết và hiểu một số nguyên tắc làm việc của nó.

“Chụp ảnh”

Một cách rất tự nhiên, khi bạn cần lưu trữ các phiên bản khác nhau của mỗi tập tin bạn sẽ làm như thế nào? Như trong phần “quản lý phiên bản cục bộ” đã đề cập: khi một tập tin có thay đổi và cần lưu thành một phiên bản khác, bạn sẽ lưu nó thành một tập tin mới với tên mới. Nghĩa là tập tin mới có thay đổi delta nào đó so với tập tin ban đầu. Để tối ưu việc lưu trữ, thực tế chỉ cần lưu tập tin gốc, cộng thêm thông tin của mỗi lần thay đổi (delta). Khi đó, thông tin một phiên bản của dự án sẽ gồm các tập tin gốc, cùng với các thay đổi của từng tập tin. Đây chính là cách tiếp cận của đa số các hệ thống quản lý phiên bản, như: CVS, Subversion (SVN), Perforce, Bazaar.


Xem hình minh họa,




Với Git thì khác, để lưu lại một phiên bản của dự án, Git sẽ chụp ảnh (snapshot) toàn bộ các tập tin của dự án. Tập tin nào có thay đổi thì “chụp” (tạo ra một ảnh mới cho tập tin), tập tin nào không thay đổi thì không “chụp”, mà chỉ tạo một liên kết, trỏ về phiên bản trước của nó.

Xem hình minh họa,



Có thể thấy, dữ liệu của Git gồm một loạt các “ảnh chụp” của hệ thống tập tin đơn giản (miniature filesystem). Mỗi “ảnh chụp” là một phiên bản của dự án, tương đương với một “commit” trong hệ thống Git.

Phần lớn các thao tác với Git được thực hiện trên máy cục bộ

Khi làm việc với Git, hầu hết các thông tin và tài nguyên đều có sẵn trên máy cục bộ, do vậy bạn không phải kết nối tới server ở xa.

Ví dụ, nếu bạn muốn xem lại thông tin hoặc nội dung các phiên bản trước của dự án, thì bạn chỉ việc xem trong cơ sở dữ liệu của Git tại máy cục bộ. Hoặc nếu bạn muốn lưu lại phiên bản hiện thời của dự án (commit), bạn cũng thực hiện trên máy cục bộ. Chỉ khi nào bạn muốn chia sẻ phiên bản mới cho thành viên khác thì mới cần tới mạng để tải phiên bản mới lên server (push).

Git đảm bảo tính toàn vẹn

Mọi thứ trong Git (ví dụ tập tin) đều được tạo mã kiểm tra (checksum) trước khi lưu vào cơ sở dữ liệu Git. Git tạo ra mã kiểm tra bằng cách chạy một thuật toán (SHA-1) dựa vào nội dung của tập tin.
Kết quả của thuật toán SHA-1 sẽ tạo ra một số hexa, tạm gọi là mã SHA-1, có chiều dài 40 kí số. Ví dụ, một mã SHA-1: 24b9da6552252987aa493b52f8696cd6d3b00373

Git dùng mã SHA-1 của tập tin để đặt tên mới cho nó và thao tác với tên mới này chứ không không quan tâm đến tên thật của tập tin.

Giả sử bằng cách nào đó, nội dung của một tập tin bị thay đổi, khi Git mở tập tin, nó sẽ tính lại mã SHA-1, so với mã SHA-1 đã được lưu trước đây, nếu hai mã này không khớp, Git sẽ phát hiện ra là nội dung của tập tin đã bị thay đổi.

Như vậy không thể có tình trạng nội dung của tập tin bị thay đổi mà Git không biết, cơ chế này đảm bảo dữ liệu do Git quản lý luôn có tính toàn vẹn.

Git chỉ “thêm” dữ liệu

Trong quá trình làm việc với Git, hầu như mọi thao tác đều được Git ghi vào cơ sở dữ liệu. Bạn có thể bị mất hoặc bị xáo trộn thông tin nếu chưa lưu phiên bản (commit), nếu bạn đã lưu phiên bản thì rất khó bị mất dữ liệu, đặc biệt nếu bạn thường xuyên đẩy cơ sở dữ liệu Git lên server (push) hoặc tới kho chứa khác.

Cách làm việc theo kiểu luôn “thêm” dữ liệu (không xóa) tạo ra cảm giác yên tâm cho người sử dụng.

Ba trạng thái quan trọng của tập tin

Khi một tập tin (thư mục) đã được Git quản lý, nó có thể ở các trạng thái sau: modified, staged, committed.

– modified: tập tin đã bị thay đổi (nội dung hoặc tên), nhưng chưa lưu phiên bản (commit) vào cơ sở dữ liệu Git trên máy cục bộ (hay .git directory, repository, repo)

– staged: tập tin đã bị thay đổi, đã được đánh dấu là sẽ lưu phiên bản vào cơ sở dữ liệu Git trên máy cục bộ

– committed: là tập tin đã bị thay đổi, đã được đánh dấu và đã được lưu phiên bản trong cơ sở dữ liệu Git trên máy cục bộ

Ba trạng thái trên tạo ra ba vùng làm việc của một dự án đã được Git quản lý (thư mục đã được nhúng Git vào bên trong): gồm working tree (hay working directory), staging area và .git directory.

– working directory: thư mục làm việc hiện thời, là bản sao một phiên bản của dự án, nó được lấy ra từ cơ sở dữ liệu Git (.git directory). Đây là thư mục làm việc của lập trình viên, thao tác trên nó như một thư mục bình thường.

– staging area: khu vực tổ chức, là một tập tin (index) nằm trong thư mục .git, chứa thông tin về những gì sẽ được lưu phiên bản (commit) trong lần tới.

– .git directory: thư mục .git, là nơi Git lưu trữ “siêu dữ kiện” (metadata), và cơ sở dữ liệu của Git (không phải cơ sở dữ liệu của ứng dụng đang được phát triển). Đây là phần quan trọng nhất của Git, nó là thành phần được sao lưu (copy) về khi bạn nhân bản một kho chứa từ máy khác (clone).


Xem hình minh họa,



Về cơ bản, tiến trình công việc (workflow) khi thao tác với Git gồm:

– Bạn thao tác (tạo mới, thêm dữ liệu, sửa, xóa) với tập tin/thư mục trong working directory

– Đưa vào staging area các tập tin/thư mục mà bạn muốn lưu trữ vào .git directory (những thứ sẽ được lưu phiên bản, sẽ được commit)

– Tạo phiên bản cho các nội dung đã có trong staging area, cụ thể là thực hiện lệnh commit. Các tập tin/thư mục đã được đánh dấu trong staging area sẽ được lưu trữ an toàn vào .git directory

Một tập tin nằm trong .git directory được xem là đã được committed. Nếu tập tin đã bị thay đổi và đã được đưa vào staging area được xem là staged. Và nếu một tập tin đã bị thay đổi tính từ thời điểm được sinh ra từ .git directory (check out) và chưa đưa vào staging area thì được xem là modified.


Đọc thêm “The biggest misconception about Git”: https://medium.com/@gohberg/the-biggest-misconception-about-git-b2f87d97ed52

1.4       Dùng Git ở chế độ dòng lệnh


Tại sao nên học/dùng Git ở chế độ dòng lệnh (command line)?

Để sử dụng Git có rất nhiều cách, có thể chỉ cần dùng chương trình dòng lệnh hoặc có thể dùng các chương trình có giao diện đồ họa (GUI).

Tuy nhiên, chỉ có chương trình dòng lệnh mới có thể chạy tất cả các lệnh của Git, ngược lại các chương trình đồ họa chỉ bao gồm các lệnh phổ biến của Git.

Một người biết sử dụng Git ở chế độ dòng lệnh rất dễ dàng sử dụng Git ở chế độ đồ họa, điều ngược lại không phải khi nào cũng đúng.

Giao diện GUI thì có nhiều loại, tùy sở thích, mỗi người dùng sẽ cài những phần mềm GUI khác nhau, muốn sử dụng được phải có thời gian làm quen. Tuy nhiên, giao diện dòng lệnh chỉ có một kiểu và máy nào cũng có, rất dễ sử dụng.

Một số chương trình dòng lệnh: Terminal của macOS, Command Prompt hoặc PowerShell của Windows, hoặc Git bash của Git.

Một số chương trình GUI: Github Desktop, SourceTree, GitKraken, SmartGit, Git Cola, GitForce, Giggle, Magit, Egit, Gitg[1].

-----
[2] https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
-----------
Cập nhật [25/02/2020]
-----------
Xem thêm: Git (02): Cài đặt và cấu hình Git
-----
Bạn muốn tự học HTML bài bản? Xem thêm

Nhập môn CNTT (4) - Soạn thảo văn bản


Bài trước: Nhập môn CNTT (3) - Hệ điều hành
---

5         Microsoft Word


5.1       Nội dung học


Xem clip sau (từ thời điểm 1h:02):


Đọc slide bài giảng:


và,


Đọc giáo trình (từ trang 84 đến trang 113):


Một số nội dung chính cần tập trung:

Giới thiệu về MS Word

– Chức năng của Word: soạn thảo văn bản, bảng biểu, biểu đồ, vẽ các hình minh họa

– Các phiên bản: trước 2007 (XP, 2003), sau 2007 (2010, 2013)

Các thành phần trong MS Word

– Trình đơn, thanh công cụ, thanh cuộn, thước

Một số thao tác cơ bản khi soạn thảo văn bản

Phím Enter để tạo đoạn

– Quy định về khoảng trắng giữa các kí tự, cách đánh dấu câu, dấu ngoặc, dấu nháy

– hàm =rand(số đoạn, số câu trong mỗi đoạn) để sinh văn bản ngẫu nhiên, Enter để thực thi

– Sử dụng việc hiển thị/ẩn các kí tự định dạng

– Nhập văn bản ở dạng thô, sau đó định dạng

– Enter để ngắt đoạn, Shift + enter ngắt câu trong đoạn (liên quan đến định dạng khoảng cách giữa các dòng)

– Undo (Ctrl + Z), redo (Ctrl + Y)

– Các phím di chuyển trên văn bản, xóa một kí tự trước, sau dấu nháy chuột

– Chọn khối văn bản

– Nhấp chuột ba lần để chọn khối

– Copy vào bộ đệm, dán nhiều lần

Gõ tiếng Việt

Phân biệt các khái niệm: bảng mã (unicode, VNI-Windows, TCVN3), kiểu chữ (font) (Time New Roman, VNI-, .vn). Chọn bảng mã và phông chữ cho phù hợp.

Kiểu gõ: Telex, Vni

Unikey, Vietkey

Định dạng văn bản

Xem clip:


– Định dạng ký tự: font, chèn symbol, change case, drop cap,

– Định dạng đoạn: paragraph, lề, tab

Xem clip:


– Định dạng trang in: lề trang in, chiều giấy in, khổ giấy, chọn máy in

– Sao chép định dạng: Ctrl + Shift + C, Ctrl + Shift + V

– Kẻ khung viền và tô màu cho đoạn: borders and shading

Xem clip (bỏ qua 30 phút đầu tiên):


– Đánh dấu danh sách: đánh dấu bằng số (có thứ tự), đánh dấu bằng kí hiệu (không có thứ tự)

– Tạo ngắt trang, đánh số trang

– Tạo tiêu đề đầu/cuối trang

– Định dạng văn bản theo cột

Xem clip:


– Bảng biểu

– Tạo đối tượng đồ họa

Xem clip:


– Vẽ hình tròn, vuông (Ctrl hoặc Shift + chuột)

– Chức năng align các đối tượng đồ họa

– Shadow

– Text wrapping cho hình ảnh (layout)

– Chữ nghệ thuật (word art)

– Sửa bài tập về bảng biểu


5.2       Thực hành


Làm các bài thực hành từ Lab02 (trang 8) đến Lab04 (trang 31).


5.3       Câu hỏi ôn tập


1. Trong Microsoft Word, để viết theo kiểu chỉ số trên (Ví dụ: x2) thì sử dụng tổ hợp phím nào?

A. Ctrl + Alt + =

B. Ctrl + Shift + [

C. Alt + Ctrl + =

D. Ctrl + Shift + =

2. Trong Microsoft Word, để viết theo kiểu chỉ số dưới (Ví dụ: x2) thì sử dụng tổ hợp phím nào?

A. Ctrl + Alt + =

B. Shift + =

C. Ctrl + =

D. Ctrl + Shift + =

3. Trong Microsoft Word, để chuyển từ kiểu viết chỉ số dưới (Ví dụ: x2) về chế độ bình thường thì sử dụng tổ hợp phím nào?

A. Ctrl + =

B. Shift + =

C. Ctrl + Shift + =

D. Ctrl + Space bar

4. Trong Microsoft Word, để tăng kích thước của font, chọn tổ hợp phím nào?

A. Ctrl + [

B. Shift + [

C. Ctrl + ]

D. Ctrl + Shift + [

5. Trong Microsoft Word, để giảm kích thước của font, chọn tổ hợp phím nào?

A. Ctrl + [

B. Shift + [

C. Ctrl + ]

D. Ctrl + Shift + [

5. Trong Microsoft Word, để copy một đoạn văn bản đang chọn vào clipboard, sử dụng tổ hợp phím nào?

A. Ctrl + X

B. Shift + X

C. Ctrl + C

D. Ctrl + Shift + C

6. Trong Microsoft Word, để cắt (cut) một đoạn văn bản đang chọn vào clipboard, sử dụng tổ hợp phím nào?

A. Ctrl + X

B. Ctrl + V

C. Ctrl + C

D. Ctrl + Shift + X

7. Trong Microsoft Word, để dán (paste) một đoạn văn bản từ clipboard vào tài liệu, sử dụng tổ hợp phím nào?

A. Ctrl + X

B. Ctrl + V

C. Ctrl + C

D. Ctrl + Shift + X

8. Trong Microsoft Word, để hủy bỏ một thao tác vừa thực hiện, sử dụng tổ hợp phím nào?

A. Ctrl + K

B. Ctrl + Z

C. Alt + Z

D. Ctrl + X

9. Trong Microsoft Word, để định dạng in nghiêng (italic) một đoạn văn bản, sử dụng tổ hợp phím nào?

A. Ctrl + I

B. Ctrl + U

C. Alt + I

D. Ctrl + Shift + I

10. Trong Microsoft Word, để định dạng in đậm (bold) một đoạn văn bản, sử dụng tổ hợp phím nào?

A. Ctrl + I

B. Ctrl + U

C. Alt + B

D. Ctrl + B

11. Định nghĩa về đoạn (paragraph) nào sau đây là đúng?

A. Nằm trên nhiều dòng

B. Được kết thúc bằng phím Shift + Enter

C. Nằm trên cùng một dòng

D. Được kết thúc bằng phím Enter

/// Hết buổi 4&5

-----
Cập nhật 17/2/2019
-----
Đọc thêm:
- Nhập môn CNTT (5) - Bảng tính Excel
Danh sách các bài học