Mặc dù Github được sử dụng phổ biến nhất để lưu trữ các dự án mã nguồn 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.
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 code, 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ư sau:
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.