※ここでの「テンプレートファイル」とはコンフィグファイルなど、各プロジェクトとよく使うファイルのことを指します.
- 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を起動します.