Mặc dù Github được sử dụng phổ biến nhất để lưu trữ các dự án code lớn, nhưng nó cũng hoạt động như một máy chủ lưu trữ FIle khá tốt và đôi khi bạn chỉ muốn tải xuống một hoặc hai File mà không muốn phải tải toàn bộ repo thì sao? May mắn thay, Github có hỗ trợ việc này bằng web và command line.
Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
Tải một File đơn từ Github
Nếu bạn thích sử dụng trình duyệt web, bạn có thể tải các File bất kỳmột cách khá dễ dàng. Truy cập File bạn muốn tải xuống và nhấn vào “Raw:”
Thao tác này sẽ mở ra một trang có liên kết trực tiếp đến File. Bạn có thể sao chép, nhưng trong hầu hết các trình duyệt, bạn có thể nhấp chuột phải và chọn “Save As” để tải File xuống trực tiếp.
Đối với các File cpde, file tải về có thể lưu dưới dạng .txt, bạn sẽ cần sửa đuôi file theo cách thủ công trước hoặc sau khi tải xuống.
Tải File đơn lẽ từ Command Line
Các File được cung cấp từ trang raw.githubusercontent.com, có thể được tải xuống trực tiếp thông qua wget hoặc curl. Chúng được lưu trữ ở các vị trí có thể truy cập, vì vậy nếu bạn biết tên người dùng, kho lưu trữ và đường dẫn File, bạn có thể tải xuống bất kỳ File nào trên bất kỳ nhánh nào như này:
wget https://raw.githubusercontent.com/username/repository/branch/path/filename.md
Nếu muốn sử dụng API của Git, bạn có thể tương tác với nó trực tiếp hơn và tải File xuống khi bạn không chắc chắn về vị trí File chính xác. Bạn sẽ cần tạo personal access token để sử dụng API và thay thế “ACCESS_TOKEN” trong tập lệnh này.
curl -H 'Authorization: token ACCESS_TOKEN ' -H \ 'Accept: application/vnd.github.v3.raw' -O -L \ https://api.github.com/repos/username/repository/contents/path/filename.md
/repos/{user}/{repo}/contents endpoint sẽ thực hiện những việc khác nhau tùy thuộc vào việc đường dẫn trỏ đến một thư mục hay một File. Nếu đó là một File, nó sẽ trả về siêu dữ liệu của File đó:
{ "type": "file", "encoding": "base64", "size": 5362, "name": "README.md", "path": "README.md", "content": "encoded content ...", "sha": "3d21ec53a331a6f037a91c368710b99387d012c1", "url": "https://api.github.com/repos/octokit/octokit.rb/contents/README.md", "git_url": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", "html_url": "https://github.com/octokit/octokit.rb/blob/master/README.md", "download_url": "https://raw.githubusercontent.com/octokit/octokit.rb/master/README.md", "_links": { "git": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", "self": "https://api.github.com/repos/octokit/octokit.rb/contents/README.md", "html": "https://github.com/octokit/octokit.rb/blob/master/README.md" } }
Nếu đó là một thư mục, nó sẽ trả về tất cả các File và thư mục con trong một mảng:
[ { "type": "file", "size": 625, "name": "octokit.rb", "path": "lib/octokit.rb", "sha": "fff6fe3a23bf1c8ea0692b4a883af99bee26fd3b", "url": "https://api.github.com/repos/octokit/octokit.rb/contents/lib/octokit.rb", "git_url": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/fff6fe3a23bf1c8ea0692b4a883af99bee26fd3b", "html_url": "https://github.com/octokit/octokit.rb/blob/master/lib/octokit.rb", "download_url": "https://raw.githubusercontent.com/octokit/octokit.rb/master/lib/octokit.rb", "_links": { "self": "https://api.github.com/repos/octokit/octokit.rb/contents/lib/octokit.rb", "git": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/fff6fe3a23bf1c8ea0692b4a883af99bee26fd3b", "html": "https://github.com/octokit/octokit.rb/blob/master/lib/octokit.rb" } }, { "type": "dir", "size": 0, "name": "octokit", "path": "lib/octokit", "sha": "a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "url": "https://api.github.com/repos/octokit/octokit.rb/contents/lib/octokit", "git_url": "https://api.github.com/repos/octokit/octokit.rb/git/trees/a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "html_url": "https://github.com/octokit/octokit.rb/tree/master/lib/octokit", "download_url": null, "_links": { "self": "https://api.github.com/repos/octokit/octokit.rb/contents/lib/octokit", "git": "https://api.github.com/repos/octokit/octokit.rb/git/trees/a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "html": "https://github.com/octokit/octokit.rb/tree/master/lib/octokit" } } ]
Sau đó, bạn có thể sử dụng trình phân tích cú pháp JSON như jq để tách URL ra và tải xuống. Để lấy danh sách file repo một cách đệ quy, bạn cần phải tìm nạp root tree. Ngoài ra bạn cũng có thể sử dụng github để tạo website đơn giản trong 15 phút tại đây.
Câu hỏi thường gặp
Tôi có thể tải xuống một tệp riêng lẻ từ kho lưu trữ GitHub mà không cần tải xuống toàn bộ kho lưu trữ không?
Có thể! Bạn có thể sử dụng trình duyệt web bằng cách nhấp vào “Raw” bên cạnh tệp bạn muốn tải xuống, hoặc sử dụng dòng lệnh với lệnh wget
hoặc curl
.
Làm thế nào để tải xuống một tệp bằng dòng lệnh?
Sử dụng wget https://raw.githubusercontent.com/username/repository/branch/path/filename.md
hoặc curl
với API GitHub (cần personal access token).
Tôi nên làm gì nếu tệp code tôi tải xuống có phần mở rộng .txt?
Đó là do cách GitHub trình bày tệp. Bạn cần đổi tên tệp và thêm phần mở rộng chính xác (.cpp, .py, .java, v.v.) sau khi tải xuống.