it-swarm-ja.com

gitpushへのパイピング資格情報

git Pushを実行するときはいつでも、プロンプトでユーザー名とパスワードを手動で入力する必要があります。
ただし、このプロセスを自動化したい。

そこで、パイプを使用してコマンドに資格情報を渡そうとしました。

printf 'username\npassword' | git Push

しかし、ユーザー名とパスワードのプロンプトは消えません!
なぜ機能しないのですか?

注:
これは次を使用して実行できることを知っています。
git Push 'https://username:[email protected]/username/repo.git'
しかし、配管方法の何が問題になっているのか知りたいのですが?


また、このプロセスが他のケースでも機能することを確認するために、実験を行いました。
スクリプトを作成しましたb.py

b.py

#!/usr/bin/env python3

username = input()
password = input()

log = open("log.txt", "w")
print(username + "\n" + password, file=log)

次に、ターミナルでprintf 'abcd\nefgh' | ./b.pyを実行すると、期待どおりに機能し、ユーザー名とパスワードの文字列を含むログファイルが作成されました。

log.txt

abcd
efgh
1

これは、例のようにスクリプトの直接の部分であるシーケンシャルプロンプトの場合にのみ機能します。ただし、gitの場合、ユーザー名/パスワードプロンプトの前に値がプロセスに渡されます-おそらくGIT_ASKPASSの前にすべて(ネットワークなど)を実行している間-参照用: https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables

1
aphorise