文章目录
(因为我个人是用的码云[gitee],所以该文档则以gitee为例,github基本雷同)
[语雀搬迁–点击进入语雀传送门]
不少公司的代码都是通过gitlab管理的。
个人平时大多使用gitee仓库或者是github来托管自己的私有代码。
所以很可能会遇到git多账号切换的问题。
1、默认设置
通常我们都会把git账号设置为全局即(global), 类似于这种:
git config --global user.name "penn.ji" //配置全局用户名,如Gitee上注册的用户名
git config --global user.email "penn.gitlab@xxx.com" //配置全局邮箱,如Gitee上配置的邮箱
2、账号差别
由于公司的gitlab, 大多是使用公司的个人邮箱来管理。
而个人的gitee或者github,则一般是自己的私人邮箱来管理。
所以,大多数时候,我们是在一台电脑进行开发的。
因工作和个人的仓库地址、用户名和邮箱都不一样,很多时候一个git账号无法满足工作和个人学习并行的需求。
3、常见的解决方式:
操作不同项目时,根据项目切换git的对应配置。
缺点:
1、每次都要查看一下当前的git账号,然后每次修改都需要切换一下配置。
2、万一有哪次忘记修改,可能就会导致提交错误或者更严重的问题。
那有没有更好的同存解决方案呢?
为了解决这个问题,
该文档 便记录了我在探究这个问题的部分曲折历程以及常见的一些坑。 主要目的:
可以在windows 系统配置多个git账号,且各个账号互不影响。
从而保障我能够在同一台电脑上,根据不同账号pull或者push不同的仓库。
范例邮箱账号:
penn.gitee@xxx.com
penn.gitlab@xxx.com
如果你已经全局配置过git账号,那么一定要先把全局的配置给清除掉。
请 执行以下命令:
git config --global --list // 看一下是否配置过user.name 和 user.email
git config --global --unset user.name // 清楚全局用户名
git config --global --unset user.email // 清楚全局邮箱
如果你已经全局配置过git账号,那么你一定生成过全局ssh密钥。 这个密钥通常在 ~/.ssh 目录下。
如我的电脑密钥位置为:C:\Users\penn.ji\.ssh,如图:
因为你需要关联多个账号,所以同理也需要生成多个ssh密钥。【注意:需在.ssh目录下操作,否则会生成的密钥默认会存放至system的位置】
1、生成gitee的密钥
ssh-keygen -t rsa -C "penn.gitee@xxx.com" // 根据该邮箱生成新的SSH密钥
命令行输入上面指令后,会有如下提示, 如图:
图解:
Enter file in which to save the key (/z//.ssh/id_rsa): id_rsa_gitee:提示你是否需要重新设置一个密钥名称。
ps:因为我们需要配置多个账号,所以需要设置一个密钥名称,用于区别。
gitee的密钥名称我设置为: id_rsa_gitee 对应个人的gitee仓库:penn.gitee@xxx.com
Enter passphrase (empty for no passphrase): 输入仓库密码 切记密码不要输错了
Enter same passphrase again: 再次输入密码
2、生成gitlab的密钥
操作步骤和上面的一样,不再赘述。
为了区分,gitlab的密钥名称我设置为: id_rsa_gitlab 对应的gitee仓库:penn.gitlab@xxx.com
如果你配置过git的全局账号,则这一步你应该已经很熟悉了,可以直接跳过。
密钥生成后,会在.ssh目录下,生成如下两个文件,如图:
图解:
id_rsa_gitee 该文件是私钥
id_rsa_gitee_pub 该文件是公钥
远端配置:
我们需要的是把密钥配置进我们的远端仓库内,此处拿gitee举例:
登陆gitee,点击右上角的设置,如图:
点击 左侧导航栏的 安全设置 中的 SSH公钥,如图:
然后把ssh密钥配置进去,
把你的id_rsa_gitee_pub文件打开,复制密钥,拷贝进去,点击确定即可。
gitlab的设置基本雷同,不再赘述。
如果设置的是gitee,你的邮箱可能会收到类似提示,如图:
以上,
为密钥生成和公钥配置。
为了更方便的管理多个git账号,我们需要一个config的配置文件,用来集中配置。
在.ssh目录下,创建config文件。
vim ~/.ssh/config
配置如下:
Host gitee.com
HostName gitee
User jipengju
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitee
Host gitlab.com 此处为公司的私仓地址,此处先以gitlab代替
HostName gitlab 为远端仓库的别名, 简写 例如: 配置后 git@gitee.com 可以写为 git@gitee
User penn.ji
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab
Port 2222
配置图解:
Host ---------远端仓库的别名,简写 例如: 配置后 git@gitee.com 可以写为 git@gitee
HostName ---------远端仓库地址或IP(不支持配置端口)
User ---------仓库上的用户名
PreferredAuthentications ---------强制使用Publickey验证
IdentityFile ---------指向仓库私钥的绝对路径
Port ---------远端仓库端口,一般不需要设置,特殊情况除外
PS:端口这个地方我踩了坑,因为公司的仓库端口没有代理。
我开始没有配置该项,由于公司仓库链接地址的默认端口为22,导致我一直测试链接不成功。
耽误了不少时间才定位到是端口的问题。
所以一定要确定公司仓库是否有端口,【如果有的话,一定要单独设置一下 Port】~~~~~~
配置完公钥后,还需要再设置一下私钥,不然使用会有问题。
首先请输入命令:
ssh -v git@gitee.com // 查看一下ssh连接情况
会提示你是否继续连接,此处输入yes

然后输入命令:
// ssh-agent是一个linux命令,主要是用来管理密钥的。
ssh-agent-s // -s 生成Bourne shell 风格的命令输出
成功的话,你会得到类似这样的输出:Agent pid 14578
如图:
这一步,你可能会遇到这样的问题:could not open a connection to your authentication agent.
[提示连接失败]
解决办法:命令如下:
eval `ssh-agent -s` 或者 eval "$(ssh-agent -s)"
接着继续执行私钥,将SSH key添加到ssh-agent。
ssh-add ~/.ssh/id_rsa_gitee // 将gitee私钥添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 将gitlab私钥添加到本地
如图:
这一步,你可能会出现这样的问题:Permission denied (publickey)
[提示没有权限]
可以参照官方文档排查[ [github SSH问题排除]传送门]
总结起来无非就是几种原因:
1、检查远程服务器IP和端口是否错误,确保可以正确连接
2、检查密钥密码锁是否设定有误,确保密码可以登陆远端仓库
3、检查公钥是否正确添加到远端仓库
以上均检查没问题后,
解决办法:重复执行私钥
ssh-add -k ~/.ssh/<你当前的rsa文件> // 可以把密码添加到钥匙串以后只需要ssh-add就可以了
ssh-add ~/.ssh/id_rsa_gitee // 将gitee私钥添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 将gitlab私钥添加到本地
或者这样的问题:
一直提示你密码输入错误,密码输入不通过后提示这样:Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
我当时遇到这个问题的原因是,我把gitlab的密码输入错误导致的,解决办法和上面一样。
上一步操作正常后,
如果你在创建密钥时输了密码,则会提示:Enter passphrase for /homex/.ssh/id_rsa:
输入创建密钥时的密码,回车即可。
添加完之后,可以使用以下命令检测私钥是否置成功。
ssh-add -l
输出如图,则证明添加成功了。
测试命令:
ssh -T git@gitee [第五步的Host配置过的简写] 或者 ssh -T git@gitee.com [全拼]
ssh -T git@gitlab [第五步的Host配置过的简写] 或者 ssh -T git@gitlab.com [全拼]
出现类似如图提示,则证明你完成了所有的配置项,远程仓库连接成功!
因为git分为 System > Global > Local 三级。 分别为:系统级、全局、仓库级。
如果没有进行此步设置,你可能会遇到push代码时, 提交的用户名变成你的系统主机名。
不要慌张,
这里需要你单独设置一下。为什么呢? 还记得第一步的时候,我们清除了global的配置吗,也就意味着,后面的配置我们不上升至全局,而只针对具体项目。
所以,
我们要对每个仓库,单独配置用户名信息。
假设我们要配置github的某个仓库,如图,我要设置components-test的git配置
我需要以仓库级(local) 设置一下当前仓库的git相关配置:
git config --local user.name "penn.ji"
git config --local user.email "penn.gitee@xxx.com"
设置完后,查看该仓库的git配置信息:
git config --local --list
如图,则意为设置成功。

其他仓库也设置其对应的git账户信息。
此时,你的git账号已经完全独立互不干扰,你可以通过不同的git账号,在不同的仓库pull或者push了!!!
完结撒花❀❀❀❀❀❀❀❀~~
以上,
就是本次配置攻略的全部过程,如果能够帮助到你, 麻烦给个小赞支持一下~~~~~
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']