※ここでの「テンプレートファイル」とはコンフィグファイルなど、各プロジェクトとよく使うファイルのことを指します.
- PowerShellを使って、Gistに登録しているファイルをクローンし、差分を表示したり、パッチを適用する機能を持つ
gistコマンドを実装する
- Gistは
gitコマンドやghコマンドでクローンして管理できますが、ローカルリポジトリを作ってしまうので扱いづらい - 1~2ファイル程度のテンプレートファイルを管理するのに、プロジェクトを専用に作るのではなく、Gistで管理したい(バージョン履歴を残す).
gitコマンドのように手軽に扱いたい- PowerShellとコマンドラインツールで対応したい
| Function | Description |
|---|---|
| gist-clone | Gistからファイルをダウンロードする |
| gist-diff | Gistの最新版とローカル版を比較する |
| gist | clone, diff, patch, merge の4種類のコマンドが使える |
PS > gist-clone -UserId <userid> -Hash <hash> -Name <name> [-OutName <outname>]
PS > gist-diff -UserId <userid> -Hash <hash> -Name <name> [-WorkingName <workingname>] [-Patch]
# clone(オプションは gist-clone に渡される)
PS > gist clone [options]
# diff(オプションは gist-diff に渡される)
PS > gist diff [-Patch] [options]
# patch(オプションは patch.exe に渡される)
# 事前に diff -Patch でパッチファイルを作成する必要がある
PS > gist patch [options]
# patch(適用前のファイルを保存)
PS > gist patch -b
# merge (WinMerge)
PS > gist merge- Windows11, PowerShell 7.4.5 で動作確認しました
- 私の環境はWindowsでワーキング環境ではCRLFで作業しています.git側のEOLが
LFなので、git diffの内容を出力するとLFとなります.そのため、sdを使って変換しています. - Gistからファイルを取得するのに2種類の方法があります.URLで直接アクセスするのと、
ghコマンド(GitHub CLI)を使う方法です.URLの場合、最新バージョンを取得するのにラグが発生したので、ghコマンドを使うようにしています. - パッチを適用するのにGitに付属している
patch.exeを利用しています. - パッチを適用したあとは、手動でパッチファイルを削除する必要があります.
- 必要な情報を毎回入力するのは面倒なので、
gist関数の中にハッシュテーブルで持つようにして、そのエントリを fzf で選択できるようにしています. - プッシュする機能はないので、GistPadなどで更新します.
- 差分を表示するのにdeltaを使用しています.
- 基本的に管理しているファイル名と同じ名前でローカルにあることを想定していますが、
db内のNameListに特定の名前を追加することができます. - Visual Studio Codeの拡張機能GistPadで保存する場合、フォーマッタの問題で保存時に変わってしまうことがある.その場合、コマンドパレットから「File > Save without Formatting」で保存すること.
- サブコマンドに
mergeも追加しました.WinMergeを起動します.