Mục lục Git - GitHub

Remote Repository là gì?

Khi làm việc với Git nói riêng hay với các VCS nói chung thì hầu hết (>90%) các thao tác làm việc là ở local (ở máy client) với Local Repository ví dụ như các việc commit, xem lại lịch sử ...

Khi có nhu cầu chia sẻ, hoặc làm việc nhóm, hoặc đơn giản hơn làm việc ở nhiều máy (ở văn phòng, ở nhà ...) thì lúc đó sẽ sử dụng đến Remote Repository, nó đơn giản là một Repository lưu ở phía Server.

Git Server đơn giản là máy chủ có cài đặt dịch vụ Git, cho phép tạo ra các Repository, ví dụ GitHub chính là một máy chủ Git, có thể tạo ra một Repository trên nó thì đó là Remote Repository. Sau đó, ta có thể chép (clone) Remote Repository về máy thành Local Repository để làm việc và khi cần lại cập nhật lên Remote ..

Sử dụng GitHub là cách nhanh chóng để có được một Repository (miễn phí thì Repository ở chế độ public, có phí thì có thể thiết lập là private). GitHub sẽ trình bày ở phần sau, ở đây sẽ hướng dẫn tạo ra một Git Server riêng (không phải chạy nền Web Git).

Cài đặt để có Git Server

Để có được Git Server cần làm hai việc 1 Cài Git trên máy Server, 2 Cài đặt SSH cấu hình để user kết nối đến Server được bằng SSH (Có sử dụng SSH Key là tốt nhất).

1) Cài đặt Git trên Server

Để cài đặt làm đúng như hướng dẫn trong phần giới thiệu về Git

Trên Server Linux chạy lệnh

sudo apt install git-all

Trên Server Linux - CentOs chạy lệnh

sudo yum install git

Trên Windows Server tải phiên bản Git phù hợp tại Git Download về và chạy bộ cài đặt

Bằng cách trên đã cài đặt Git, ở giao diện dòng lệnh (Windows Server hoặc Linux Server) gõ lệnh sau để xem Git đã có chưa

git --version

2) Cài đặt OpenSSH trên Server

Vì sẽ cấu hình để có được các Remote Repository được clone và cập nhật (push, pull ...) thông qua giao thức SSH nên cần cài đặt nó. Để cài đặt làm theo hướng dẫn trong bài viết: OpenSSH trên Server Linux và Windows

Tóm lại sau bước này bạn cần có một user/pass để kết nối được đến Server bằng SSH (tốt nhất dùng SSH key thay cho password).

Chú ý: Khi làm việc với nhiều Server khác nhau chứa Remote Repository, trên Windows với mỗi user/server có thể thiết lập thông số riêng (cổng, file SSH Key ...) để kết nối SSH bằng cách khai báo trong file C:\Users\UserName\.ssh\config, ví dụ:

Host domain.com - username
  User username
  Hostname domain.com
  PreferredAuthentications publickey
  IdentityFile "C:\sshkey\id_rsa1"

Host  192.168.1.10 - username
	User Administrator
	Hostname  192.168.1.10
	Port 2222
	PreferredAuthentications publickey
	IdentityFile "C:\sshkey\id_rsa2"

Với cấu hình trên khi Git truy cập đến Server có địa chỉ domain.com với tên đăng nhập là username thì sẽ dùng cổng mặc định 22 và sử dụng SSH lưu tại C:\sshkey\id_rsa1

Truy cập đến Server có địa chỉ 192.168.1.10 với tên đăng nhập là username thì sẽ dùng cổng 2222 và sử dụng SSH lưu tại C:\sshkey\id_rsa2

Tạo Remote Repository

1 Chuẩn bị một tài khoản user của hệ thống Linux (Windows) dùng để tạo hệ thống Git, cho phép truy cập tới Server bằng SSH. Nếu muốn tạo user mới trên Linux CentOs, ví dụ user tên là gitusername làm như sau:

sudo adduser gitusername

Đặt password cho user

sudo passwd gitusername

Sau các lệnh này hệ thống đã có user với tên là gitusername và thư mục mặc định của user này là /home/gitusername/

2 Đăng nhập hệ thống với user muốn sử dụng, ví dụ trên Linux lệnh sau sẽ chuyển user là gitusername sau đó chuyển đến thư mục của user

su gitusername
cd ~

3 Tạo thư mục chứa Remote Repository, ví du thư mục đặt tên là myproject.git, sau đó di chuyển vào thư mục đó để thực hiện lệnh Git

mkdir myproject
cd myproject

4 Gọi lệnh Git để thiết lập thư mục myproject là nơi lưu trữ Remote Repository

git init --bare
#Initialized empty Git repository in /home/gitusername/myproject/

Sau lệnh đó đã có một Remote Repo, địa chỉ để chia sẻ, làm việc với Remote Repository này là

gitusername@domain.com:myproject.git #hoặc gitusername@IP:myproject.git

Bây giờ Remote Repository này đã sẵn sàng để các máy khách clone, cập nhật ...

Thiết lập để làm việc với Remote Repository

Ngay sau khi khởi tạo ra một Remote Repository với địa chỉ ví dụ gitusername@domain.com:myproject.git, thì việc đầu tiên từ một Local Repository cần kết nối tới nó và push dữ liệu đầu tiên

Từ Local Repository gõ lệnh kiểm tra xem nó đang ánh xạ đến Remote Repository nào

git remote

Nếu chưa thiết lập cho nó một Remote Repository với câu lệnh git remote add với cú pháp như sau:

git remote add name_remote addr_remote

Trong đó name_remote là một cái tên do bạn tự đặt ví dụ như: origin, abc, xyz ... addr_remote địa chỉ của Remote Repository. Ví dụ:

git remote add origin gitusername@domain.com:myproject.git

Sau lệnh đã thiết lập trong Local Repository có một Remote Repository có tên là origin với địa chỉ kết nối gitusername@domain.com:myproject.git. Gõ lại lệnh git remote -v để xem nó liệt kê ra.

Vì Remote Repository mới khởi tạo trên Server nên cập nhật cho nó dữ liệu đầu tiên bằng lệnh git push với tham số chỉ ra là tên Remote Repository (origin) và nhánh cập nhật (master - tìm hiểu về nhánh branch sau, ở đây chỉ cần biết luôn có 1 nhánh là master)

git push origin master

Từ đây chính thức Remote Repository bắt đầu hoạt động, từ Local Repository bạn có thể cập nhật lên (push), lấy dữ liệu về (pull, fetch) ... Hoặc từ một máy khác, hay lúc khác cần bản sao Remote Repository về máy để tạo ra một Local Repository thì dùng lệnh:

git clone gitusername@domain.com:myproject.git

Nó sẽ clone về máy và thiết lập luôn dự án tải về có Remote Repository với tên là origin

Một số lệnh cơ bản làm việc với Remote Repository

  • 1 git fetch Lấy dữ liệu mới từ Remote Repository, những loại dữ liệu này trên Local Repository là chưa có (ví dụ dữ liệu do người khác mới đưa lên). Lệnh này không làm ảnh hưởng đến các code đang có của dự án trên Local, nó chỉ lấy về nhưng thông tin file chưa có. Khi là việc ở Local bất kể lúc nào bạn đều có thể gọi git fetch với cú pháp

    git fetch origin

    origin là tên của remote, có thể thay bằng những tên bạn đặt trong local

  • 2 git pull Lấy toàn bộ dữ liệu mới theo Remote. Lệnh này gần như tải lại, cập nhật lại toàn bộ code hiện tại của Local sao cho giống Remote. Nếu local chưa commit và push code cũ có thể bị mất.

    git pull origin master

    master là tên nhánh

    Nói chung cần đảm bảo trạng thái ở Local là clean khi pull, nên cần commit trước hoặc bỏ tất cả các file untracked

    git clean  -d  -fx .
  • 3 git push cập nhật dữ liệu từ Local lên Remote, câu lệnh cần chỉ ra tên Remote và nhánh git push <remote> <branch>, ví dụ

    git push origin master
  • 4 git remote -v xem thông tin các Remote có trong Local

    git remote -v
  • 5 git remote add thêm Remote vào Local git remote add <remote_name> <url>, ví dụ

    git remote add origin gitusername@domain.com:myproject.git
  • 6 git remote show xem thông tin chi tiết về một Remote ví dụ với Remote có tên origin

    git remote show origin
  • 7 git remote rename đổi tên một Remote trong Local, ví dụ Remote có tên abc đổi thành xyz

    git remote rename abc xyz

Sự khác nhau của git fetchgit pull

Hai lệnh này đều lấy thông tin từ Remote cập nhật vào Local, tuy nhiên có sự khác nhau lớn như hình dưới:

Như sơ đồ trên thì ta thấy khi git fetch nó cập nhật thông tin từ Remote Repository vào Local Repository nhưng không ảnh hưởng đến các file code trong thư mục làm việc, còn khi git pull nó cập nhật cả thư mục làm việc của Local (thư mục chứa file code), có nghĩa các file code sẽ cập nhật theo Remote

Mục lục Git - GitHub