起因:在vscode上上传代码到github上,能保存修改记录,但是推送到远端github仓库失败,报错
这个错误提示意味着Git无法访问你指定的远程代码仓库,可能是由于网络问题或其他原因导致连接被重置。这里排除了网络配置,远程仓库地址等问题后,尝试使用SSH协议:如果你使用的是HTTPS形式的URL,可以尝试使用SSH形式的URL进行下载,这样可能会更加稳定。需要先在本地生成一份SSH公钥,并将其添加到远程代码仓库的用户设置中。
实操如下:
无论您使用什么编程软件或工具,将代码推送到GitHub上都是基于Git工作的。所以这里是在GitBash上操作基础命令行是否可用
Git是一种分布式版本控制系统,它适用于各种类型的项目和编程语言,并且可轻松与各种代码编辑器和IDE集成。因此,您可以在VS Code、PyCharm等各种编程软件中使用Git来管理项目,并将其推送到GitHub及其他代码托管服务上。
Git主要有两种协议用于连接到GitHub仓库,分别是 SSH 协议和 HTTPS 协议。
-
SSH协议:使用SSH协议与GitHub建立连接时,您将使用公钥和私钥对进行身份验证。此外,在每次与GitHub进行通信时,都需要使用加密算法进行加密。这使得SSH协议更加安全,并且可以在不频繁输入密码的情况下访问仓库。
-
HTTPS协议:与SSH不同,HTTPS协议需要使用用户名和密码进行身份验证,它采用TLS加密层来保护数据传输。相比SSH协议,使用HTTPS协议与GitHub建立连接时,需要频繁输入密码,但更加易于设置。
首先要测试git基本命令行的环境配置是否成功,可以按照以下步骤进行:
- 打开终端或命令行窗口
- 输入命令“git --version”并按下回车键
- 如果系统中已经安装了Git,并且环境变量配置正确,命令行会显示Git的版本信息,说明环境配置成功
- 如果系统中没有安装Git,或者环境变量配置不正确,则命令行会提示“git is not recognized as an internal or external command, operable program or batch file”,说明环境配置失败,需要重新配置环境变量或安装Git。
如果测试结果显示环境配置成功,便可以使用Git命令行对代码仓库进行下一步管理。
使用Git命令行对代码仓库进行管理,以下是一些基本的测试命令行:
- “git init”:将当前目录初始化为Git代码仓库
- “git clone [repository URL]”:从远程仓库下载代码到本地
[repository URL]指的是远程代码仓库的URL地址,通常有两种形式:A.HTTPS形式 B.SSH形式 - “git status”:查看当前代码仓库状态,如未跟踪的文件、已修改但未提交的文件等
- “git add [file name]”:将未跟踪或修改过的文件添加到暂存区
- “git commit -m '[commit message]'”:将暂存区的文件提交到代码仓库,并添加提交信息
- “git push origin [branch]”:将本地代码仓库的修改推送到远程仓库的指定分支中
- “git pull origin [branch]”:将远程仓库的指定分支中的修改拉取到本地代码仓库中
举个例子说明如何使用“git clone”命令从远程代码仓库下载代码:
- 打开Git Bash,在命令提示符后输入“cd D:/”进入D盘根目录(如果希望下载到其他磁盘,替换D为相应的磁盘盘符即可)。
- 输入“mkdir my-code”创建一个用于存放代码的文件夹,并按下回车键,此时会创建一个名为“my-code”的文件夹。
- 进入到该文件夹中,输入“cd my-code”,并按下回车键。
- 输入“git clone https://github.com/thousandsofcode/GitTestWin.git”(换成自己的账号和仓库),并按下回车键。
- 通过“git init”命令将当前目录初始化为一个Git代码仓库
这样就能够成功下载代码到本地的D盘的my-code文件夹中了。需要注意的是,在Git Bash中,路径分隔符是斜杠“/”,而不是反斜杠“\”。
进入工作目录并使用“git status”命令查看本地仓库状态:
- 打开终端或Git Bash,并输入“cd D:/my-code”(假设你将远程仓库克隆到了D盘下名为my-code的文件夹中),并按下回车键。
- 进入到该文件夹中,输入“cd GitTestWin”(假设该文件夹名为GitTestWin,这是远程仓库的名称),并按下回车键。
- 现在你已经进入到了该代码仓库的本地工作目录中。可以执行“git status”命令,查看当前工作目录下所做的修改、添加或删除文件等状态。
此时应该返回:“nothing to commit”表示当前没有任何文件或目录被修改过,因此不需要进行提交操作。而“working tree clean”表示当前工作区中的所有文件和文件夹都处于Git版本控制之下,并且与最新的提交记录状态一致,没有与最新版本冲突的文件。
在本地工作区中,通过编辑器或其他方式修改本地仓库文件并保存。
已经对代码进行了修改,并希望将更改提交到Git代码仓库中,可以按照以下步骤进行:
-
打开Git Bash,并使用“cd”命令进入到代码仓库所在目录中。例如,输入“cd D:/my-code/GitTestWin”,并按下回车键。
-
使用“git status”命令检查修改是否被Git追踪,并记录哪些文件已被修改。
-
执行“git add <file_name>”或者“git add .”命令将要提交的文件添加到Git的暂存区。
-
如果只想提交一个文件,请将“<file_name>”替换为文件名(例如:“git add index.html”)。
-
如果希望提交所有修改过的文件,请使用“git add .”命令。
-
-
执行“git commit -m '<commit_message>'”命令将修改提交到本地代码仓库。其中,“<commit_message>”是您自己定义的提交消息,应该简明扼要地描述本次修改的内容。例如,“git commit -m 'Update test.c with new content'”。
-
输入“git log”命令可以查看当前分支的提交历史记录。输出中每个条目对应一个提交,可以查看到上一步提交的记录。
-
通过“git push”命令将本地分支上的提交推送到远程仓库github中。因为是http协议传送,会弹出方框让你填写github用户名和密码。
这样,您就可以成功地进行了代码修改与提交。
但是问题就在第6步,它报错了:
fatal: Authentication failed for 'https://github.com/thousandsofcode/GitTestWin.git/'
这个错误提示表明您正在使用旧版 GitHub 验证方式进行推送并且验证失败。为此,我们使用基于SSH密钥对的身份验证方式。这种方法需要您先在本地计算机上配置好SSH密钥对,并将公钥添加到您的GitHub账户设置中。
接下来是SSH密钥对的生成和配置,本人之前在码云中生成过SSH密钥对(开始以为能直接使用码云的ssh),这里提醒:即使您在码云中已经生成了一组SSH密钥,也建议在GitHub上生成和使用新的SSH密钥对,以避免出现安全问题(例如,如果其他人已经获取了您的码云的私钥,那么他们也可能会访问到您在GitHub上的代码)。另外,码云和GitHub是两个不同的平台,因此这两个SSH密钥对是不同的。即使它们的名称相同,它们也包含不同的公钥和私钥,因此不能通用。
如果您还没有为Git配置用户名和电子邮件地址,那么可以使用以下命令在 Git Bash 终端中设置它们:
git config --global user.name "username"
git config --global user.email "Email"
//username和Email换成自己的
- 首先检查本地计算机上是否存在SSH密钥对。在Git Bash终端中执行以下命令
如果存在公钥(以ls -al ~/.ssh
.pub
结尾),则表示您已经拥有SSH密钥对。 - 生成新的 SSH 密钥对。
没有有SSH密钥对的,在命令行终端中输入以下命令:
有SSH密钥对的,在命令行终端中输入以下命令:ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-keygen -t ed25519 -f ~/.ssh/my_new_ssh_key -C "your_email@example.com"
-
然后在提示符下按回车键三次,以接受默认设置并完成密钥对的生成。
- 您的SSH密钥现在已经生成。要查看您的公钥,请输入以下命令:
cat ~/.ssh/id_ed25519.pub 或者 cat ~/.ssh/my_new_ssh_key.pub
-
复制代码
该命令将在终端中显示您的公钥,复制并粘贴公钥(从"ssh-ed25519"开始到最后)到您的 GitHub 账户的 SSH 密钥列表中:
登录GitHub并单击您的个人资料图片,然后单击“Settings”。
在左侧导航栏中,单击“SSH 和 GPG keys”选项卡。
单击“New SSH key”。
输入一个描述性的标题(例如“My Key”)并将您复制的公钥粘贴到“Key”文本框中。
最后,单击“Add SSH key”按钮即可。 - 大概率报错 :Warning: Permanently added 'github.com' (ED25519) to the list of known hosts. git@github.com: Permission denied (publickey).
这个意味着您成功连接到
github.com
SSH 服务器,但由于缺少有效的 SSH 密钥对,未能通过身份验证。这通常是因为 Git 配置了错误的认证方式,例如使用基于密码的 HTTP URL 进行连接。此时,您需要将 Git 配置为使用 SSH 连接。请确保您已经按照之前的回答中所述生成并添加了正确的公钥到您的 GitHub 帐户中。然后,可以尝试以下步骤: -
打开终端或 Git Bash 终端(如果在 Windows 系统上)。
-
进入您的本地 Git 仓库所在的目录。
-
运行以下命令列出当前远程仓库的详细信息,列出当前的远程仓库 URL:
git remote -v
- 删除当前的远程仓库 URL:
git remote remove origin
- 添加新的远程仓库 URL,使用 SSH 协议:
git remote add origin git@github.com:<username>/<repository>.git
-
再运行“git remote -v”命令查看:
- 此时再执行“git push”报错这个错误信息意味着您没有将当前分支与远程仓库的分支进行关联。在执行
git push
命令时,Git 并不知道要将本地分支推送到哪个远程分支。让 Git 自动为没有跟踪分支的新分支设置上游分支,则可以运行以下命令,这将告诉 Git 在推送新分支时自动为新分支设置上游分支。:
git config --global push.default "simple" git config --global push.autoSetupRemote true
-
再运行“git push”报错:
啊 -
要检查Github的SSH协议的私钥文件和公钥文件的权限设置,您可以使用以下命令:
ls -l ~/.ssh/my_new_ssh_key ls -l ~/.ssh/my_new_ssh_key.pub
其中,my_new_ssh_key是您的私钥文件名,my_new_ssh_key.pub是您的公钥文件名。这两个命令将列出文件的详细信息,包括文件所有者、文件类型、权限等。
如果正确设置了权限,那么文件应该如下所示:
-rw------- 1 <your_username> <your_group> 1679 oct 14 19:13 [filename] -rw-r--r-- 1 <your_username> <your_group> 401 oct 14 19:13 [filename].pub
在这里,“your_username”代表您的用户名,“your_group”代表您所属的用户组。
注意,私钥文件(my_new_ssh_key)应具有“-rw-------”权限,这意味着只有所有者具有读写权限,而其他人没有任何权限。公钥文件(my_new_ssh_key.pub)应具有“-rw-r--r--”权限,这意味着所有者具有读写权限,但其他人只有读取权限。
如果权限不正确,在Windows 操作系统,win+r输入cmd,请在 PowerShell 或命令提示符下执行以下命令:
icacls "C:\Users\<user>\.ssh\my_new_ssh_key" /inheritance:r icacls "C:\Users\<user>\.ssh\my_new_ssh_key" /grant:r "%USERNAME%":"(R)" icacls "C:\Users\<user>\.ssh\my_new_ssh_key" /deny "NT AUTHORITY\SYSTEM":(R) //替换<user>为自己的
-
添加您的私钥到 SSH 代理中。在终端运行以下命令:
ssh-add ~/.ssh/my_new_ssh_key
大概率报错:
这个错误通常表示没有在当前 Shell 会话中启动 ssh-agent 或者在使用 ssh-add 命令时没有与 ssh-agent 进行交互 -
启动ssh-agent。您可以运行以下命令来检查 ssh-agent 是否已经在后台运行,如果结果返回了一个或多个进程,那么 ssh-agent 已经在后台运行了。否则,请按照下一步操作启动它:
ps aux | grep ssh-agent
-
启动ssh-agent。请运行以下命令,如果一切正常,您将看到输出提示“Agent pid <数字>”:
eval "$(ssh-agent -s)"
-
将SSH私钥添加到ssh-agent中:
ssh-add ~/.ssh/my_new_ssh_key
如果密钥的名称不是“my_new_ssh_key”,请相应地替换该名称。
-
尝试连接 GitHub 并进行身份验证。在终端运行以下命令:
ssh -T git@github.com
-
至此连接成功:
- 执行“git push”报错:
这个错误通常表示在使用git push
命令时,Git无法确定将哪个远程分支与本地分支进行关联。运行以下命令,在未设置远程跟踪分支时自动进行跟踪,当您通过git push
命令推送本地分支时,Git 将会自动创建与该分支名称相同的远程分支,并将它们关联起来。git config push.default current git config branch.autosetupmerge always
-
然后执行“git push”:
至此终,可在github上个人仓库刷新查看推上去的文件了
=========================================================================