
git clone
次のようなラッパーを作成してコマンドを変更してローカルキャッシュを使用したいと思います。
- ストレージがキャッシュにない場合は複製します。
- 希望の場所にコピーしてください。
しかし、どのように解析しますか?git clone
repository
値を取得するためのコマンドライン引数はマイナーなようですが、良い解決策が見つかりません。
これは、コマンドライン引数の構造が不足しているためです。一部はスイッチでも、一部は値などが続く場合もあります。git
この場合、オプションの引数<repository>
が後に続く可能性があるため、<directory>
常に最後の引数を渡すことはできません。 CLIパラメータを辞書などのようにさらに構造化することができれば良いでしょう。
repository
次のツールを使用してパラメータを自動的に取得できるように、ドキュメントに指定された構文を指定する方法はありますかgetopts
?
git
注:私はコマンドを使用してリポジトリを自動的にダウンロードするためにJenkins、Buildoutなどのいくつかのツールを使用しているので、git
ラッパーは最高のソリューションだと思います。
git
ローカルのGitサーバー、URLの書き換えなど、試してみる特定のソリューションもあります。
答え1
コマンドの引数を繰り返してコマンド内でリポジトリを検索または検索し、URLを解析して@
必要https://
なものを抽出できます。
たとえば、Pythonでは次のようになります。
import sys
if len(sys.argv) > 1:
for i in sys.argv:
# Do whatever you want (parsing the URL...)
答え2
私はハッキングされたスクリプトを思い出しました。/usr/local/bin/git
それはNicholasが述べたアイデアを使用します。最新バージョンのGitで提供されている機能を使用してください--reference-if-able
。--dissociate
#!/usr/bin/env bash
# The real executable is located at /usr/local/bin/tig.
command=$1
cache=$HOME/.cache/git/repositories
if [[ ! $command == "clone" ]]; then
/usr/local/bin/tig "$@"
exit
fi
caching=false
for argument in "${@:2}"; do
case $argument in
--reference | --reference-if-able)
caching=false
break
;;
*[email protected]:*)
caching=true
[[ $argument == *.git ]] && argument=${argument%.git}
folder=$cache/$argument
;;
esac
done
if $caching; then
echo "INFO: Using cache: $folder"
/usr/local/bin/tig clone \
--reference-if-able "$folder" --dissociate "${@:2}"
else
/usr/local/bin/tig "$@"
fi
免責事項:これは開発目的にのみ使用されます。最善の方法は、Stephenが提案したように、GobletなどのGitプロキシサーバーを使用することです。