Quay trở lại bài tạo repository, mình có hướng dẫn bạn cách tạo một repository trên dịch vụ Github và Clone nó về máy. Như vậy, cái Github là một máy chủ repository từ xa nên mình sẽ gọi nó là Remote Repository, nghĩa là repository này không nằm trên máy tính của bạn.
Và ở phần đó, bạn có thấy mình kêu các bạn gửi dữ liệu lên repository bằng cách dùng lệnh git push origin master
sau khi commit không? Cái master
là tên branch mà mình sẽ không nói ở bài này, nhưng cái origin
trong đoạn đó chính là tên remote repository. Mặc định khi clone một repository thì nó tự đặt tên là origin
.
Để kiểm tra tên remote, bạn có thể gõ lệnh git remote -v
.
$ git remote -v origin https://github.com/onetidcblog/hoc-git.git (fetch) origin https://github.com/onetidcblog/hoc-git.git (push)
Trong đó bạn có thể thấy cái repository mình đã clone đều được đặt tên là origin
, và mỗi repository bạn có hai đều có hai hành động là fetch (lấy dữ liệu về từ server) và push (gửi dữ liệu lên server).
Nhìn lại đoạn lệnh git push origin master
ở trên, điều đó có nghĩa là bạn gửi tất cả các thay đổi trên mã nguồn ở máy bạn lên remote tên là origin
với branch master
.
Nếu bạn không thích tên origin
thì có thể đổi tên nó lại nó bằng tên khác cho dễ quản lý nếu như bạn có nhiều remote trong một dự án với lệnh git remote rename tên_cũ tên_mới
. Ví dụ mình cần đổi từ origin
sang thach
thì sẽ đổi như sau:
$ git remote rename origin thach $ git remote -v thach https://github.com/onetidcblog/hoc-git.git (fetch) thach https://github.com/onetidcblog/hoc-git.git (push)
Bây giờ khi commit hay push bạn có thể gõ git push thach master
để gửi mã nguồn lên remote repository này.
Trường hợp bạn cần thêm một cái remote để lấy dữ liệu khi cần thì có thể sử dụng lệnh git remote add tên_remote URL
. Ví dụ mình cần remote một repository và đặt tên nó là inuit thì sẽ viết như sau:
$ git remote add unuit https://github.com/onetidc92/inuit.css-web-template $ git remote -v thach https://github.com/onetidcblog/hoc-git (fetch) thach https://github.com/onetidcblog/hoc-git (push) inuit https://github.com/onetidc92/inuit.css-web-template (fetch) inuit https://github.com/onetidc92/inuit.css-web-template (push)
Sau đó nếu bạn muốn lấy dữ liệu từ cái inuit
kia về thì chỉ cần sử dụng lệnh git fetch inuit
.
$ git fetch inuit warning: no common commits remote: Counting objects: 94, done. remote: Total 94 (delta 0), reused 0 (delta 0), pack Unpacking objects: 100% (94/94), done. From https://github.com/onetidc92/inuit.css-web-te * [new branch] master -> inuit/master
Lưu ý là lệnh git fetch
nó chỉ lấy về và lưu vào database của Git trên máy chứ không được gộp vào repository của bạn. Để gộp vào bạn có thể gõ thêm lệnh git merge inuit
, trong đó inuit
là tên remote.
Còn nếu bạn muốn nó lấy về trực tiếp mà không cần gộp thì sử dụng lệnh git pull tên_remote
, tuy nhiên mình khuyến khích bạn nên gộp vào branch khi cần và nhớ cẩn thận trong việc gộp, tốt nhất nên tạo thư mục mới trong thư mục làm việc của bạn rồi vào đó mà lấy về.
clone
, fetch
và pull
Có thể bây giờ bạn đã biết được 3 lệnh để lấy dữ liệu về từ repository đó là git clone, git fetch và git pull. Nhưng cả ba loại đều là lấy dữ liệu, thế sự khác nhau của nó là gì?
Lệnh này sẽ sao chép toàn bộ dữ liệu trên repository và sao chép luôn các thiết lập về repository, tức là nó sẽ tự động tạo một master branch trên máy tính của bạn. Lệnh này chỉ nên sử dụng khi bạn cần tạo mới một Git mới trên máy tính với toàn bộ dữ liệu và thiết lập của một remote repository.
Lệnh này sẽ tự động lấy toàn bộ dữ liệu từ remote repository và gộp vào cái branch hiện tại bạn đang làm việc.
Lệnh này sẽ lấy toàn bộ dữ liệu từ remote repository nhưng sẽ cho phép bạn gộp thủ công vào một branch nào đó trên thư mục Git ở máy tính.
Tạm thời bạn nên hiểu thế, ở bài branch bạn sẽ hiểu sâu hơn.
Chúng ta không chỉ kết nối với một remote repository qua giao thức HTTP hay HTTPS mà còn có thể chọn nhiều giao thức khác, dưới đây là một vài giao thức remote repository.
Giao thức này nghĩa là bạn kết nối tới một repository nào đó trên chính máy tính của bạn và URL của giao thức sẽ có dạng /path/repository/
.
Giao thức thông dụng nhất cũng như dễ hiểu nhất, thường được sử dụng nếu bạn dùng các dịch vụ remote repository như Github hay Assembla, nó sẽ bao gồm định dạng http://domain.com/repository.git
hoặc https://domain.com/repository.git.
Giao thức này thường được dùng trên các nhu cầu tạo một server repository riêng và kết nối thông qua giao thức SSH. Đường dẫn của giao thức này sẽ có dạng là user@server:/path/repository.git
. Ở phần cuối serie mình sẽ hướng dẫn bạn cách tạo một repository server riêng và nó là lựa chọn rất tốt nếu bạn làm việc nhóm mà không cần phụ thuộc vào các dịch vụ như Github hay Assembla.
Trong bài này chắc bạn đã có thể thấy được Git linh hoạt như thế nào khi cho phép bạn lấy dữ liệu từ một remote repository hoặc nhiều repository khác nhau. Mặc khác, mình cũng muốn giải đáp cho các bạn có thắc mắc cái origin trên câu lệnh là gì vì trong các bài sau mình sẽ còn dùng khá nhiều câu lệnh có chứa origin trong đó nữa.