Git企业开发控制理论和实操-从入门到深入(四)|Git的远程操作|Gitee

news2024/11/19 7:35:51

前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

  • 高质量博客汇总

然后就是博主最近最花时间的一个专栏《Git企业开发控制理论和实操》希望大家多多关注!

  • Git企业开发控制理论和实操

Git的远程操作

博主使用码云(Gitee)进行讲解,操作方法和Github完全一样。

理解分布式版本控制系统

我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上。而我们的 Git 其实是分布式版本控制系统!什么意思呢?
可以简单理解为,我们每个人的电脑上都是一个完整的版本库,这样你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

在这里插入图片描述

分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。有了这个“中央服务器”的电脑,这样就不怕本地出现问题导致文件丢失了。

中央仓库我们叫“远程仓库”,有个很牛的网站叫做Github就是中央仓库的一个作用!

当然我这篇文章的读者可能有部分伙伴访问国外网站比较慢,这里博主会用国内的一个替代网站,叫做码云来进行演示。

创建远程仓库

在Gitee上新建仓库

在这里插入图片描述
在这里插入图片描述

简单理解issuespull request

在这里插入图片描述

Gitee这个平台,为我们提供了四种管理者的身份。

远程仓库是由自己的成员的。

这个issues就是一些有问题的人和仓库成员交流的一个地方。

pull request是什么呢?

首先对于开发者来说,肯定不是在master上进行开发的,我们可能是在dev分支上开发,然后我们就要进行merge操作。

当然,我们知道merge操作是有风险的。因此我们不能随随便便让人来merge

因此,想要进行merge的开发人,就要写一个PR(pull request),可以理解成“合并申请单”,让仓库管理人看。

管理员同意后,我们才能进行merge操作。

在这里插入图片描述

克隆远程仓库

在这里插入图片描述
这些都是Gitee给我们提供的数据传输协议,常用的就是https和ssh。

HTTPS协议clone

在这里插入图片描述
使用这里给的网址,复制,然后使用 git clone 命令。

git clone https://gitee.com/Yufch/remote-gitcode.git

在这里插入图片描述

注意:不能在任何本地仓库下执行这个命令。

在这里插入图片描述

这个就是远程仓库下有的东西了。用法和之前讲的完全一样。

git remote -v # 查看远程仓库的一些信息
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git remote -v
origin  https://gitee.com/Yufch/remote-gitcode.git (fetch)
origin  https://gitee.com/Yufch/remote-gitcode.git (push)
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ 

表示我们是有远程仓库的fetch权限(拉权限),和push权限(推权限)。

SSH协议clone

ssh协议是采用一个公钥加密和公钥登陆的一个机制。所以我们必须要把自己本地服务器的一个公钥放到git服务器上进行管理。
在这里插入图片描述
在这里插入图片描述

我们现在还没有配置公钥。

**第一步:创建SSH Key。**在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa id_rsa.pub 这两个文件,如果已经有了,可直接跳到下一步。如果没有,需要创建SSH Key。

ls -al ~ | grep .ssh # 可以搜索一下~下有没有.ssh文件夹,如果没有就要创建SSH Key

这个命令就是系统的知识了,这里不过多讲解。

设置ssh公钥需要配置邮箱,然后这个邮箱要和码云上的一致。这里可以看。

在这里插入图片描述

然后配置SSH公钥命令如下。

ssh-keygen -t rsa -C "xxx.com"
(base) [yufc@ALiCentos7:~]$ ssh-keygen -t rsa -C "yufc779@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yufc/.ssh/id_rsa): 
Created directory '/home/yufc/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/yufc/.ssh/id_rsa.
Your public key has been saved in /home/yufc/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1PWuf6UgtkssYGh2x5QasdfaSrD4YmS7EL0Yf7VamusiQ yufc779@gmail.com
The key's randomart image is:
+---[RSA 2048]----+
|   .+..     .    |
| . + . o + . .   |
|..o o o * .   .  |
| .o+ o *     .   |
|oo+ B * S     .  |
|o+.= B o .o ..  .|
|E.. . o ..oo.. ..|
| o.  .   o.  .. .|
|  .o.     ..  .. |
+----[SHA256]-----+
(base) [yufc@ALiCentos7:~]$ 

后面的东西全部默认回车即可。

(base) [yufc@ALiCentos7:~/.ssh]$ cat id_rsa.pub
ssh-rsa AAAAB3NzaasdasdfadSMIpxADoRltTaMiJadsfasdflBld/qF7EHq+KwJY4CMhb65A6tsvGPxAPAeYNgufjc4LC5r0v2hdgs0Pk86XIX7vUK6DUrpe6LPTBOdAGTsWmSbcynpJhX97mdM0P2p/3HK0KYmlymyAIzPpEyNF5YRF9goDzI6OBw7Y9WZlp0QWPyWRbnSMOe4olXKY7EFcon5uCrlD3vJNac/3ZIZpKy2TrtvPvcm1fk9sJW5JlcC7P6DByL0CG8ohxGwz2/4l yufc779@gmail.com
(base) [yufc@ALiCentos7:~/.ssh]$

这个东西就是你的公钥。弄到码云上即可。

此时就可以clone了。

git clone git@gitee.com:Yufch/remote-gitcode.git

在这里插入图片描述

向远程仓库推送

准备操作

本地仓库要进行一次push操作,将本地某个分支的内容推送到远程仓库中某个分支上。

然后别忘了,进去remote-gitcode仓库之后,要配置一下name和email。这个要和码云上的一致。

(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git config -l
sendpack.sideban=false
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=git@gitee.com:Yufch/remote-gitcode.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git config user.name "Yufch"
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git config user.email "yufc779@gmail.com"
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git -l # 这里打错了 ...
Unknown option: -l
usage: git [--version] [--help] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git config -l
sendpack.sideban=false
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=git@gitee.com:Yufch/remote-gitcode.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
user.name=Yufch
user.email=yufc779@gmail.com
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ # 这样就配置好了

那么现在我们先创建一个文件。然后把他添加到版本库中先(上一章的内容)

(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ ls
README.en.md  README.md
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ vim file.txt
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ cat file.txt 
hello gitee
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git add .
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git commit -m "create file.txt"
[master 7352d02] create file.txt
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$

git push 命令

git push origin master:master
# origin: 远程仓库的名字:一般都叫origin, 使用 `git remote` 命令可以查看
# 第一个master: 要推送的本地分支
# 第二个master: 要推送到的远程仓库的分支
# 如果冒号左右两边一样,可以省略一个
git push origin master

在这里插入图片描述
此时就可以在远程仓库中看到我们修改的内容了。

拉取远程仓库

如果现在的情况是,远程仓库中的代码是领先于本地仓库的(可能别人开发,然后push上去了),我们想在本地看到远程仓库中的内容,我们就要进行拉取操作。

在这里插入图片描述

假设有人加了一行hello world,然后push上去了,我们在本地也想看到这一行。

注意:在工作中,千万不要直接改码云或者github上的代码,要改也是拉到本地然后改完去PR。

git pull origin master:master
# origin: 远程仓库的名字:一般都叫origin, 使用 `git remote` 命令可以查看
# 第一个master: 要拉取的远程仓库的分支
# 第二个master: 要拉取到的本地仓库的分支
# 如果冒号左右两边一样,可以省略一个
git pull origin master
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git pull origin master: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.
From gitee.com:Yufch/remote-gitcode
   7352d02..8513266  master     -> master
Warning: fetch updated the current branch head.
Warning: fast-forwarding your working tree from
Warning: commit 7352d02962528eae4ef12d0669a40f4f7cdf35ec.
Already up-to-date.
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ 

注意:拉下来的分支之后,会做一个合并的操作,所以pull = 拉取 + merge

忽略特殊文件

在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,那怎么让 Git知道呢? 在 Git 工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件了。不需要从头写.gitignore文件,gitee 在创建仓库时就可以为我们生成,不过需要我们主动勾选下。

在这里插入图片描述

当然我们刚才创建的时候没选,我们就自己创建一个就行。

touch .gitignore

在这里插入图片描述

之类的意思就是让git忽略.so结尾的和.ini结尾的文件。

如下所示:按道理来说,我们创建了.gitignore,key.so,token.ini文件之后,git status会识别到工作区中有三个文件被创建,但是如下所示,git status只看到.gitignore被创建了。这就是因为我们设置了忽略。

(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ touch key.so
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ touch token.ini
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
nothing added to commit but untracked files present (use "git add" to track)
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]

此时如果git add .,刚才那两个被设置过忽略的文件是不会被提交到暂存区的。

但是在这条件下我还是想提交一个key2.so怎么办呢?可以使用以下命令。

git add -f key2.so # 强制add

但是我们一般不想去破坏 .gitignore文件的规则的,所以git还提供给我们一种语法。

在这里插入图片描述

这样就可以排出忽略。

然后如果有一天,你的.gitignore文件写了很长很长,然后你创建一个key3.so,你自己都忘记为什么这个被忽略掉了,可以通过一个命令查看为什么被忽略。

git check-ignore -v key.so # 查看一个文件为什么被忽略
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git check-ignore -v key.so
.gitignore:4:*.so       key.so
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ 

然后我们就能看到,是第四行让它被忽略了。

最后我们推送一下,远端就能看到这些文件了。

配置命令别名

如果我觉得我经常要使用git status命令,但是它太难打了,想起个别名:git st行吗?可以的。不过我们要进行一些配置。

git config --global alias.st status

**这个命令的意思就是,给status起别名为st。**是否要--global可以自选。

现在git st就能用了。

(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git st
# On branch master
nothing to commit, working directory clean
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$

再配一个吧。

我们以前学过这个。

git log --pretty=oneline --abbrev-commit

起个别名。

git config --global alias.lpa 'log --pretty=oneline --abbrev-commit'
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$ git lpa
7393ea0 add .gitignore
8513266 update file.txt.
7352d02 create file.txt
a9af182 Initial commit
(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/remote-gitcode]$

不建议初学的时候配置,建议大家熟悉之后,在工作中的时候再去简化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/936978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dart PowerTCP Emulation for .NET Crack

Dart PowerTCP Emulation for .NET Crack .NET CF上的PowerTCP Emulation为手持设备提供了高级的Internet通信组件。这些功能允许同步操作&#xff0c;这样可以消耗更少的资源&#xff0c;提供更大的灵活性&#xff0c;并生成易于维护的软件。带有.NET的PowerTCP仿真包括VT52、…

阿里云架构

负载均衡slb 分类以及应用场景 负载均衡slb clb 传统的负载均衡(原slb) 支持4层和7层(仅支持对uri(location),域名进行转发) 一般使用slb(clb) alb 应用负载均衡 只支持7层,整合了nginx负载均衡的各种功能,可以根据用户请求头,响应头 如果需要详细处理用户请求(浏…

OLED透明屏全贴合技术:未来显示技术的突破性创新

在现代科技发展的浪潮中&#xff0c;OLED透明屏全贴合技术以其独特的优势和无限的应用前景引起了广泛的关注。 在这篇文章中&#xff0c;尼伽将深入探索OLED透明屏全贴合技术&#xff0c;介绍其优势和特点&#xff0c;并展望其在不同领域的应用前景。 一、OLED透明屏全贴合技术…

29 - ref 和 $refs 获取dom和组件

作用: 利用 ref 和 $refs 可以用于 获取 dom 元素, 或 组件实例 特点: 查找范围 -> 当前组件内(更精确稳定) 1. 获取 dom: (1). 目标标签 - 添加 ref属性 <div ref"chartRef">我是渲染图表的容器</div> (2). 恰当时机,通过this.$refs.xxx,获取目标…

python-数据可视化-使用API

使用Web应用程序编程接口 &#xff08;API&#xff09;自动请求网站的特定信息而不是整个网页&#xff0c;再对这些信息进行可视化 使用Web API Web API是网站的一部分&#xff0c;用于与使用具体URL请求特定信息的程序交互。这种请求称为API调用 。请求的数据将以易于处理的…

.NET 操作 TDengine .NET ORM

TDengine 是国内比较流的时序库之一&#xff0c;支持群集并且免费&#xff0c;在.NET中资料比较少&#xff0c;这篇文章主要介绍SqlSugar ORM来操作TDengine 优点&#xff1a; 1、SqlSugar支持ADO.NET操作来实现TDengine&#xff0c;并且支持了常用的时间函数、支持联表、分…

channel并发编程

不要通过共享内存通信&#xff0c;要通过通信共享内存。 channel是golang并发编程中一种重要的数据结构&#xff0c;用于多个goroutine之间进行通信。 我们通常可以把channel想象成一个传送带&#xff0c;将goroutine想象成传送带周边的人&#xff0c;一个传送带的上游放上物品…

TouchGFX之调试

DebugPrinter类是一种在显示屏上打印调试消息的简单方法&#xff0c;无需向屏幕添加控件。 在使用DebugPrinter之前&#xff0c;需要分配一个实例并将其传递给Application类&#xff0c;且DebugPrinter实例必须兼容所使用的LCD类。 该表列出了DebugPrinter类名称&#xff1a; …

解决报错: Could not initialize class com.platform.cache.J2CacheUtils

今天运行一个比较久远的SSM项目&#xff0c;访问接口时报错&#xff1a; Could not initialize class com.platform.cache.J2CacheUtils 找了半天也没有发现问题所在&#xff0c;突然发现报错里面有ShiroFilter字样&#xff0c;然后想起以前shiro好像是要跟redis对接&#xff0…

Redis各类数据结构应用场景总结

Redis各类数据结构应用场景总结 引言String应用场景 List应用场景 Hash应用场景 Set应用场景 ZSet应用场景 小结 引言 实际面试过程中更多看重的是对Redis相关数据结构的活学活用&#xff0c;同时也可能会引申出Redis相关底层数据结构原理的实现&#xff0c;笔者最近面试过程中…

【ARP欺骗】嗅探流量、限速、断网操作

【ARP欺骗】 什么是ARP什么是ARP欺骗ARP欺骗实现ARP断网限制网速嗅探流量 什么是ARP ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;是一个TCP/IP协议&#xff0c;用于根据IP地址获取物理地址。在计算机网络中&#xff0c;当一个主机需要发…

查看windows当前占用的所有端口、根据ipt终止任务进程、OS、operatingSystem

文章目录 查询端口查询指定端口根据进程pid查询进程名称查看所有进程名称根据pid终止任务进程根据进程名称终止任务 查询端口 netstat -ano查询指定端口 netstat -ano | findstr "80"根据进程pid查询进程名称 tasklist | findstr "660"查看所有进程名称 ta…

从哈希表到红黑树:探讨 epoll 是如何管理事件的?

揭开pkill的秘密&#xff1a;在Linux中杀死进程的完整指南 一、引言二、 传统事件管理的局限性三、epoll 概述3.1、epoll 的基本概念和工作原理3.2、epoll 在 Linux 内核中的实现方式 四、哈希表在事件管理中的挑战五、 红黑树在 epoll 中的应用六、epoll 中的事件注册与触发七…

TCP 和 UDP 的区别、TCP 是如何保证可靠传输的?

先来介绍一些osi七层模型 分为应用层、表示层、会话层、运输层、网络层、链路层、物理层。 应用层(数据)&#xff1a;确定进程之间通信的性质以及满足用户需要以及提供网络和用户应用&#xff0c;为应用程序提供服务&#xff0c;DNS&#xff0c;HTTP&#xff0c;HTTPS&#xf…

strcpy函数

目录 函数介绍&#xff1a; 函数声明&#xff1a; 具体使用&#xff1a; 情况一&#xff1a; 情况二&#xff1a; 注意事项&#xff1a; 1.源字符必须以 \0结束&#xff1a; 2.目标空间必须足够大&#xff0c;以确保能放源字符串&#xff1a; 3.目标空间必须可变&…

阿里2面:你们部署多少节点?1000W并发,当如何部署?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; 1000W并发&#xff0c;需部署多少个节点&#xff1f;如何觉得部署多少…

<八> objectARX开发:动态拖动Jig创建自定义实体

1、介绍 接上一篇文章,在某些情况下,CAD中的实体对象初始参数并不是固定的,我们需要通过jig动态拖动方式来绘制自定义实体,下面就用一个简单的例子来介绍一下自定义实体动态绘制。   实体形状:包括实体夹点和文字夹点拖动实现。 2、效果 3、源码 static void RYMyGrou…

软考:中级软件设计师:无线网,网络接入技术,ipv6

软考&#xff1a;中级软件设计师:无线网 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#x…

退出屏保前玩一把游戏吧!webBrowser中网页如何调用.NET方法

本文主要以 HackerScreenSaver 新功能的开发经历介绍 webBrowser中网页如何调用.NET方法的过程。 1. 背景 之前开源了一款名为 HackerScreenSaver 的 Windows 屏保程序。该程序具有模拟黑客炫酷界面的特点&#xff0c;用户可以将自定义的网页作为锁屏界面。不久前&#xff0c;…

1. import pandas as pd 导入库

【目录】 文章目录 1. import pandas as pd 导入库1. pandas库的概念2. 导入pandas库2.1 常规导入2.2 别名导入 3. 别名的作用4. 课堂练习 【正文】 1. import pandas as pd 导入库 【学习时间】 10分钟 1. pandas库的概念 pandas&#xff1a;熊猫panda的复数&#xff0c; …