文章目录
git@ssh.github.com: Permission denied (publickey)
当你遇到 git@ssh.github.com: Permission denied (publickey)
错误时,这通常意味着 GitHub 无法使用你提供的 SSH 密钥进行身份验证。以下是一些解决步骤,帮助你排查和解决问题:
1. 检查 SSH 密钥
确保你已经生成了 SSH 密钥,并且将其添加到了 GitHub 账户中。
生成新的 SSH 密钥
如果你还没有生成 SSH 密钥,可以使用以下命令生成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按照提示操作,通常会生成两个文件:id_rsa
(私钥)和 id_rsa.pub
(公钥)。
添加 SSH 密钥到 GitHub
-
打开生成的公钥文件:
cat ~/.ssh/id_rsa.pub
-
复制公钥内容。
-
登录到 GitHub,进入账户设置,找到 “SSH and GPG keys” 部分,点击 “New SSH key”。
-
给 SSH 密钥起一个描述性的标题,然后将公钥内容粘贴到键值框中,点击 “Add SSH key”。
2. 配置 SSH 代理
确保 SSH 代理正在运行,并且你的私钥已经添加到代理中。
启动 SSH 代理
eval "$(ssh-agent -s)"
添加私钥到 SSH 代理
ssh-add ~/.ssh/id_rsa
3. 检查 SSH 配置文件
确保你的 SSH 配置文件 ~/.ssh/config
中没有错误的配置。你可以添加以下内容来确保使用正确的密钥:
Host github.com
HostName ssh.github.com
User git
IdentityFile ~/.ssh/id_rsa
Port 443
4. 测试 SSH 连接
再次测试 SSH 连接,确保可以成功连接到 GitHub:
ssh -T git@github.com
5. 检查防火墙和网络设置
确保你的防火墙和网络设置没有阻止 SSH 连接。你可以尝试从不同的网络环境(如家庭网络或移动数据)进行测试。
6. 检查 GitHub 账户设置
确保你的 GitHub 账户没有启用双因素认证(2FA),或者如果你启用了 2FA,确保你已经生成了 SSH 密钥并正确添加到 GitHub。
详细步骤
-
生成新的 SSH 密钥:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-
添加 SSH 密钥到 GitHub:
- 打开公钥文件:
cat ~/.ssh/id_rsa.pub
- 复制公钥内容。
- 登录 GitHub,进入账户设置,找到 “SSH and GPG keys” 部分,点击 “New SSH key”。
- 给 SSH 密钥起一个描述性的标题,将公钥内容粘贴到键值框中,点击 “Add SSH key”。
- 打开公钥文件:
-
启动 SSH 代理并添加私钥:
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa
-
检查 SSH 配置文件:
- 编辑
~/.ssh/config
文件:nano ~/.ssh/config
- 添加以下内容:
Host github.com HostName ssh.github.com User git IdentityFile ~/.ssh/id_rsa Port 443
- 编辑
-
测试 SSH 连接:
ssh -T git@github.com
通过这些步骤,你应该能够解决 Permission denied (publickey)
错误,并成功连接到 GitHub。如果问题仍然存在,请检查 GitHub 的文档和社区支持,以获取更多帮助。
更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
To github.com:FULLK/glibc-chunk-poc-basic.git
! [rejected] main -> main (non-fast-forward)
error: 无法推送一些引用到 'git@github.com:FULLK/glibc-chunk-poc-basic.git'
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull ...')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。
你遇到的错误信息表明,你的本地分支 main
落后于远程仓库的 main
分支。这种情况下,Git 会拒绝推送,因为推送可能会覆盖远程仓库的更新。解决这个问题的正确方式是先同步你的本地代码与远程仓库的代码。
以下是几种解决方法的详细步骤:
1. 使用 git pull --rebase
要解决这个问题,首先建议你使用 git pull --rebase
,它会将远程仓库的更改应用在本地的提交之前,而不会创建额外的合并提交(避免产生多余的 merge commit)。
git pull --rebase origin main
这个命令会执行以下操作:
- 从远程仓库拉取最新的
main
分支。 - 重新应用你的本地提交在远程分支的基础上。
- 如果有任何冲突,你需要手动解决冲突,解决后继续执行
git rebase --continue
。
一旦 git pull --rebase
完成,继续执行推送:
git push -u origin main
2. 手动合并远程分支
如果你不想使用 rebase
,也可以通过手动合并的方式解决。
首先,拉取远程仓库的最新更改:
git pull origin main
如果没有冲突,Git 会自动合并远程的 main
分支与本地的 main
分支。
如果有冲突,Git 会提示你哪些文件有冲突。你需要编辑这些文件并解决冲突,解决完成后,执行以下命令完成合并:
git add <解决了冲突的文件>
git commit
然后,你可以再次尝试推送:
git push -u origin main
3. 强制推送(不推荐)
如果你确定远程仓库的更改可以被覆盖(例如,你是唯一的贡献者,或者远程的 main
分支的更新无关紧要),你可以使用强制推送。不过,这种方式可能会丢失远程的历史记录,慎用。
git push -f origin main
强制推送的副作用:
- 覆盖远程的历史记录。如果其他人基于远程的
main
分支做了工作,强制推送可能会导致他们的工作丢失或产生冲突。 - 无法恢复。一旦你强制推送,远程仓库的历史记录就会被重写,恢复远程仓库的状态将非常困难。
因此,除非你完全确定远程分支的状态可以被忽略,建议不要使用强制推送。
总结
- 推荐方法: 使用
git pull --rebase origin main
来同步远程和本地的分支,然后再推送。 - 合并方法: 使用
git pull origin main
来合并远程的更改。 - 强制推送(不推荐): 如果远程的更改不重要或可以被覆盖,可以使用
git push -f
强制推送。
通常情况下,前两种方法是更安全和推荐的做法。
git lfs installError: Failed to call git rev-parse --git-dir: exit status 128 Git LFS initialized.
https://blog.csdn.net/weixin_44740756/article/details/132103949
去到仓库目录
git lfs install
1. 跟踪大文件
告诉 Git LFS 你希望跟踪哪些文件。例如,你可以指定所有 .tar.gz
文件都由 Git LFS 管理:
git lfs track "*.tar.gz"
这会在你的仓库根目录下创建或更新一个 .gitattributes
文件,内容如下:
*.tar.gz filter=lfs diff=lfs merge=lfs -text
2. 添加 .gitattributes
文件
将 .gitattributes
文件添加到 Git 仓库中:
git add .gitattributes
3. 添加大文件
将大文件添加到 Git 仓库中:
git add glibc/debug_glibc-master.tar.gz
4. 提交更改
提交这些更改:
git commit -m "Add large file using Git LFS"
5. 推送更改
将更改推送到远程仓库:
git push origin main
6. 验证
确保文件已经被 Git LFS 正确管理,而不是直接存储在 Git 仓库中。你可以检查远程仓库中的 .gitattributes
文件和 glibc/debug_glibc-master.tar.gz
文件,确保 glibc/debug_glibc-master.tar.gz
文件已经被替换为一个指向 Git LFS 的指针文件。
7. 其他注意事项
- 克隆仓库:如果你的仓库已经使用了 Git LFS,其他用户在克隆仓库时需要安装 Git LFS 并使用
git lfs pull
命令来下载大文件。 - 迁移现有大文件:如果你的仓库中已经存在大文件,可以使用
git lfs migrate
命令将这些文件迁移到 Git LFS。
迁移现有大文件
如果你的仓库中已经存在大文件,可以使用以下命令将其迁移到 Git LFS:
git lfs migrate import --include="*.tar.gz" --include-ref=refs/heads/main
这会将指定的文件迁移到 Git LFS,并重写历史记录以使用 Git LFS 指针文件。
示例
假设你的仓库中已经有一个大文件 glibc/debug_glibc-master.tar.gz
,你可以按照以下步骤操作:
-
安装 Git LFS(你已经完成了这一步):
git lfs install
-
跟踪大文件:
git lfs track "*.tar.gz"
-
添加
.gitattributes
文件:git add .gitattributes
-
添加大文件:
git add glibc/debug_glibc-master.tar.gz
-
提交更改:
git commit -m "Add large file using Git LFS"
-
推送更改:
git push origin main