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
-
本地git配置ssh公钥:在目标文件夹中打开git Bash,执行命令。
1 2
# 运行密钥生成命令,一路回车 ssh-keygen
-
将ssh公钥配置到github仓库:
-
在本地git中执行命令,复制公钥内容。
1 2 3
# 公钥地址在生成公钥时会显示 # 复制命令的所有输出 cat <你的公钥地址(以.pub结尾)>
-
在仓库中打开“Settings——侧边栏Deploy keys”,点击添加key,粘贴公钥内容。
-
-
测试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
-
-
检查&清除以前的全局配置:
-
git config --global --list
检查配置 - 本地如果已有全局设置
--global user.name
和--global user.email
,执行git config --global --unset user.name
和git config --global --unset user.email
命令清除设置。- (END):按
q
退出git。
- (END):按
-
克隆仓库
-
获取代码库ssh地址:打开代码库主页“Code——Local——SSH”,复制以
git@github.com
开头、以.git
结尾的地址。 -
在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
文件来实现“在同一文件夹下管理多个本地仓库”。
步骤:
-
生成带命令参数的不同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”:添加密钥注释(注释通常是用来标识密钥用途的,可以是任意内容,方便区分多个密钥)。
-
配置
~/.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 操作中使用的标识,可以是任意名字(如
repo1
、myproject
)。如果Host
名称和实际的域名一致(如github.com
),会覆盖默认的行为。 - HostName:实际的远程服务器地址。例如,GitHub 的服务器地址是
github.com
。 - User:一般都是 git。
- IdentityFile:指定用于认证的私钥路径,如
~/.ssh/repo1_rsa
。
两者的主要区别:
-
第一段:适合全局的 GitHub 配置(替代默认
id_rsa
密钥)。 - 第二段:适合为特定项目或仓库使用独立的密钥
- Host:在 Git 操作中使用的标识,可以是任意名字(如
-
使用新的ssh地址进行仓库克隆
可以通过仓库别名测试配置,确保能正常连接到远程服务器:
1 2
ssh -T repo1 ssh -T github
然后通过含有别名 Host 的“新地址”,来克隆你的新仓库。
1
git clone git@repo1:<repos1_url>
-
在本地仓库中配置你的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代码到仓库里了!
参考文档
多代码平台的git配置:
day-day-up | 配置同时使用Gitlab、Github、Gitee(码云) 共存的开发环境
SSH Keys 配置:
多仓库管理: