git中多账号切换问题的解决方案(转)
作者:知乎用户
链接:https://www.zhihu.com/question/23028445/answer/416231632
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
git多账号切换其实是有https的解决方案的,可以省去ssh配置公钥相关的麻烦,不过安全性会降低,后面会提到。
比如你想用A账号管理本地仓库repoA,用B账号管理本地仓库repoB。
那么首先,看一下gloabal和system的config:
git config --global -l
git config --system -l
主要是看有没有credential.helper把账号密码存起来了。因为https的url方式每次push的时候都要输入密码,比较麻烦,一般就会用credential.helper把账号密码存在global里了。这样对单用户没问题,但多用户时就会有问题。如果存的是A账户,那在repoB里push的时候肯定就会permission denied。所以看看global或者system哪个设置了保存就unset一下:
git config --global --unset credential.helper
git config --system --unset credential.helper
第二个命令可能需要权限吧。
接下来就是对本地仓库的config设置了。比如进入本地仓库repoA之后,看一下url:
git remote -v
https开头的就是用的https了,git@ 开头的就是用的ssh了,一般用浏览器打开github仓库页面之后在页面里copy的都是https。一般是长这个样子:
然后在https://和http://github.com之间加上用户名@ ,用set-url设置就好:
git remote set-url origin https://UserA@github.com/UserA/repoA.git
当然默认是origin分支,要设置其他分支也一样。@ 前的用户名和仓库权限的拥有者要对应起来。
改好之后,这时候push,就要输入一下用户A的密码,然后就能push上去了。对于repoB也是一样。每次push都需要输入密码了。那么为了避免麻烦,针对每一个本地仓库,设置一下local的credential.helper:
git config --local credential.helper store
这样账号密码就只针对当前仓库保存,对其他仓库没有影响了。针对每一个需要管理的本地仓库,都需要按以上步骤设置一次url和credential.helper,设置好之后,就能一直正常push了。
总结一下:
1. 清空global和system的credential.helper
2. 对每一个本地仓库,设置一下url和local的credential.helper
关于安全性的问题,用git credentials存凭证的话,密码是以明文形式存储的,不论是git-credentials=store还是git-credentials=winstore(windows),git-credentials=osxkeychain(Mac),都有办法直接看到密码明文,除非用git-credentials=cache。当然也可以自定义,参考7.14 Git 工具 - 凭证存储。
git中多账号切换问题的解决方案(转)的更多相关文章
- TFS中的账号和GIT中的账号
有些公司使用TFS来进行git的管理,这个时候很多人没有区分TFS中的账号和GIT的账号的区别:TFS的账号和GIT账号是两套不同的体系,使用TFS管理GIT GIT是不需要账号密码,但是必须在win ...
- git中如何切换分支,拉取分支,合并分支
idea中如何使用git来做分支的切换合并: https://blog.csdn.net/autfish/article/details/52513465 本地分支与远程分支: https://seg ...
- Github新安全措施:停止Git客户端账号密码登录的解决方案
今年 8 月 13 日之后,如果你还用账户密码来操作 Github 上的仓库,就会收到如下警告: remote: Support for password authentication was rem ...
- Git中的文件状态和使用
(暂存区 即Index In Git) commit 到 local respository的内容,不想push,则使用git reset 将文件状态回转到staged|modified|unstag ...
- Git中的文件状态和使用问题解决
(暂存区 即Index In Git) commit 到 local respository的内容,不想push,则使用git reset 将文件状态回转到staged|modified|unstag ...
- 【git】git中使用https和ssh协议的区别以及它们的用法
git可以使用四种主要的协议来传输资料: 本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 git 协议.其中,本地协议由于目前大都是进行远程开发和共享代码所以一般不常 ...
- [Git] 020 stash —— Git 中的”皮姆粒子“
0. 我准备模拟两种情况 第一种 第二种 情况简析 仓库中的最新版本发现 Bug,需要立即修复 当前在 "dev" 分支中工作到一定程度,尚不能提交,但删之可惜 ps: 在分支中没 ...
- 版本控制git之二 分支 切换分支 创建分支 合并 删除
版本控制git之二 分支 有人把 Git 的分支模型称为它的`‘必杀技特性’',也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 为何 Git 的分支模型如此出众呢? Git 处 ...
- Git中如何利用生成SSH个人公钥访问git仓库
Git中如何利用生成SSH个人公钥访问git仓库方法(这里以coding平台为例): 1. 获取 SSH 协议地址 在项目的代码页面点击 SSH 切换到 SSH 协议, 获得访问地址, 请使用这个地址 ...
随机推荐
- ueditor+word粘贴上传
公司做的项目要用到文本上传功能. 网上找了很久,大部分都有一些不成熟的问题,终于让我找到了一个成熟的项目. 下面就来看看: 1.打开工程: 对于文档的上传我们需要知道这个项目是否符合我们的初衷. 运行 ...
- ASP.NET批量下载文件的方法
一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...
- 开源C++版本CGI库CGICC入门
原发布在ChinaUnix,但未自动搬迁过来:http://blog.chinaunix.net/uid-20682147-id-4895772.html PDF版本:https://files-cd ...
- 2018-01-13 view绘制流程-activity启动流程-window-decorView-ViewRootImpl关系
1.activity启动流程: https://www.jianshu.com/p/927ca995bca6 http://blog.csdn.net/qian520ao/article/detail ...
- IT桔子-抓取数据
- Codeforces Round #298 (Div. 2)--D. Handshakes
#include <stdio.h> #include <algorithm> #include <set> using namespace std; #defin ...
- Xcode常见快捷键
在项目工作中,你每天都要和这些视图互动,所有这些视图在Xode中都是必不可少的.所以接下来江哥将教你如何快速通过热键来配置你的工作空间. Command (⌘):用来导航,主要用来控制导航区域. Al ...
- Hbase_shell操作
创建表 create 'user_action_table', 'action_log', 'action'-- 执行结果=> Hbase::Table - m_table 描述表信息 desc ...
- Hive ORC + SNAPPY
Hive orc 格式 + snappy 压缩是比较常用的存储加压缩格式. 今天处理下面的场景时,解决了一些问题,记录下来: flume消费kafka的数据实时写入hdfs,通过创建分区表,t + 1 ...
- phpStudy模式下安装ssl证书,详细版
phpStudy模式下安装ssl证书,详细版 2017年12月16日 14:27:38 骑着蚂蚁追大象 阅读数:4232 标签: phpstudy安装ssl证书 更多 个人分类: php 版权声明 ...