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ác Video: Sử dụng Git, GitHub
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ánhNó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ànhxyz
git remote rename abc xyz
Sự khác nhau của git fetch
và git 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