目录

一、生成ssh公私钥

步骤 1: 打开终端

步骤 2: 生成密钥对

步骤 3: 输入密码(可选)

步骤 4: 验证生成的密钥

步骤 5: 使用SSH密钥

二、 git 上传项目

三、尝试向GitHub推送代码时收到"Permission denied (publickey)"错误

步骤 1: 确认SSH公钥已添加到GitHub

步骤 2: 确认SSH密钥已加载到SSH代理

步骤 3: 尝试SSH到GitHub

步骤 4: 再次尝试git操作

一些其他的错误: 

1) SSH agent 错误, 出现在windows wsl 环境

2) ssh -T git@github.com 仍登录失败

三、vscode 远程链接 ssh config 配置

四、git lfs 上传大文件

五、git 上传忽略一些文件的 .gitignore 文件项目根目录创建 .gitignore 文件, 格式如下

六、git 设置用户

七、git 提交合并


一、生成ssh公私钥

生成自定义名称的SSH公钥和私钥对,需要使用ssh-keygen命令,这是大多数Linux和Unix系统自带的标准工具。下面,简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对

步骤 1: 打开终端

首先,打开我们的终端(或命令提示符)。在Windows上,我们可能需要使用PuTTYgen或者通过Git Bash来执行相似的命令,但这个指南将关注标准的Unix-like环境。

步骤 2: 生成密钥对

接下来,使用以下命令生成一个新的SSH密钥对。这里,your_custom_name应该被替换为我们想要用于密钥文件的名称。不要加.pub或者任何其它的后缀,因为ssh-keygen会自动为公钥文件添加.pub后缀。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/your_custom_name

这条命令中的参数说明如下:

  • -t rsa: 指定密钥类型,这里是RSA。
  • -b 4096: 指定密钥的位数,这里是4096位,当前推荐的安全长度。
  • -C "your_email@example.com": 添加一个注释(通常是电子邮件地址)到密钥中。这对于识别用途在哪、属于谁很有帮助。
  • -f ~/.ssh/your_custom_name: 指定生成密钥的路径和文件名。这里~/.ssh/是SSH目录的标准位置,your_custom_name是你的自定义文件名。

步骤 3: 输入密码(可选)

在执行命令后,系统可能会提示我们输入一个密码(passphrase)。这一步是可选的,但是推荐我们为密钥对设置一个密码以增加安全性。如果不想设置密码,直接按回车键跳过。

步骤 4: 验证生成的密钥

生成密钥对后,我们可以通过列出~/.ssh目录的内容来验证它们是否成功创建:

ls ~/.ssh

应该看到我们的自定义文件名和同名的.pub文件,例如:

your_custom_name  your_custom_name.pub

your_custom_name是私钥文件,而your_custom_name.pub是公钥文件。

步骤 5: 使用SSH密钥

现在我们已经有了自定义命名的SSH密钥对,可以开始使用它们了。例如,我们可以把公钥(.pub文件)添加到想要通过SSH连接的服务器上的~/.ssh/authorized_keys文件中,从而实现无密码登录。

这样,我们就成功生成了一个自定义命名的SSH密钥对。确保保管好私钥,并且只将公钥共享给需要它的服务或个人。

二、 git 上传项目

参考链接:用git上传项目到GitHub(图文并茂,这一篇就够了)

首先在github官网上创建一个项目仓库,创建完成后github会给出初始化本地项目目录的命令用于后续上传,例如:

用于测试的项目仓库

上述的命令略作修改如下:

# 将上面 git add REAME.md 改成 git add .
# 其他命令一样

git add .

github上传大文件(>100M)Git Large File Storage | Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.https://git-lfs.comhttps://git-lfs.com

三、尝试向GitHub推送代码时收到"Permission denied (publickey)"错误

当在尝试向GitHub推送代码时收到"Permission denied (publickey)"错误,意味着GitHub无法通过公钥认证的SSH连接。这个问题通常由以下几个原因引起:

  1. 未将SSH公钥添加到GitHub账户:GitHub需要公钥来验证身份。
  2. SSH密钥没有加载到SSH代理:即使有一个SSH公钥,它也需要被SSH代理加载。
  3. SSH配置问题:有时候SSH配置不正确也会导致这个问题。

按以下步骤来解决这个问题:

步骤 1: 确认SSH公钥已添加到GitHub

  1. 在你的电脑上打开终端,使用cat命令查看你的公钥内容。假设密钥名称为id_rsa.pub,运行:

    cat ~/.ssh/id_rsa.pub

    如果使用的是其他名称,请相应地替换文件名。

  2. 登录到GitHub账户,进入Settings > SSH and GPG keys

  3. 点击New SSH key 按钮,将公钥(步骤1中显示的内容)粘贴到框中,并保存。

步骤 2: 确认SSH密钥已加载到SSH代理

  1. 运行ssh-add -l查看已加载的密钥。如果密钥已加载,这个命令将列出它们。

  2. ssh-add -l
  3. 如果你的密钥没有被列出,使用ssh-add ~/.ssh/id_rsa来添加它。如果你使用的是自定义名称,确保正确地替换了路径和文件名。

  4. ssh-add ~/.ssh/custom_id_rsa
    
    # 我的系统是mac os,SSH agent 在一段时间后自动清除了添加的密钥,换句话来说上面的命令添加是临时的,下面有两种解决方案
    1. ssh-add -t 12h ~/.ssh/custom_id_rsa      # 这会将密钥添加到 SSH agent 并保持 12 小时。
    2. ssh-add -K ~/.ssh/custom_id_rsa  # 将密钥永久添加到 SSH agent
    ssh-add --apple-use-keychain ~/.ssh/custom_id_rsa   # 在较新的 macOS 版本中,-K 选项可能已被弃用,你可能需要使用 --apple-use-keychain 选项代替。

步骤 3: 尝试SSH到GitHub

运行以下命令来测试你的SSH连接到GitHub:

ssh -T git@github.com

如果连接成功,你将看到一条欢迎信息。这表示SSH设置正确。

步骤 4: 再次尝试git操作

在确认SSH设置无误后,再次尝试执行你的git命令:

git push -u origin main  # 或 master等

怎么删除之前添加的一些无效的SSH代理呢?

删除之前add的无效SSH代理的方式

假设之前添加了几个不同的密钥到SSH代理,现在想删除它们:

  1. 查看已加载的密钥

    ssh-add -l
  2. 删除特定的密钥(例如:~/.ssh/custom_key):

    ssh-add -d ~/.ssh/custom_key
  3. 删除所有的密钥:

    ssh-add -D

一些其他的错误: 

1) SSH agent 错误, 出现在windows wsl 环境
(base) shayuer@DESKTOP-SHAYUER:~/.ssh$ ssh-add -l
Could not open a connection to your authentication agent.

 解决思路:

1. 这个错误通常表明 SSH agent 没有运行或者没有正确设置。
检查 SSH agent 是否正在运行:
```bash
ps aux | grep ssh-agent
```

2. 以下是解决方案:
# 安装 keychain
sudo apt-get install keychain

# 在 ~/.bashrc 中添加
# eval: 用于执行一个字符串作为 shell 命令。
# keychain --eval --agents ssh github_: 这个命令会告诉 keychain 使用指定的 SSH 密钥进行身份验证。
eval `keychain --eval --agents ssh github_`

3. 高阶
要添加多个 SSH key,你可以在 keychain 命令中列出多个密钥文件,用空格分隔。例如:

在 `~/.bashrc` 中修改为:
```bash
eval `keychain --eval --agents ssh github_ id_rsa gitlab_key another_key`
```

示例说明:
- `github_`: GitHub 的密钥
- `id_rsa`: 默认的 SSH 密钥
- `gitlab_key`: GitLab 的密钥
- `another_key`: 其他服务的密钥

注意:
1. 所有的密钥文件都应该在 `~/.ssh/` 目录下
2. 使用的是完整的密钥文件名(不包含 .pub 扩展名)
3. 修改后需要运行 `source ~/.bashrc` 或重新打开终端使更改生效

所以如果你有多个密钥:
```bash
~/.ssh/github_
~/.ssh/gitlab_key
~/.ssh/company_key
```

你可以这样配置:
```bash
eval `keychain --eval --agents ssh github_ gitlab_key company_key`
```

更多 keychain 选项:
- `--quiet`: 减少输出信息
- `--noask`: 不询问密码
- `--timeout 360`: 设置超时时间(分钟)

例如:
```bash
eval `keychain --quiet --eval --agents ssh --timeout 360 github_ gitlab_key`
```

刷新一下 .bashrc 或 .zshrc 文件
```bash
source ~/.bashrc
```

待上文配置完成后第一次运行时需要先运行下面的命令:

ssh -T git@github.com 
2) ssh -T git@github.com 仍登录失败

如果 ssh -T git@github.com 仍然无法连接github(我的 win11 使用NAT网络格式的wsl2子系统无法连接,而镜像代理模式是可以连接的),判断可能是网络代理的问题,可以使用网络代理本地的22端口连接远处的github.com 22端口

1. 首先使用 ssh -o "ProxyCommand=nc -x 172.18.144.1:7890 %h 22" git@github.com 连接 github.com 22 端口,我可以连接成功,证明确实是网络代理相关问题。其中 172.18.144.1:7890 是 wsl2 同一网段下win11 的代理地址,实际需要替换为自己的网络代理。

2. 而当使用 ssh -T git@github.com 访问github时,仍然无法访问,此时需要在 ~/.ssh 目录下创建一个 config 文件,用于设置 ssh 在连接 github 时使用网络代理,内容如下

Host github.com    # 自定义设置
  HostName github.com  # ssh 的目标服务器
  User git
  Port 22              # 端口,也可以使用 443
  IdentityFile ~/.ssh/github_11    # github GPG 公钥
  ProxyCommand nc -v -x local.windows11.proxy:7890 %h %p        # 网络代理,需要将 local.windows11.proxy:7890 改为自己的网络代理
  IdentitiesOnly yes
  AddKeysToAgent yes

3. 保存后会立即生效,直接使用 ssh -T git@github.com 登录,最后登录成功如下,大功告成

三、vscode 远程链接 ssh config 配置

Host 主机1                                            # 可定义名称
  HostName 远程ip地址或域名
  Port 22435                                         # 远程端口
  User root                                          # 远程登录名
  IdentityFile /Users/XXXXX/.ssh/id_rsa_XXXXX        # 私钥地址(可选)

Host 主机2                                            # 可定义名称
  HostName 远程ip地址
  Port 19351                                          # 远程端口
  User root                                           # 远程登录名
  LocalForward 8080 localhost:8080                                  # 映射端口(可选)
  IdentityFile /Users/XXXXX/.ssh/id_rsa_XXXXX                     # 私钥地址(可选)

Host 主机3
  HostName 远程ip地址或域名
  User root
  ForwardAgent yes                                    # 不使用私钥,每次需输入密码

四、git lfs 上传大文件

## 一、什么是 Git LFS?

**Git LFS** 是一个 Git 扩展,用于更有效地管理和存储大文件。它通过将大文件存储在专用的服务器上,而在 Git 仓库中只保存指向这些文件的引用,从而避免仓库体积过大。

## 二、Git LFS 的优点

1. **减小仓库体积**:大文件不直接存储在 Git 对象库中,保持仓库的轻量。
2. **提高性能**:克隆和拉取操作更快,因为只下载需要的文件版本。
3. **版本控制**:仍然可以对大文件进行版本控制,追踪更改历史。

## 三、如何安装和配置 Git LFS

以下是使用 Git LFS 管理大文件的步骤:

### 1. 安装 Git LFS

根据你的操作系统选择相应的安装方法:

- **macOS**:
  使用 Homebrew 安装:
  ```bash
  brew install git-lfs
  ```

- **Linux**:
  使用包管理器安装,例如在 Debian/Ubuntu 上:
  ```bash
  sudo apt-get install git-lfs
  ```

### 2. 初始化 Git LFS

在你的仓库中初始化 Git LFS:

```bash
git lfs install
```

### 3. 指定要使用 Git LFS 管理的文件类型

例如,如果你想使用 Git LFS 管理所有的 `.psd` 文件,可以运行:

```bash
git lfs track "*.psd"
```
你可以根据需要添加更多的文件类型。例如:

```bash
git lfs track "*.zip" "*.mp4" "*.bin"
```

这将会在仓库根目录下创建或更新 `.gitattributes` 文件,内容类似于:
自动生成: 
```
*.psd filter=lfs diff=lfs merge=lfs -text
```


### 4. 添加和提交文件

将大文件添加到 Git 仓库中:

```bash
git add .gitattributes
git add path/to/your/largefile.psd
git commit -m "Add large file with Git LFS"
```

### 5. 推送到远程仓库

将更改推送到远程仓库:

```bash
git push origin main
```

**注意**:首次推送时,Git LFS 会上传大文件,因此可能需要一些时间,具体取决于文件大小和网络速度。

五、git 上传忽略一些文件的 .gitignore 文件
项目根目录创建 .gitignore 文件, 格式如下
 

# 忽略 datas/ 目录下的所有文件,但保留 .gitkeep
datas/**
!datas/.gitkeep

# 忽略 logs/ 目录下的所有文件,但保留 .gitkeep
logs/**
!logs/.gitkeep

# Python 编译文件
__pycache__/
*.py[cod]

# 虚拟环境
# venv/
# .env

# 包管理
# build/
# dist/
# *.egg-info/

# 日志文件
# *.log

# IDE 和编辑器配置
# .vscode/
# .idea/
# *.sublime-project
# *.sublime-workspace

# 操作系统生成的文件
.DS_Store
Thumbs.db

# Jupyter Notebook 检查点
# .ipynb_checkpoints/

# 其他临时文件
# *.tmp
# *.swp
# 删除旧代码的 缓存
git rm -r --cached .
# 添加新的文件
git add .

然后重新提交

六、git 设置用户

设置 Git 用户信息可以通过以下命令操作:

1. 设置全局用户名和邮箱(对所有仓库生效):
```bash
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
```

2. 设置单个仓库的用户名和邮箱(只对当前仓库生效):
```bash
git config user.name "你的用户名"
git config user.email "你的邮箱"
```

3. 查看配置:
```bash
# 查看所有配置
git config --list

# 查看用户名配置
git config user.name

# 查看邮箱配置
git config user.email
```

4. 修改配置:
```bash
# 修改全局用户名
git config --global user.name "新用户名"

# 修改全局邮箱
git config --global user.email "新邮箱"
```

5. 删除配置:
```bash
# 删除全局用户名配置
git config --global --unset user.name

# 删除全局邮箱配置
git config --global --unset user.email
```

6. 配置文件位置:
- 全局配置文件通常在:`~/.gitconfig`
- 单个仓库配置文件在:`.git/config`

注意事项:
1. 用户名和邮箱最好使用实际的或者与你的 Git 托管服务(如 GitHub)一致的信息
2. 全局配置对所有仓库生效,但可以被单个仓库的配置覆盖
3. 设置时注意要在引号内输入完整的用户名或邮箱

示例:
```bash
# 设置全局配置
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"

# 验证设置
git config --list
```

七、git 提交合并

两种方式

1. 使用类似vscode IDE的git插件提交后,登录github后项目main支路会提示合并,按照步骤合并皆可

2. 使用类似vscode IDE的git插件提交后,使用命令进行合并

登录github后项目没有PR:可能之前的 PR 已合并,后续提交没重新发 PR,GitHub 的 PR 是针对某个分支快照的,如果你已经合并了一个 PR(比如 v1.0.1 -> main),后续继续在 v1.0.1 提交新的代码,GitHub 不会自动创建新的 PR 提醒,你需要手动重新发起一个新的 Pull Request。

合并步骤如下

# 先切回 main 分支
git checkout main

# 拉取最新远程同步(避免冲突)
git pull origin main

# 合并代码版本,例如v1.0.1分支的改动
git merge v1.0.1

# 推送更新后的 main
git push origin main

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐