すぎしーのXRと3DCG

主にXR, Unity, 3DCG系の記事を投稿していきます。

Git for Windowsをコマンドラインからインストールする方法

概要

今回はWindowsコマンドラインでGit for Windows (Git Bash) をインストールする方法を紹介します。

Git for WindowsWindows上でGitやBashを使用する場合にインストールしておくと何かと役に立つパッケージですが、
GUI経由でのインストールは必要オプションの取捨選択が必要であったり、なによりインストール状態の再現性に乏しいところがあります。

コマンドライン経由のインストール方法を確立することで、再現性があり開発環境インフラ構築などにも応用させることができますためよかったらご活用ください!

動作環境

  • Windows 10
    • 筆者はPro版ですが、Homeでも問題ないと思います

注意事項

  • 以下を試す場合は自己責任でお願いします!
  • 以下の処理は管理者権限で実行しますが、当方は事故や故障などの一切の責任を負いません!

上記の件、ご留意ください

変更履歴

  • 2022/05/17
    • 「2022/05/16 23:00以前のExampleを試した場合は以下を実施をお願いします」を追加
    • 「(任意)PATHの追加」に注意文を追記
  • 2023/02/05
    • 「install-git.ps1 を実行」を PowerShell -ExecutionPolicy Bypass を使ったコマンドに修正

2022/05/16 23:00以前のExampleを試した方は以下を実施を推奨

環境変数の設定に使用していたコマンド ([Environment]::SetEnvironmentVariable) に少し難点がありました。
WindowsInfrastructureExample 上のスクリプトは修正済みです。

もし、すでに試していてパスが通らなくなったり、コマンドが実行できなくなった方は以下の「余談、PATHのREG_SZ登録をREG_EXPAND_SZに切り替える方法」を試してみてください。

余談、PATHのREG_SZ登録をREG_EXPAND_SZに切り替える方法

詳細も上記記事に記載しています。


インストール方法

インストールオプションについて

  • 以下のコマンドでのGit for Windowsのインストールオプションは筆者が普段使用しているオプションを使用
    • 詳細は後述しますが、各自で git-for-windows.inf 都合の良いように改変してください

Gitからps1ファイルをクローン

github.com

PowerShellを管理者権限で開く

※開き方は好きなやり方で問題ありません

今回はWindows 10標準搭載のPowerShellを使用

  • Windows キーを押して、「powershell」を検索
  • 「管理者として実行する」をクリック

PowerShellでクローンしたWindowsInfrastructureExample上に移動

> cd <path>\WindowsInfrastructureExample

Git-2.x.x-64-bit.exe を配置

コマンドでダウンロードする場合

> Invoke-WebRequest https://github.com/git-for-windows/git/releases/download/v2.36.1.windows.1/Git-2.36.1-64-bit.exe -OutFile Git-2.36.1-64-bit.exe

※インフラ構築のスクリプトを書く場合は、このコマンド自体をps1スクリプトに組み込んでも良い

ブラウザでダウンロードする場合

以下より Git-2.x.x-64-bit.exeをダウンロードし、WindowsInfrastructureExample フォルダ以下に配置

github.com

install-git.ps1 を実行

> PowerShell -ExecutionPolicy Bypass .\install-git.ps1

エラーログが出なければ問題なく Git for Windowsのインストール完了

インストールの確認 (コマンドラインの場合)

  • Dir 'C:\Program Files\Git\cmd\git.exe'でエラーが出なければインストール完了
> Dir 'C:\Program Files\Git\bin\git.exe'


    ディレクトリ: C:\Program Files\Git\bin


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2022/05/09     13:28          45584 git.exe

(任意)PATHの追加

(追記)ローカルPCの環境変数 PATH が変更されます!ご注意ください!

> .\set-git-path.ps1

以上でインストール及び設定は完了です。


スクリプト解説

install-git.ps1

InnoSetup

Git for WindowsはInnoSetupというフリーのWindows向けインストーラーが使用されています

パラメータの詳細は Setup Command Line Parameters で確認できます

jrsoftware.org

  • /ALLUSERS はその通りWindows上の全部のユーザーにインストール
  • /VERYSILENT はダイアログなどを抑制
  • /Log xxx.log でログ出力
    • 標準出力に直接ログを流し込めなかったため、一度ログファイルに落として最後に出力に流しています

/LOADINF

/LOADINF=git-for-windows.inf

オプションファイルの指定で、実質的にGit for Windowsのオプション指定方法になります

  • Gitのcommit時の改行にLFを指定 (CRLFOption)
  • Credential Managerの使用 (UseCredentialManager)
  • コマンドプロンプトでgitを使用可能にするかの指定 (PathOption)
  • etc...

手順で使用したファイルは git-for-windows.inf となります

後述の SAVEINF からオプションファイルを作成できます。

自分はインストーラーのスクリプト (install.iss) から割り出してました。。。

余談、git-for-windows.inf の方針

  • CLI特化
  • UNIX系と互換性を意識
    • OpenSSHの使用
    • LFOnly指定など
  • Credential Manager を有効化
    • これがあるとGitHubとの連携が楽になります! (別記事でいずれ紹介します!)
  • デフォルトブランチ名はmain (昨今の流れを汲み取って)
  • git LFS を有効化

/SAVEINF

/LOADINF=git-for-windows_save.inf

install-git.ps1では非使用

今回は直接は使用していませんが、指定するとインストール時のオプションを確認可能です!

| Out-Null

コマンドの最後に | Out-Null を入れることで、インストール完了までコマンド終了待ちになります。
PowerShellだとメジャーなテクニックのようです。

余談、今回の調査で躓いたところ

  • PowerShellで変数に実行ファイルを仕込む場合は & ./$PackageFileのように記載
    • &なしで ./$PackageFile とするとエラーになる
  • Set-ExecutionPolicy を実行しないと PowerShell上でps1ファイルが実行できない
  • オプションの探し方
    • Foo.exe /? or Foo.exe /HELP などで確認できる場合があるようです
    • Windowsのダイアログ出でるのでコピーできないなど面倒。。。
  • 別ps1ファイルのfunctionをコールする方法

自分は元々UNIX系のエンジニアだったので、WindowsPowerShellコマンドライン化には結構手こずりました。
再現性のあるインフラの構築にはIaC (Infrastructure as Code) は欠かせないのですが、Windowsに慣れていないせいかほとんどPowerShell調査みたいになってしまいました。

雑感

前回の記事投稿から2ヶ月経ってしまいましたね。。。

しかも今回はXRと3DCGから程遠いCLIに関する記事に。

「3DCGとかUnityやる気あるの?」と思われた方もいらっしゃるかもしれませんが、ちゃんと普段は触ってます!
地味なことですが、再現性のある開発環境の構築方法は何かと便利だったりします。

また、Git for Windowsってインストールしておくと、UnityのPackage ManagerでGitHub経由のパッケージが取得しやすくなったり、
GitHubHTTPS経由での連携が安定したりと、何気に非エンジニアの方にもメリットがあったりします!

さて、次回は「PowerShell7をコマンドラインからインストールする方法」にする予定です!

それでは~