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