私の元の答えは私自身にとってもあまり役に立たないことがわかったので、もう少し調べてみると、ハックが見つかりました(多少複雑ですが)。
したがって、私はgit
MSYS2で使用しcredential-cache
、パスワードを一時的に覚えておくためにを使用したいと思います(そして、wincred
他のWindows適用可能なアプローチでそのようなユースケースを見たことがありません)。
基本的に、これにはhttps://github.com/git/git/blob/55144cc/builtin/credential-cache--daemon.c#L239でのハックが必要です-その行で-ingする代わりに、die
続行します。
したがって、まず、git
MSYS2でビルドします。
git
したがって、 MSYS2で使用される実際のビルドを行う必要があります。まず、バージョンを確認します。
$ git --version
git version 2.33.0
$ pacman -Ss git | grep installed # msys/git 2.33.0-1 (VCS) [installed]
次に、https://www.msys2.org/wiki/Creating-Packages/に従って、これを行うことができます。
$ git clone "https://github.com/msys2/MSYS2-packages"
$ cd MSYS2-packages/
$ cd git
$ makepkg -sCLf
==> Making package: git 2.33.0-1 (Thu, Sep 23, 2021 12:47:33 PM)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Installing missing dependencies...
...
make[1]: Entering directory '/c/src/MSYS2-packages/git/src/git-2.33.0'
make[1]: 'GIT-VERSION-FILE' is up to date.
make[1]: Leaving directory '/c/src/MSYS2-packages/git/src/git-2.33.0'
sed -e '1s|#!.*/sh|#!/bin/sh|' git-subtree.sh >git-subtree
chmod +x git-subtree
make: Leaving directory '/c/src/MSYS2-packages/git/src/git-2.33.0/contrib/subtree'
==> Starting check()...
ここに注意してください:
- このビルドプロセスは、最初はASCIIDOC / XMLTO部分になります。これは、私のマシンでは30分かかります。
- その後、
*** prove ***
さらに時間がかかる部分になりますが、Ctrl-Cで中断することができ、ビルドされた実行可能ファイルは消去されません。
そこで、ソースをハックしたいと思います。ノート:
- ソースをハックする場合は、を使用したくありません
makepkg -sCLf
。これにより、ソースディレクトリが(ビルドされたすべての.exeアーティファクトとともに)消去され、ビルド前に再構築されます。
したがって、を使用してハックを行いsed
、次にビルドします。
$ sed -i 's/die(_(permissions_advice), dir);/fprintf(stderr, "Permissions on cached credentials socket directory %s are too loose, but HACK: going on\\n", dir);/' ./src/git-2.33.0/builtin/credential-cache--daemon.c
$ (cd src/git-2.33.0/; make)
CC builtin/credential-cache--daemon.o
LINK git.exe
...
SUBDIR templates
この時点で、ハッキングは少なくとも3つの実行可能ファイルで終了することに注意してください。これは、次の方法で確認できます。
$ grep -ao ....HACK........ ./src/git-2.33.0/git-credential-cache--daemon.exe
$ grep -ao ....HACK........ ./src/git-2.33.0/git-credential-cache.exe
$ grep -ao ....HACK........ ./src/git-2.33.0/git.exe
...そして私はこれを機能させることができたのは、3つすべてを置き換えた後です:
# backup the original files:
$ mv /usr/lib/git-core/git-credential-cache--daemon.exe /usr/lib/git-core/__git-credential-cache--daemon_orig.exe
$ mv -v /usr/lib/git-core/git-credential-cache.exe /usr/lib/git-core/__git-credential-cache__orig.exe
$ mv -v /usr/bin/git.exe /usr/bin/__git_orig.exe
$ mv -v /usr/lib/git-core/git.exe /usr/lib/git-core/__git_orig.exe
# copy over the hacked files:
cp -v ./src/git-2.33.0/git-credential-cache--daemon.exe /usr/lib/git-core/
cp -v ./src/git-2.33.0/git-credential-cache.exe /usr/lib/git-core/
cp -v ./src/git-2.33.0/git.exe /usr/bin/
cp -v ./src/git-2.33.0/git.exe /usr/lib/git-core/
そしてこの時点で、credential-cache
MSYS2(限られた時間のパスワードのキャッシュ)でも作業を開始しました。起動時にハッキングされた行をダンプするだけです。
$ git pull
Password for 'https://user@git.mysite.com':
Permissions on cached credentials socket directory /home/user/.cache/git/credential are too loose, but HACK: going on
Already up to date.
# second pull, password is cached
$ git pull
Already up to date.
少し注意が必要ですが、機能しているようです。
PS:トリッキーなことは、私が最初にtodie
だけに置き換えたのですが、それは失敗し続けました。結局のところ、プロセス間通信に使用されており、これが成功するためには、明らかに3バイトの何かが答えます。そのため、解決策は代わりに通知を印刷することでした。printf
stdout
stdout
ok\0
stdout
stderr
(元の回答):
質問に正確に答えることはできませんが、これは私が見つけた最も適切な質問であり、これを答えとして文書化することができます。
私はgit
Windows10のMSYS2で使用していますが、現在のバージョンは次のとおりです。
$ git --version
git version 2.32.0
私は通常、gitに限られた時間(おそらく10分程度)だけパスワードをキャッシュさせてから、それを忘れてしまいたいと思っています。wincred
また、そのユースケースでのWindows固有のクレデンシャルマネージャーの使用法やその他の使用例はまだ見ていません。
そうは言っても、私には「簡単な修正」があることがわかりました。基本的に、クレデンシャルマネージャーを初めて実行するときは問題ありません。私が得るのはその後の使用時のみです:
$ git push
Password for 'http://user@githost.example.com':
fatal: The permissions on your socket directory are too loose; other
users may be able to read your cached credentials. Consider running:
chmod 0700 /home/user/.cache/git/credential
fatal: cache daemon did not start:
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
...
したがって、基本的に、修正はcredential
ディレクトリを削除することです-その後、資格情報キャッシュマネージャーは初めてのように実行され、限られた時間だけパスワードをキャッシュします-ちょうど私が望むように:
$ rm -rf ~/.cache/git/credential
# note below, the very first pull still asks for a password:
$ git pull
Password for 'http://user@githost.example.com':
Already up to date.
# ... but the second pull does not, it uses credentials cache
$ git pull
Already up to date.
私には十分だと思います:)
編集:実際にはそうではありませんが、この直後に別のタブをプルしようとすると、エラーが返されることを経験しました。