Tạo script file(*.bat) đơn giản giúp clone nhiều repo và xử lý nếu gặp thông báo lỗi “fatal: Authentication failed for…”

Trong bài viết này tôi sẽ tạo 1 script file giúp đỡ clone nhiều repository 1 lúc. Trên github của tôi hiện tại có 4 repository như bên dưới: Thông thường để clone từng repo về, chúng ta có thể dùng các công cụ hỗ trợ như “github desktop” – “source tree” – “tortoise” và

Trong bài viết này tôi sẽ tạo 1 script file giúp đỡ clone nhiều repository 1 lúc.

Trên github của tôi hiện tại có 4 repository như bên dưới:

image.png

Thông thường để clone từng repo về, chúng ta có thể dùng các công cụ hỗ trợ như “github desktop” – “source tree” – “tortoise” và phổ biến nhất là dùng lệnh nhưng đa phần sẽ cần clone từng repo, giả sử chúng ta có 1 project lớn dùng microservice có nghĩa là sẽ có nhiều repo(multiple services) cần được lấy xuống và nếu lấy từng cái một xuống thì sẽ thao tác nhiều hơn là chỉ cần 1 script file là có thể lấy hết tất cả repo về.

1. Các bước chuẩn bị:

  • Tạo folder chứa tất cả repo, ở đây tôi tạo folder name “DemoGitHub”:

image.png

  • Trong folder “DemoGitHub”, tôi dùng notepad++ và tạo 1 new file với định dạng “*.bat”

image.png

2. Nội dung script file:

@echo off
SET bn="main"
cd C:DemoGitHub
echo %bn%
rem ####Switch branch for ####
git clone https://github.com/{username}/repo1.git  -b %bn%
echo "git clone for repo1"

git clone https://github.com/{username}/repo2.git  -b %bn%
echo "git clone for repo2"

git clone https://github.com/{username}/repo3.git  -b %bn%
echo "git clone for repo3"

git clone https://github.com/{username}/repo4.git  -b %bn%
echo "git clone for repo4"

pause

Tôi sẽ giải thích 1 vài thông số trong script file:

  • SET bn=”main” -> thiết lập giá trị cho branch, nghĩa là chỉ định bạn sẽ clone repo trên branch nào, ở đây tôi để default branch là “main”
  • cd C:DemoGitHub -> chỉ định thư mục chứa tất cả repo
  • echo %bn% -> chỉ dùng để in ra(hiển thị) branch name
  • git clone https://github.com/{username}/repo{x} -b %bn% -> câu lệnh “git clone https://github.com/{username}/repo{x}” này chắc các bạn đều đã biết dùng để clone repo về, riêng “-b %bn%” nghĩa là chỉ định sẽ clone repo trên branch nào, biến giá trị “bn” tôi đã khai báo ở trên

Trong quá trình clone những private repo về các bạn sẽ gặp thông báo yêu cầu nhập username và password:

$ git clone https://github.com/{username}/repo.git
Username: username của bạn
Password: personal_token của bạn

Cách lấy personal_token:

  • Đầu tiên đăng nhập vào dashboard github của các bạn, nếu chưa có tài khoản github vui lòng đăng ký. Sau khi đặng nhập thành công -> click avatar icon như hình và chọn mục “Settings”:

image.png

  • Tại giao diện “Settings” -> chọn mục “Developer settings”:

image.png

  • Tại giao diện “Developer settings” -> chọn mục “Personal access tokens” và click chọn “Generate new token”:

image.png

  • Tại giao diện “Generate new token”, có 3 mục chúng ta quan tâm đến:
  • Tại “Note” -> nhập mục đích bạn sửa dụng token này cho việc gì

  • Tại “Expiration” -> mặc định sau 30 ngày token sẽ hết hạn

  • Tại “Select scopes” -> chọn scopes mà bạn cần tuỳ thuộc vào mỗi project. Tại đây tôi chỉ chọn “repo”:

image.png

  • Sau khi chọn “scopes” phù hợp -> click button “Generate token”:

image.png

  • Token được sinh ra và bạn chỉ cần click highlighted icon và copy token này, bạn cần backup token này:

image.png

Cuối cùng chỉ cần paste token này nếu trong quá trình clone yêu cầu

Để tối ưu hơn, tôi sẽ tích hợp token này vào trong script file:

@echo off
SET bn="main"
cd C:DemoGitHub
echo %bn%
rem ####Switch branch for ####
git clone https://{token}@github.com/{username}/repo1.git  -b %bn%
echo "git clone for repo1"

git clone https://{token}@github.com/{username}/repo2.git  -b %bn%
echo "git clone for repo2"

git clone https://{token}@github.com/{username}/repo3.git  -b %bn%
echo "git clone for repo3"

git clone https://{token}@github.com/{username}/repo4.git  -b %bn%
echo "git clone for repo4"

pause

Chạy scipt file và kiểm tra kết quả:

image.png

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ