星期一, 12月 11, 2017

git sparse checkout

有時候我們只想拿 Git 上的一兩個檔案,但整個儲存庫很大,或歷史悠久,實在有點浪費。首先有個下指令 sparse checkout 指定要取的路徑,也可以搭配深度省略不需要的歷史:
  • git init <repository_name>
  • cd <repository_name>
  • git config core.sparseCheckout true
  • echo '/path/to/file1' > .git/info/sparse-checkout
  • echo '/path/to/files/*' >> .git/info/sparse-checkout
  • git remote add origin https://<repository_url>
  • git pull --depth 1 origin master
指令有點多,用 api 看有沒有好一點?以無需認證的 GitHub repository 為例:
  • curl -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/:owner/:repo/contents/:path
需認證的 GitLab 比較麻煩些:
  • curl -H 'PRIVATE-TOKEN: <token>' https://<git_host>/api/v4/projects/:id/repository/files/<url_encoded_file_path>/raw?ref=master -o output.ext
    • token 要取一個 scope 包含 api,尚在有效期限內的 personal access token
    • project id 可在專案的一般設定找到,通常是個數字
    • 以專案第一層 a 目錄下的 b.txt 為例,url_encoded_file_path 會是 a%2Fb.txt
    • master 是分支名,也可以是 tag 或 commit id
    • output.ext 是輸出檔名

沒有留言:

張貼留言