本地的Git如何设置配置,同时对接gitee与github

由于gitee与giehub各自的独有的优势,有时本地的Git 需要同时与两个代码仓库进行交互,故需要同时设置配置,避免ssh冲突。本文本地环境是mac

  1. 生成两个仓库账号 各自的私钥和公钥

密钥的路径:.ssh

如果该路径下没有文件,认为目前本机还没有生成git密钥

执行如下操作:

1
2
3
#生成 key,将邮件地址替换为你 Gitee 或者 Github 使用的邮件地址

ssh-keygen -t rsa -C "xxx@xxx.com"

生成如下文件,其中id_rsa_gitee.pub为公钥,id_rsa_gitee为私钥:

  1. 将生成的公钥,配置到gitee及github各自账户下
    gitee公钥设置位置如下:

github公钥设置位置如下:

用文本编辑器(如记事本、notepad++、atom等)打开公钥的 XXX.pub文件,复制内容到两个仓库账号的 公钥配置位置。

  1. 在.ssh目录下新建config.txt文件,编辑配置内容如下,去掉后缀保存文件名为config
1
2
3
4
5
6
7
8
9
10
11
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitee

# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github

如何解决GitHub在git推送时一直要求提供用户名密码的问题

git clone 我的一个现有的demo(在Github中添加了SSH密钥),修改了一些文件,并试图 ,但它一直要求提供用户名和密码,以进行 操作?git push
终端显示要输入账号密码,还无法进行提交

1
2
3
4
5
6
7
8
9
git push

Username for 'https://github.com':
Password for 'https://github.com':

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/mkyong/spring-boot/'

原因: 密码认证被删除
即使我们输入了正确的用户名和密码,Github仍然不允许推送,因为密码认证在2021年8月13日被移除。请使用个人访问令牌代替

解决办法: 使用SSH,而不是HTTPS
这个问题的主要原因是错误地使用了git clone HTTPS URL;我们需要SSH URL来使用SSH密钥。解决方法是更新.git/config 文件,url 值为SSH而不是HTTPS。

进入 demo 目录,打开文件.git/config.
打开config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/demo/spring-boot
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

url 从HTTPShttps://github.com/mkyong/spring-boot 更新为SSHgit@github.com:mkyong/spring-boot.git
修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:mkyong/spring-boot.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

完成后,再试试git push 就可以使用了

git init
git config –global user.name “your name”
git config –global user.email “your email”
git remote -v 查看远程仓库

git clone 克隆远程仓库(https[账户密码]或ssh)

git branch -a 查看所有分支
git branch -r 查看远程分支
git checkout -b dev origin/dev 创建本地分支dev,并切换到该分支

git add . 添加文件到暂存区
git commit -m “提交说明” 提交到本地仓库

git push origin master 推送本地仓库到远程仓库

git checkout master 切换到master分支

git merge dev 合并dev分支到master分支

git push origin dev 推送本地分支dev到远程仓库

回退版本处理

如果你已经将一个文件提交到了远端仓库,并希望撤销这个提交,你需要谨慎地操作,因为这会影响到项目的历史记录和可能与其他人的工作发生冲突。以下是几种可能的情况和对应的解决方案:

  1. 刚刚提交到远端,还没有人拉取这个提交
    如果刚刚提交到远端,并且确信没有人已经拉取了这次提交,你可以通过以下步骤来撤销:

回退本地提交:
使用 git reset 命令来回退你的本地仓库到一个更早的提交。比如,要回退到前一次提交,可以使用:

1
git reset --hard HEAD~1

这里的 --hard 选项会丢弃自那次提交以来所做的所有更改和提交。

强制推送回远端:
使用 git push 命令的 --force--force-with-lease 选项来更新远端仓库,使其与你的本地仓库保持一致。--force-with-lease 是一个更安全的选择,因为它会在远端分支的引用没有变化的情况下才允许强制推送。

1
git push origin your-branch-name --force-with-lease
  1. 已经有人拉取了这次提交
    如果已经有其他人拉取了这次提交,那么直接回退并强制推送可能会导致问题,因为这会改变历史记录,使得其他开发者的仓库与远端仓库不一致。

在这种情况下,有几种解决方案:

使用 git revert
git revert 会创建一个新的提交,这个提交会撤销指定提交所做的更改。这不会改变项目历史记录,是更安全的选择。

1
2
git revert <commit-hash>  
git push origin your-branch-name

沟通并协调:
如果这次提交是一个错误或不应该被包含,最好的做法是与其他团队成员沟通,看看他们是否已经基于这个提交进行了工作。如果可能,最好找到一种方式来协调更改,而不是直接回退。

  1. 注意事项
    在执行任何会改变历史记录的操作之前,确保你有一个完整的备份。
    如果你在一个团队项目中工作,确保与你的团队成员沟通你的计划,以避免不必要的问题和冲突。
    使用 –force-with-lease 而不是 –force,除非你真的确定远端分支没有变化。
avatar
懒觉猫先生
欢迎你们的到来!
关注我吧
最新文章
最新评论
正在加载中...
网站资讯
文章数目 :
177
已运行时间 :
本站总字数 :
120.4k
本站访客数 :
本站总访问量 :
最后更新时间 :