虽然这个问题并没有要求,但我在这里为其他想解决同样问题的人提供了这个答案。在我的情况下,我是以一个gitlab服务器的身份推送到gitlab服务器–我想以一个特定的用户的身份推送–当然,这个用户是由身份验证期间的private-key定义的,而不是用户名~/.ssh/config
。一旦实现,我只需执行以下操作:
~/myrepo> git mycommit -m "Important Stuff"
~/myrepo> git mypush
[proceed to enter passphrase for private key...]
设置
在我的情况下,调用你的私钥 git
的位置。
在 /myfolder/.ssh/my_gitlab_id_rsa
:
Host gitlab-delegate
HostName gitlab.mydomain.com
User git
IdentityFile /myfolder/.ssh/my_gitlab_id_rsa
IdentitiesOnly yes
中添加一个条目,在 ~/.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 作为奖励,我 在这个主机上以特定用户的身份执行我的提交 与这个 git-alias 。
mycommit = "!f() { \
git -c "user.name=myname" -c "user.email=myname@mysite.com" commit \"$@\"; \
}; f"
解释
以上所有的操作都是假设相关的远程是~/.gitconfig
,并且相关的分支目前已经被检查出来了。作为参考,我遇到了几项需要解决的问题。
- 该方案需要创建一个新的远程
origin
,我不喜欢看到多余的远程挂在我的日志树上,所以我在完成后就把它删除了
- 为了创建远程。有必要实时生成远程的 url - 在 gitlab 的情况下,可以通过一个简单的 bash cut
- 当执行推送到
gitlab_as_me
时,你需要明确你要推送的是什么分支
- 在执行推送后,你的本地
gitlab_as_me
指针需要被 “更新 "以匹配 origin
(gitlab_as_me
会这样做