🔥
githubから1つのディレクトリだけをダウンロードするシェルスクリプト
結論
あんまり意味がなかった。。
やりたいこと
gir repositoryから、1つのディレクトリ(フォルダ)だけをダウンロードしたい。1つのリポジトリに多数のサンプルが入っているときなどに、全部ダウンロードするの大変だなーと思っていたので。
やっていること
gitのsparse checkoutを使ってディレクトリを指定して取得。その後はgit管理はしない想定で、.gitなどは削除
注意点
リポジトリ全部を一度取り込むことになるので、時間としてはあまり変わらないです。大きいリポジトリだと時間がかかります
余談
Python requestsで直接ダウンロードしたら早くなるかな、と思ったけどPythonは遅かったです。
git 23秒 python 183秒 (https://github.com/aws-samples/aws-cdk-examples.git のpython/
で比較) 記事はこちら
前提
- git (>2.28)
使い方
bash git_sparse_checkout.sh <対象repo> <対象ディレクトリ>
例えば、awsのサンプルからあるディレクトリDynamoDB-SDK-Examplesだけを取り出したいとき。
bash git_sparse_checkout.sh https://github.com/aws-samples/aws-dynamodb-examples.git DynamoDB-SDK-Examples
remote: Enumerating objects: 1712, done.
remote: Counting objects: 100% (232/232), done.
remote: Compressing objects: 100% (94/94), done.
remote: Total 1712 (delta 183), reused 140 (delta 138), pack-reused 1480
Receiving objects: 100% (1712/1712), 367.36 KiB | 100.00 KiB/s, done.
Resolving deltas: 100% (993/993), done.
From https://github.com/aws-samples/aws-dynamodb-examples
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
"DynamoDB-SDK-Examples" has successfully copied!
スクリプト
- ターゲットrepoのデフォルトがmainだったりmasterだったりするので、その場で調べて同じ名前を作ることにしている
- dir_tmp/dirという感じで2回ディレクトリが作られることになるが、あとで移動させてdir_tmpは消している
- 実行するディレクトリに、target_dirができて終了する。
- 未確認:同じディレクトリ名が存在するとき、マッチするものを全部とってくるかも?
参考にしたもの
いろいろなブログからまとめてスクリプト化してます。
だいたいのブログの元ネタはこちらの英語ブログ(2013年)と思われます。
余談
このやり方は古いみたいで、新しいのは公式でこう書かれていたり。
Discussion