文章

git操作

基本操作

本地拉取和推送

  • 鼠标右键——>更多属性——>open Git Bash Here

  • git pull origin master:更新本地仓库版本至最新
  • (常用)git提交本地仓库更新:

    • git add 文件名 :暂存对应文件。文件名为通配符.的话,则将当前所在路径下的所有已修改文件暂存。
    • git status:检查暂存区状态。
    • git commit -m "提交备注:描述你的修改内容"
    • git push -u origin 你的分支名

git bash终端操作

  • q 退出;
  • ……

仓库配置

配置 SSH Keys

  1. 本地git配置ssh公钥:在目标文件夹中打开git Bash,执行命令。

    1
    2
    
    # 运行密钥生成命令,一路回车
    ssh-keygen
    
  2. 将ssh公钥配置到github仓库:

    • 在本地git中执行命令,复制公钥内容。

      1
      2
      3
      
      # 公钥地址在生成公钥时会显示
      # 复制命令的所有输出
      cat <你的公钥地址(以.pub结尾)>
      
    • 在仓库中打开“Settings——侧边栏Deploy keys”,点击添加key,粘贴公钥内容。

  3. 测试ssh连接:执行命令。

    1
    2
    
    # 测试能否连接到github,这样才能使用github的服务(大概)
    ssh -T git@github.com
    

    当连接成功时,会显示如下消息(可能会因为网络关系较慢才显示):

    Hi <username>! You’ve successfully authenticated, but GitHub does not provide shell access.

补充

  • SSH密钥生成时,会创建两个文件:

    • 私钥文件:~/.ssh/xxx_rsa

      公钥文件:~/.ssh/xxx_rsa.pub

  • 检查&清除以前的全局配置:

    1. git config --global --list检查配置
    2. 本地如果已有全局设置--global user.name--global user.email,执行git config --global --unset user.namegit config --global --unset user.email命令清除设置。
      • (END):按q退出git。

克隆仓库

  1. 获取代码库ssh地址:打开代码库主页“Code——Local——SSH”,复制以git@github.com开头、以.git结尾的地址。

  2. 在git Bash中执行以下命令。

    1
    
    git clone <你的代码库ssh地址>
    

最后,就可以快乐的pull和push了(*^▽^*)!

报错收集

fatal: not a git repository (or any of the parent directories): .git

这个错误提示表明当前目录 不是一个 Git 仓库,因为该目录中没有 .git 文件夹(它保存了 Git 的版本控制信息)。

同一账户下管理多个仓库

在我写完OS四个实验后,想顺手把OS实验代码上传Github,就想在本地同一个文件夹下管理多个远程仓库的本地clone。那同一个父文件夹下的话,能不能用同一个ssh key来管理?

尝试了将父文件夹原来已投入使用的ssh key粘贴到代码库上,但是被Github告知“公钥已被使用”——有没有解决方法?

“如果在一台服务器上使用多个仓库,则需要为每个仓库生成专用密钥对。 不能对多个仓库重复使用一个部署密钥。”

想要同一个key统管多个仓库是不可能了,但是我们可以通过配置~/.ssh/config文件来实现“在同一文件夹下管理多个本地仓库”。

步骤:

  1. 生成带命令参数的不同SSH Keys

    1
    2
    
    ssh-keygen -t rsa -f ~/.ssh/repo1_rsa -C "repo1 user"
    ssh-keygen -t rsa -f ~/.ssh/repo2_rsa -C "repo2 user"
    

    代码解释:

    • “-t rsa”:指定生成的密钥类型。
    • “-f xxx”:指定生成的密钥文件路径和名称。
    • “-C repo1 user”:添加密钥注释(注释通常是用来标识密钥用途的,可以是任意内容,方便区分多个密钥)。
  2. 配置~/.ssh/config(在 SSH 配置文件中配置多个 Host)

    在git bash中,通过记事本打开~/.ssh/config文件。

    1
    
    notepad ~/.ssh/config  # 使用 Notepad 打开
    

    文件内原有的配置不变,在空白的地方加上新的 Host 配置。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    # 原来的(全局默认)配置——因为我曾为我的 Github 账号设置了SSH Key
    # gitHub
    Host github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa.github
           
    # 新添加的 Host 配置,为特定仓库设置别名
    Host repo1
    	Hostname github.com
    	User git
    	IdentityFile ~/.ssh/repo1_rsa
    

    代码解释:

    • Host:在 Git 操作中使用的标识,可以是任意名字(如 repo1myproject)。如果 Host 名称和实际的域名一致(如 github.com),会覆盖默认的行为。
    • HostName:实际的远程服务器地址。例如,GitHub 的服务器地址是 github.com
    • User:一般都是 git。
    • IdentityFile:指定用于认证的私钥路径,如 ~/.ssh/repo1_rsa

    两者的主要区别:

    • 第一段:适合全局的 GitHub 配置(替代默认 id_rsa 密钥)。
    • 第二段:适合为特定项目或仓库使用独立的密钥
  3. 使用新的ssh地址进行仓库克隆

    可以通过仓库别名测试配置,确保能正常连接到远程服务器:

    1
    2
    
    ssh -T repo1
    ssh -T github
    

    然后通过含有别名 Host 的“新地址”,来克隆你的新仓库。

    1
    
    git clone git@repo1:<repos1_url>
    
  4. 在本地仓库中配置你的user信息

    因为全局设置被覆盖,此时直接push仓库会出现提示信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Author identity unknown
       
    *** Please tell me who you are.
       
    Run
       
      git config --global user.email "you@example.com"
      git config --global user.name "Your Name"
       
    to set your account's default identity.
    Omit --global to set the identity only in this repository.
       
    fatal: unable to auto-detect email address (...)
    

    执行命令,在git bash中设置你的本地user信息。鉴于可能会不只在Github一个代码平台上提交,不建议设置为全局。

    1
    2
    3
    4
    
    # 使用你注册Github时的账号个人信息
    # 默认(大概)是local属性
    git config user.name "Your GitHub Username"
    git config user.email "your-Github_email@example.com"
    

    之后就可以正常的push代码到仓库里了!:smiley::+1:

参考文档

多代码平台的git配置:

day-day-up | 配置同时使用Gitlab、Github、Gitee(码云) 共存的开发环境

SSH Keys 配置:

Git SSH Keys 配置 - Git 进阶指南

SSH 公钥设置 | Gitee 产品文档

测试 SSH 连接 - GitHub 文档

在 Git 中设置用户名 - GitHub 文档

克隆仓库- GitHub 文档

多仓库管理:

让多个Github 仓库使用相同的Deploy Key - SHUHARI 的博客

在一台服务器上使用多个仓库 - Github 文档

Github 同一账号怎么用不同的SSH key 管理多个仓库

本文由作者按照 CC BY 4.0 进行授权