この質問では要求されていませんが、同じ問題を解決しようとしている人のために gitlab のためだけにこの回答を載せておきます。
gitlab の解決策
私は environment-variables のアプローチを使ってみましたが、 git documentation でも、単純なケース以外では ~/.ssh/config
を使うことを推奨しています。私の場合は gitlab サーバーにプッシュしていますが、特定のユーザーとしてプッシュしたかったのです。一旦実装すると、以下のようになります:
~/myrepo> git mycommit -m "Important Stuff"
~/myrepo> git mypush
[proceed to enter passphrase for private key...]
Setup
私の場合は、private-key git
の場所を思い出してください。
Host gitlab-delegate
HostName gitlab.mydomain.com
User git
IdentityFile /myfolder/.ssh/my_gitlab_id_rsa
IdentitiesOnly yes
/myfolder/.ssh/my_gitlab_id_rsa
にエントリを追加する ~/.ssh/config
:
mypush = "!f() { \
path=$(git config --get remote.origin.url | cut -d':' -f2); \
branch=$(git rev-parse --abbrev-ref HEAD); \
git remote add gitlab_as_me git@gitlab-delegate:$path && \
git push gitlab_as_me $branch && \
git pull origin $branch; \
git remote remove gitlab_as_me; \
}; f"
おまけとして、この git-alias を使って このホストで特定のユーザーとしてコミットを実行する を追加します。
mycommit = "!f() { \
git -c "user.name=myname" -c "user.email=myname@mysite.com" commit \"$@\"; \
}; f"
解説
上記のすべては、関連するリモートが ~/.gitconfig
であり、関連するブランチが現在チェックアウトされていることを前提としています。参考までに、私は対処する必要があったいくつかの項目に遭遇しました。
- ソリューションは、新しいリモートを作成する必要があります
origin
、そして私は余分なリモートを見て好きではなかったので、私は終了したときにそれを削除します (/questions/tagged/git-alias “show questions tagged ‘git-alias’”) [私のログツリーの周りにぶら下がっている]
- リモートを作成するために。リモートの URL をその場で生成する必要があります - gitlab の場合は、シンプルな bash cut
gitlab_as_me
へのプッシュを行う際には、どのブランチをプッシュするのかを明確にする必要があります
- プッシュを行った後、ローカルの
gitlab_as_me
ポインタを origin
と一致させるために “更新” する必要があります (これは gitlab_as_me
が行っています)。