【DevOps】Git 图文详解(五):远程仓库

Git 图文详解(五):远程仓库

  • 1.远程用户登录
    • [1.1 🔑 远程用户登录:HTTS](#1.1 🔑 远程用户登录:HTTS)
    • [1.2 🔑 远程用户登录:SSH](#1.2 🔑 远程用户登录:SSH)
  • [2.远程仓库指令 🔥](#2.远程仓库指令 🔥)
  • [3.推送 push / 拉取 pull](#3.推送 push / 拉取 pull)
  • [4.fetch 与 pull 有什么不同 ?](#4.fetch 与 pull 有什么不同 ?)

Git 作为分布式的版本管理系统,每个终端都有自己的 Git 仓库。但团队协作还需一个中间仓库,作为中心,同步各个仓库。于是服务端(远程)仓库就来承担这个职责,服务端不仅有仓库,还配套相关管理功能。

可以用公共的 Git 服务器,也可以自己搭建一套 Git 服务器。

1.远程用户登录

Git 服务器一般提供两种登录验证方式:

  • HTTS:基于 HTTPS 连接,使用用户名、密码身份验证。
    • 每次都要输入用户名、密码,当然可以记住。
    • 地址形式:https://github.com/kwonganding/KWebNote.git
  • SSL:采用 SSL 通信协议,基于公私钥进行身份验证,所以需要额外配置公私秘钥。
    • 不用每次输入用户名、密码,比较推荐的方法。
    • 地址形式:git@github.com:kwonganding/KWebNote.git
bash 复制代码
#查看当前远程仓库使用的哪种协议连接:
$ git remote -v
origin  git@github.com:kwonganding/KWebNote.git (fetch)
origin  https://github.com/kwonganding/KWebNote.git (push)
 
# 更改为https地址,即可切换连接模式。还需要禁用掉SSL, 才能正常使用https管理git
git config --global http.sslVerify false

1.1 🔑 远程用户登录:HTTS

基于 HTTPS 的地址连接远程仓库,GitHub 的共有仓库克隆、拉取(pull)是不需要验证的。

bash 复制代码
$ git clone 'https://github.com/kwonganding/KWebNote.git'
Cloning into 'KWebNote'...
 
# 仓库配置文件".git/config"
[remote "origin"]
 	url = https://github.com/kwonganding/KWebNote.git
	fetch = +refs/heads/*:refs/remotes/origin/*
	pushurl = https://github.com/kwonganding/KWebNote.git

推送(push)代码的时候就会提示输入用户名、密码了,否则无法提交。记住用户密码的方式有两种:

🔸 URL 地址配置:在原本 URL 地址上加上用户名、密码,https:// 后加 用户名:密码@

bash 复制代码
# 直接修改仓库的配置文件".git/config"
[remote "origin"]
 	url = https://用户名:密码@github.com/kwonganding/KWebNote.git
	fetch = +refs/heads/*:refs/remotes/origin/*
	pushurl = https://github.com/kwonganding/KWebNote.git

🔸 本地缓存:会创建一个缓存文件 .git-credentials,存储输入的用户名、密码。

bash 复制代码
# 参数"--global"全局有效,也可以针对仓库设置"--local"
# store 表示永久存储,也可以设置临时存储
git config --global credential.helper store
 
# 存储内容如下,打开文件"仓库\.git\.git-credentials"
https://kwonganding:[加密内容付费可见]@github.com

1.2 🔑 远程用户登录:SSH

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务,多用来进行远程登录、数据传输。SSH 通过公钥、私钥非对称加密数据,所以 SSH 需要生成一个公私钥对,公钥放服务器上,私有自己留着进行认证。

① 生成公私钥:通过 Git 指令 ssh-keygen -t rsa 生成公私钥,一路回车即可完成。生成在 C:\Users\用户名.ssh 目录下,文件 id_rsa.pub 的内容就是公钥。

② 配置公钥:打开 id_rsa.pub 文件,复制内容。GitHub 上,打开 SettingSSH and GPG keysSSH keys ➤ 按钮 New SSH key,标题(Title)随意,秘钥内容粘贴进去即可。

SSH 配置完后,可用 ssh -T git@github.com 来检测是否连接成功。

bash 复制代码
$ ssh -T git@github.com
Hi kwonganding! You've successfully authenticated, but GitHub does not provide shell access.

2.远程仓库指令 🔥

指令 描述
git clone [git地址] 从远程仓库克隆到本地(当前目录)
git remote -v 查看所有远程仓库,不带参数 -v 只显示名称
git remote show [remote] 显示某个远程仓库的信息
git remote add [name] [url] 增加一个新的远程仓库,并命名
git remote rename [old] [new] 修改远程仓库名称
git pull [remote] [branch] 取回远程仓库的变化,并与本地版本合并
git pull 同上,针对当前分支
git fetch [remote] 获取远程仓库的所有变动到本地仓库,不会自动合并!需要手动合并
git push 推送当前分支到远程仓库
git push [remote] [branch] 推送本地当前分支到远程仓库的指定分支
git push [remote] --force / -f 强行推送当前分支到远程仓库,即使有冲突。⚠️很危险!
git push [remote] --all 推送所有分支到远程仓库
git push --u 参数 --u 表示与远程分支建立关联,第一次执行的时候用,后面就不需要了
git remote rm [remote-name] 删除远程仓库
git pull --rebase 使用 rebase 的模式进行合并

3.推送 push / 拉取 pull

git pushgit pull 是团队协作中最常用的指令,用于同步本地、服务端的更新,与他人协作。

🔸 推送(push):推送本地仓库到远程仓库。

  • 如果推送的更新与服务端存在冲突,则会被拒绝,push 失败。一般是有其他人推送了代码,导致文件冲突,可以先 pull 代码,在本地进行合并,然后再 push

🔸 拉取(pull):从服务端(远程)仓库更新到本地仓库。

  • git pull:拉取服务端的最新提交到本地,并与本地合并,合并过程同分支的合并。
  • git fetch:拉取服务端的最新提交到本地,不会自动合并,也不会更新工作区。

4.fetch 与 pull 有什么不同 ?

两者都是从服务端获取更新,主要区别是 fetch 不会自动合并,不会影响当前工作区内容。

git pull = git fetch + git merge

  • 如下面图中,git fetch 只获取了更新,并未影响 masterHEAD 的位置。
  • 要更新 masterHEAD 的位置需要手动执行 git merge 合并。
bash 复制代码
# fetch只更新版本库
$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 663 bytes | 44.00 KiB/s, done.
From github.com:kwonganding/KWebNote
   2ba12ca..c64f5b5  main       -> origin/main
 
# 执行合并,合并自己
$ git merge
Updating 2ba12ca..c64f5b5
Fast-forward
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
相关推荐
_.Switch31 分钟前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_8504108331 分钟前
文件系统和日志管理
linux·运维·服务器
JokerSZ.35 分钟前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
芯盾时代1 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方2 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘2 小时前
NFS服务器
运维·服务器
但老师3 小时前
Git遇到“fatal: bad object refs/heads/master - 副本”问题的解决办法
git
秃头女孩y3 小时前
git创建分支
git
苹果醋33 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰3 小时前
[linux]docker基础
linux·运维·docker