[Git] Sơ lược Remote Respository và Origin

23 Tháng Tư, 2015

Bài này thuộc phần 8 của 11 phần trong serie Git cơ bản

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.

Đổi tên remote

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.

Thêm một remote

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ề.

Sự khác nhau giữaclone, 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ì?

git clone

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.

git pull

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.

git fetch

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.

Các loại giao thức của Remote Repository

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.

Local 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/.

HTTP 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.

SSH Repository

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à [email protected]:/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.

Lời kết

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.