Làm web (09) - Git: thao tác với remote repo (tt)

Bài học trước: Làm web (08) - Git: thêm remote repo
-----

3.5.6     Truy cập và kéo dữ liệu về


Sau khi thực hiện gắn local repo với remote repo, bạn có thể truy cập tới remote repo để thực hiện các thao tác liên quan đến remote repo.

Để truy cập và kéo dữ liệu về, sử dụng lệnh sau,

$ git fetch [remote name]

Lệnh trên sẽ truy cập vào remote repo, thực hiện so sánh local repo và remote repo, lấy về các dữ liệu trên remote repo có mà local repo chưa có. Sau lệnh này, bạn đã có các tham chiếu tới toàn bộ các nhánh của remote repo, từ đó bạn có thể thực hiện tích hợp và kiểm tra khi cần thiết.

Nếu local repo được tạo ra bằng cách clone từ remote repo, thì Git đã ngầm gắn hai repo với nhau, khi đó tên rút gọn của remote repo sẽ là origin. Nghĩa là bạn không cần phải thực hiện lệnh $ git remote add mà có thể truy cập luôn tới remote repo và thực hiện các thao tác khác. Ví dụ, sau khi clone về, lên remote repo thêm thông tin gì đó, rồi commit, và thực hiện lệnh sau:

$ git fetch origin
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/legiacong/langbiang
   c2aa729..a89362e  master     -> origin/master

Lưu ý: lệnh $ git fetch chỉ kéo dữ liệu từ remote repo về nhưng không tích hợp dữ liệu đó vào local repo. Bạn phải thực hiện lệnh tích hợp (merge) thủ công.

Nếu trên local repo đã được thiết lập một nhánh để theo dõi những thay đổi từ một nhánh ở xa thì bạn có thể sử dụng lệnh $ git pull để truy cập vào nhánh ở xa, lấy về dữ liệu và tự động tích hợp vào nhánh local tương ứng. Lệnh clone đã tự động gắn nhánh master của local repo (local master branch) với nhánh master của remote repo (remote master branch).

Thông thường, khi chạy lệnh $ git pull, Git sẽ lấy dữ liệu từ remote repo mà bạn đã clone về và tích hợp vào kho chứa hiện thời, nơi mà bạn đang làm việc. Ví dụ,

Maxsys@DESKTOP-7LPDOL6 MINGW64 /e/langbiang (master)
$ git pull
Updating c2aa729..a89362e
Fast-forward
 testdesktop.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

3.5.7     Đẩy lên remote repo


Sau khi bạn thực hiện clone một remote repo từ server về máy, lập trình xong một chức năng, thực hiện commit tại máy local, giờ muốn gửi kết quả đó về server để chia sẻ với các thành viên khác trong nhóm, bạn sẽ thực hiện việc này bằng lệnh sau,

$ git push [tên máy chủ] [tên nhánh]

Ví dụ, lệnh sau sẽ đẩy nhánh master của local repo lên nhánh master của remote repo (server có tên ngắn gọn là origin),

$ git push origin master

Đọc thêm về push tại đây: https://git-scm.com/docs/git-push

[git push origin master

Find a ref that matches master in the source repository (most likely, it would find refs/heads/master), and update the same ref (e.g. refs/heads/master) in origin repository with it. If master did not exist remotely, it would be created.]

Lưu ý: lệnh này sẽ không làm việc nếu bạn thực hiện clone từ một remote repo mà bạn không có quyền ghi (write), hoặc đã có một ai khác thực hiện lệnh push dữ liệu lên remote repo tính từ thời điểm bạn clone về máy.

Nếu bạn và một thành viên khác thực hiện clone về cùng lúc, nhưng thành viên kia đã push lên trước bạn, thì bạn phải thực hiện pull kho chứa ở xa về, merge vào local repo, rồi mới được phép đẩy lên. Điều này để đảm bảo tính đồng nhất thông tin.

3.5.8     Xem thông tin remote repo


Để xem thêm các thông tin của remote repo, sử dụng lệnh sau,

$ git remote show [remote repo]

Ví dụ sau sẽ xem thông tin của remote repo có tên là origin,

Maxsys@DESKTOP-7LPDOL6 MINGW64 /e/langbiang (master)
$ git remote show origin
* remote origin
  Fetch URL: https://github.com/legiacong/langbiang.git
  Push  URL: https://github.com/legiacong/langbiang.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Lệnh $ git remote show [remote repo] hiển thị một số thông tin sau:

– URL của remote repo. Ví dụ, Fetch URL: https://github.com/legiacong/langbiang.git; Push  URL: https://github.com/legiacong/langbiang.git

– Các nhánh (branch) đang được theo dõi (tracked). Ví dụ: master tracked

– Nếu bạn đang ở nhánh master (trên local repo), bạn chạy lệnh git pull, Git sẽ tự động trộn (merge) nhánh master trên remote repo vào nhánh master trên local repo (master merges with remote master)

– Hiển thị các nhánh mà local repo đã kéo về từ remote repo

– Cho biết các nhánh sẽ được push khi bạn chạy lệnh git push. Ví dụ master pushes to master

– Các nhánh ở remote repo có mà local repo chưa có

– Các nhánh mà bạn có, nhưng đã bị gỡ bỏ trên remote repo

– Danh sách các nhánh local và remote sẽ được tự động trộn với nhau khi chạy lệnh $ git pull

Ví dụ,

$ git remote show origin
* remote origin
  URL: https://github.com/my-org/complex-project
  Fetch URL: https://github.com/my-org/complex-project
  Push  URL: https://github.com/my-org/complex-project
  HEAD branch: master
  Remote branches:
    master                           tracked
    dev-branch                       tracked
    markdown-strip                   tracked
    issue-43                         new (next fetch will store in remotes/origin)
    issue-45                         new (next fetch will store in remotes/origin)
    refs/remotes/origin/issue-11     stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    dev-branch merges with remote dev-branch
    master     merges with remote master
  Local refs configured for 'git push':
    dev-branch                     pushes to dev-branch                     (up to date)
    markdown-strip                 pushes to markdown-strip                 (up to date)
    master                         pushes to master                         (up to date)

3.5.9     Đổi tên và gỡ tham chiếu đến kho chứa ở xa


Để đổi tên (tên dạng rút gọn) một tham chiếu đến kho chứa ở xa, sử dụng lệnh sau,

$ git remote rename tencu tenmoi

Lệnh này cũng đồng thời thay đổi tên tham chiếu tới các nhánh tương ứng, ví dụ tên tham chiếu đang là tencu/master sẽ được đổi thành tenmoi/master.

Để gỡ bỏ một tham chiếu đến kho chứa ở xa (ví dụ thay đổi server, người đó không còn cộng tác trong dự án nữa), sử dụng lệnh,

$ git remote remove tenkhochua

hoặc,

$ git remote rm tenkhochua

Lệnh này cũng đồng thời gỡ bỏ tham chiếu tới các nhánh tương ứng.

Lab 25. Thực hiện một số thao tác liên quan đến kho chứa ở xa.

Yêu cầu:

– Làm nhóm ít nhất 2 người

– Ghi lại kết quả thực hiện của mỗi lệnh

– Tạo một kho chứa ở xa trên Github hoặc Gitlab.

– Một thành viên đẩy local repo lên remote repo

– Các thành viên còn lại clone về máy

– Mỗi thành viên tạo một tham chiếu tới kho chứa ở xa với tên là nvteo

– Mỗi thành viên thêm một tập tin mã nguồn vào local repo, thêm nội dung cho một tập tin có sẵn, commit, sau đó đẩy lên remote repo bằng tên origin

– Mỗi thành viên thêm một tập tin mã nguồn khác vào local repo, thêm nội dung cho một tập tin có sẵn, commit, sau đó đẩy lên remote repo bằng tên nvteo

– Mỗi thành viên lại kéo hết các tập tin mã nguồn của nhóm mình về local repo, xem lịch sử commit của các thành viên trong nhóm

– Mỗi thành viên đổi lại tên tham chiếu nvteo thành “họ tên” của mình


– Mỗi thành viên gỡ bỏ tham chiếu tới remote có tên là “họ tên” của mình
-----------
Cập nhật [08/10/2019]
-----------
Xem thêm: Tổng hợp các bài viết về Làm web
Xem thêm: Làm web (10) - Git: đánh dấu