【Git版本控制 03】远程操作
目录
一、克隆远程仓库
二、推送远程仓库
三、拉取远程仓库
四、忽略特殊文件
五、命令配置别名
一、克隆远程仓库
Git是分布式版本控制系统,同⼀个Git仓库,可以分布到不同的机器上。怎么分布呢?
找⼀台电脑充当服务器的⻆⾊,每天24⼩时开机,其他每个⼈都从这个“服务器”仓库克隆⼀份到⾃⼰的电脑上,并且各⾃把各⾃的提交推送到服务器仓库⾥,也从服务器仓库中拉取别⼈的提交。
国内外有很多这样的服务器,如Github、Gitee……
新建远程仓库的操作需要在Gitee或Github服务器网站上进行,在新建远程仓库成功之后,需要通过 git clone 命令远程仓库 克隆/下载 到本地。
SSH协议和HTTPS协议是Git最常使⽤的两种数据传输协议。SSH协议使⽤了公钥加密和公钥登陆机制,体现了实⽤性和安全性,使⽤此协议需要将我们的公钥放上服务器,由Git服务器进⾏管理。使⽤HTTPS⽅式时,没有要求,可以直接克隆下来。
使用HTTPS方式,输入用户名、密码后便可直接克隆,非常简单。
使用SSH方式,需要先创建 SSH Key,在用户主目录下,看看有没有 .ssh 目录,如果有,再看看有没有 id_rsa.pub 和 id_rsa 两个文件,如果有了,说明当前用户已经创建了SSH Key。
如果没有,则需要输入 ssh-keygen -t rsa -C "邮箱" 再一路回车进行创建。
创建成功之后,通过 cat ~/.ssh/ssh_rsa.pub 查看自己的公钥,公钥是可以告诉别人的,将公钥复制到 Git 服务器的SSH公钥选项中,就可以通过SSH链接克隆远程仓库了。
如果有多个⼈协作开发,GitHub/Gitee允许添加多个公钥,只要把每个⼈的电脑上的Key都添加到GitHub/Gitee,就可以在每台电脑上往GitHub/Gitee上提交推送了。
当我们从远程仓库克隆后,实际上Git会⾃动把本地的master分⽀和远程的master分⽀对应起来,并且,远程仓库的默认名称是 origin 。在本地我们可以使⽤ git remote 命令,来查看远程库的信息。
# 通过 git remote -v 显示更详细的信息(base) [root@localhost git-learning]# git remote
origin
(base) [root@localhost git-learning]# git remote -v
origin git@gitee.com:hdu-a-chao/git-learning.git (fetch)
origin git@gitee.com:hdu-a-chao/git-learning.git (push)
(base) [root@localhost git-learning]# # 上面显示了可以抓取和推送的地址,也代表了我们有抓取和推送的权限。
二、推送远程仓库
# 使用 git push 将本地内容推送到远程仓库
# 完整命令格式:git push <远程主机名> <本地分⽀名>:<远程分⽀名>
# 如果本地分⽀名与远程分⽀名相同,可以简写为:git push <远程主机名> <本地分⽀名>
# 如果当前分支只有一个远程分支,可以简写为:git push(base) [root@localhost git-learning]# ls
README.en.md README.md
(base) [root@localhost git-learning]# vim file1
(base) [root@localhost git-learning]# cat file1
hello git
(base) [root@localhost git-learning]# git add .
(base) [root@localhost git-learning]# git commit -m "add first file"
[master ec3bb79] add first file1 file changed, 1 insertion(+)create mode 100644 file1
(base) [root@localhost git-learning]# git push
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 302 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag b64b1287
To git@gitee.com:hdu-a-chao/git-learning.gitdd56a90..ec3bb79 master -> master
(base) [root@localhost git-learning]#
三、拉取远程仓库
在 Gitee 上点击 file1 ⽂件并在线修改它:


这时的远程仓库是领先本地仓库一个版本的,如果我们此时需要将本地仓库内容直接推送到远程仓库是会报错的,因为版本不一致,所以需要通过 git pull 从远程获取代码并合并本地的版本。
# 完整命令:git pull <远程主机名> <远程分⽀名>:<本地分⽀名>
# 如果远程分⽀是与当前分⽀合并,可简写为:git pull <远程主机名> <远程分⽀名>
(base) [root@localhost git-learning]# git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
来自 gitee.com:hdu-a-chao/git-learning* branch master -> FETCH_HEAD
更新 ec3bb79..1ccab43
Fast-forwardfile1 | 1 +1 file changed, 1 insertion(+)
(base) [root@localhost git-learning]# cat file1
hello git
Git 在线修改!(base) [root@localhost git-learning]#
四、忽略特殊文件
在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让Git知道呢?在Git⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的⽂件名填进去,Git就会⾃动忽略这些⽂件了。
不需要从头写 .gitignore ⽂件,gitee在创建仓库时就可以为我们⽣成,不过需要我们主动勾选⼀下:

如果当时没有选择这个选择,在⼯作区创建⼀个也是可以的。⽆论哪种⽅式,最终都可以得到⼀个完整的 .gitignore ⽂件,例如我们想忽略以 .so 和 .ini 结尾所有⽂件, .gitignore 的内容如下:
# 省略选择模本的内容
...# My configurations:
*.ini
*.so
(base) [root@localhost git-learning]# ls
file1 file.ini file.so README.en.md README.md
(base) [root@localhost git-learning]# vim .gitignore
(base) [root@localhost git-learning]# cat .gitignore
*.ini
*.so
(base) [root@localhost git-learning]# touch file.ini file.so
(base) [root@localhost git-learning]# ls
file1 file.ini file.so README.en.md README.md
(base) [root@localhost git-learning]# git add .
(base) [root@localhost git-learning]# git commit -m "add files: file.ini file.so"
[master 8d78346] add files: file.ini file.so1 file changed, 2 insertions(+)create mode 100644 .gitignore
(base) [root@localhost git-learning]# git push origin master
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 343 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag dd40f5b4
To git@gitee.com:hdu-a-chao/git-learning.git1ccab43..8d78346 master -> master
(base) [root@localhost git-learning]#

(base) [root@localhost git-learning]# touch file1.ini file1.so
(base) [root@localhost git-learning]# ls
file1 file1.ini file1.so file.ini file.so README.en.md README.md
(base) [root@localhost git-learning]# git status
# 位于分支 master
无文件要提交,干净的工作区
(base) [root@localhost git-learning]# # 分析原因,原来是因为被 .gitignore 选定的文件会忽略在工作区的修改
# 如果我们想要提交的文件被忽略了,我们可以用 git add -f [file] 强制添加
# 查看某个文件是否被忽略(base) [root@localhost git-learning]# git check-ignore -v file1.so
.gitignore:2:*.so file1.so
(base) [root@localhost git-learning]## Git会告诉我们, .gitignore 的第2⾏规则忽略了该⽂件,于是我们就可以知道应该修订哪个规则。
# 还有些时候,当我们编写了规则排除了部分⽂件时,例如排除所有.开头的隐藏⽂件: .*
# 但是我们发现 .* 这个规则把 .gitignore 也排除了。
# 虽然可以⽤ git add -f 强制添加进去,但我们也可以编写例外规则:!.gitignore
五、命令配置别名
在我们使⽤Git期间,有些命令敲的时候着实让⼈头疼(太⻓了。。),幸运的是,git⽀持对命令进⾏简化。
# 将 git status 简化为 git st (base) [root@localhost git-learning]# git config --global alias.st status
(base) [root@localhost git-learning]# git st
# 位于分支 master
无文件要提交,干净的工作区
(base) [root@localhost git-learning]# git status
# 位于分支 master
无文件要提交,干净的工作区
(base) [root@localhost git-learning]# # --global 参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有⽤。
# 如果不加,那只针对当前的仓库起作⽤。
相关文章:
【Git版本控制 03】远程操作
目录 一、克隆远程仓库 二、推送远程仓库 三、拉取远程仓库 四、忽略特殊文件 五、命令配置别名 一、克隆远程仓库 Git是分布式版本控制系统,同⼀个Git仓库,可以分布到不同的机器上。怎么分布呢? 找⼀台电脑充当服务器的⻆⾊ÿ…...
【Git】Windows下通过Docker安装GitLab
私有仓库 前言基本思路拉取镜像创建挂载目录创建容器容器启动成功登录仓库设置中文更改密码人员审核配置邮箱 前言 由于某云存在人数限制,这个其实很好理解,毕竟使用的是云服务器,人家也是要交钱的。把代码完全放在别人的服务器上面…...
flutter 操作mysql
引入模块 dependencies: flutter: sdk: flutter mysql1: ^0.20.0 mysql helper 的代码 import dart:async; import package:mysql1/mysql1.dart; class MySqlHelper { static const _host localhost; static const _port 3333; static const _user user; static c…...
c++阶梯之类与对象(中)< 续集 >
前文: c阶梯之类与对象(上)-CSDN博客 c阶梯之类与对象(中)-CSDN博客 前言: 在上文中,我们学习了类的六个默认成员函数之构造,析构与拷贝构造函数,接下来我们来看看剩下…...
GitLag所有操作-汇总
1、MAC Git环境设置 跳转 Git通过Token拉代码: 跳转 Git基础操作:拉、put、删 跳转 Git回滚操作: 跳转 Git回滚操作-复杂 跳转 对于Commit但是还没有push的代码,如果回滚: 跳转...
JSch - 配置SFTP服务器SSH免密登录
文章目录 1. 什么是SFTP2. 什么是Jsch以及它的作用3. Linux中配置SSH密钥登录4. sftp服务器认证机制5. publickey和password两种方式登录sftp的API调用6. 代码可以如下改造: 需求:做一个通过ssh免密登录的需求,是基于原先密码登录sftp服务器的…...
RISC-V指令格式
RISC-V指令格式 1 RISC-V指令集命名规范2 RISC-V指令集组成2.1 基础整数指令集2.2 扩展指令集 3 RISC-V指令格式3.1 指令表述3.2 指令格式 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 RISC-V指令集命名规范 前面提到过RV32I,这是…...
Linux 文件比较工具
在Linux系统中,文件比较是一种常见的任务,用于比较两个文件之间的差异。文件比较可以帮助我们找出两个文件的不同之处,或者确定它们是否完全相同。在Linux中,有多种方法可以进行文件比较。 1. diff 在Linux中,diff命…...
【GAMES101】Lecture 17 材质
目录 材质 漫反射 镜面反射 折射-Snell’s Law Fresnel Reflection / Term(菲涅耳项) 微表面模型 各向同性与各向异性 BRDF的性质 测量BRDF 材质 渲染方程中的BRDF描述了物体是如何与光线作用的,而物体的材质决定了它看起来是怎么样…...
数模.matlab画图
一、mesh函数 上图是平常用到的方式 例题: 上图的meshgrid函数相当于上上图的前三个指令(temp,x,y) mash函数: mashc函数: mashz函数: 上图subplot函数的作用是将下标为index的图片放到对应的x&…...
[word] word表格表头怎么取消重复出现? #媒体#笔记#职场发展
word表格表头怎么取消重复出现? word表格表头怎么取消重复出现?在Word中的表格如果过长的话,会跨行显示在另一页,如果想要在其它页面上也显示表头,更直观的查看数据。难道要一个个复制表头吗?当然不是&…...
vue项目开发vscode配置
配置代码片段 步骤如下: 文件->首选项->配置用户代码片段新增全局代码片段起全局代码片段文件名“xxx.code-snippets” 这里以配置vue2初始代码片段为例,配置具体代码片段 {"name": "vue-sph","version": "…...
BUUCTF-Real-[Tomcat]CVE-2017-12615
目录 漏洞描述 一、漏洞编号:CVE-2017-12615 二、漏洞复现 get flag 漏洞描述 CVE-2017-12615:远程代码执行漏洞 影响范围:Apache Tomcat 7.0.0 - 7.0.79 (windows环境) 当 Tomcat 运行在 Windows 操作系统时,且启用了 HTTP P…...
Qt应用软件【协议篇】http协议get、post示例
文章目录 QT Http的APIHTTP GET 请求示例HTTP POST 请求示例伪装chrome浏览器get请求QT Http的API QNetworkAccessManager 作用:管理所有的网络请求,是发送请求和接收响应的中心点。主要功能: 发送HTTP请求(GET, POST, PUT, DELETE等)。处理网络请求的异步回调。管理网络…...
如何选择Centos的替代者
开篇废话:许久许久没有更新博客了。寒假回到故土,大雪虽然没有封路,还是增加了不出门的决心,虽然年岁已高,但是不学习还是不踏实,那就借着写作再继续前行。 背景:信息化部门,掌管着…...
【Java数据结构】ArrayList和LinkedList的遍历
一:ArrayList的遍历 import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** ArrayList的遍历*/ public class Test {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(5);list…...
springboot163美食推荐商城的设计与实现
简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...
[机器学习]K-means——聚类算法
一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成(n_samples:样本点,centers&…...
并发编程 java锁机制
1、什么是锁,为什么需要锁? 并发环境下,会存在多个线程对同一个资源进行争抢的情况,假设线程A对资源正在进行修改,此时线程B又对同一资源进行了修改,就会导致数据不一致的问题。为了解决这个问题ÿ…...
Onerugged三防平板厂家丨三年质保承诺丨三防平板PAD
行业领先产品——Onerugged三防平板。凭借着十年的经验,我们深知终端设备在各个行业中的重要性,因此致力于为用户提供高可靠性的解决方案。 Onerugged三防平板以其卓越的性能和全方位的保护功能,在市场上脱颖而出。首先,它拥有IP…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
