【Git企业开发】第五节.远程操作

文章目录

  • 前言
  • 一、理解分布式版本控制系统
  • 二、远程仓库
  • 2.1 新建远程仓库
  • 2.2 克隆远程仓库
  • 2.3 向远程仓库推送
  • 2.4 拉取远程仓库
  • 总结

前言

一、理解分布式版本控制系统

我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!
也就是在你的笔记本或者计算机上。 而我们的Git其实是分布式版本控制系统!什么意思呢?


可以简单理解为,我们每个人的电脑上都是一个完整的版本库,这样你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。


分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。


在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了。也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当"中央服务器"的电脑,但这个服务器的作用仅仅是用来方便"交换"大家的修改,没有它大家也一样干活,只是交换修改不方便而已。有了这个"中央服务器"的电脑,这样就不怕本地出现什么故障了(比如运气差,硬盘坏了,上面的所有东西全部丢失,包括git的所有内容)


二、远程仓库

Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以"克隆"这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。
你肯定会想,至少需要两台机器才能玩远程库不是?但是我只有一台电脑,怎么玩?


其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下。不过,现实生活中是不会有人这么傻的在一台电脑上搞几个远程库玩,因为一台电脑上搞几个远程库完全没有意义,而且硬盘挂了会导致所有库都挂掉,所以我也不告诉你在一台电脑上怎么克隆多个仓库。


实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个"服务器"仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。

完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作。好的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。管月多务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。


github是国外的网站,速度比较慢,我们课堂上同统一采用码云来托管代码。下来,我们从零开始,使用一下码云远程仓库。


2.1 新建远程仓库

新建远程项⽬仓库:


填写基本信息:


创建成功:


创建成功后,我们可以对远程仓库进⾏⼀个基本的设置:开源or私有


从创建好的远程仓库中我们便能看到,之前在本地学习过的分⽀,也存在于远程仓库中并被管理起来 了。刚创建的仓库有且只有⼀个默认的master分⽀.


2.2 克隆远程仓库

克隆/下载远端仓库到本地,需要使⽤ git clone 命令,后⾯跟上我们的远端仓库的链接,远端仓库 的链接可以从仓库中找到:选择"克隆/下载"获取远程仓库链接:


SSH协议和HTTPS协议是Git最常使用的两种数据传输协议。SSH协议使用了公钥加密和公钥登陆机制,体现了其实用性和安全性,使用此协议需要将我们的公钥放上服务器,由Git服务器进行管理。使用HTTPS方式时,没有要求,可以直接克隆下来。
使用HTTPS方式:
代码示例:
hyb@139-159-150-152:~ git clone https://gitee.com/hyb91/git_teaching.git** **Cloning into 'git_teaching'...** **Username for 'https://gitee.com': hyb91** **Password for 'https://hyb91@gitee.com':** **remote: Enumerating objects: 4, done.** **remote: Counting objects: 100% (4/4), done.** **remote: Compressing objects: 100% (4/4), done.** **remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0** **Unpacking objects: 100% (4/4), 1.80 KiB \| 1.80 MiB/s, done.** **hyb@139-159-150-152:\~ ls
gitcode git_teaching
hyb@139-159-150-152:~$ ls git_teaching/
README.en.md README.md


使用 SSH 方式:
hyb@139-159-150-152:~$ git clone git@gitee.com:hyb91/git_teaching.git
Cloning into 'git_teaching'...
The authenticity of host 'gitee.com (212.64.63.215)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com,212.64.63.215' (ECDSA) to the list of know
git@gitee.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.


使用SSH方式克隆仓库,由于我们没有添加公钥到远端库中,服务器拒绝了我们的clone链接。需要我们设置一下:
第一步:
创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,需要创建SSH Key:
代码示例:
# 注意要输⼊⾃⼰的邮箱,然后⼀路回⻋,使⽤默认值即可
hyb@139-159-150-152:~$ ssh-keygen -t rsa -C "2689241679@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hyb/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hyb/.ssh/id_rsa
Your public key has been saved in /home/hyb/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:sepKZUwKIXjJxYcot49tvOW+Aa+pEhdsRqVDFSmgQZo 2689241679@qq.com
The key's randomart image is:
+---[RSA 3072]----+
|*+oB=+ |
|==Oo+ . |
|E*+o .. . |
| *o + o |
| o *o + S |
|. o ==.. |
| o ..++ |
|. ..+.. |
| ...+o+. |
+----[SHA256]-----+


顺利的话,可以在用户主自录里找到.ssh目录,里面有id_rsa和id_rsa.pub)两个文件,这两个就是SSHKey的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
代码示例:
hyb@139-159-150-152:~$ ls -a .ssh/
. .. id_rsa id_rsa.pub known_hosts


第⼆步:添加⾃⼰的公钥到远端仓库。


点击 ssh公钥 选项,进⾏设置:


点击确认后,需要对你进⾏认证,输⼊你的账号密码即可。⾄此,我们的准备⼯作全部做完,欢快的clone吧。
代码示例:
1 hyb@139-159-150-152:~ git clone git@gitee.com:hyb91/git_teaching.git** **2 Cloning into 'git_teaching'...** **3 Warning: Permanently added the ECDSA host key for IP address '212.64.63.190' to** **4 remote: Enumerating objects: 4, done.** **5 remote: Counting objects: 100% (4/4), done.** **6 remote: Compressing objects: 100% (4/4), done.** **7 remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0** **8 Receiving objects: 100% (4/4), done.** **10 hyb@139-159-150-152:\~ ls
11 gitcode git_teaching
12 hyb@139-159-150-152:~$ ls git_teaching/
13 README.en.md README.md
done,成功!如果有多个人协作开发,GitHub/Gitee允许添加多个公钥,只要把每个人的电脑上的Key都添加到GitHub/Gitee,就可以在每台电脑上往GitHub/Gitee上提交推送了。


当我们从远程仓库克隆后,实际上Git 会自动把本地的master分支和远程的master分支对应起来,并且,远程仓库的默认名称是origin。在本地我们可以使用git remote命令,来查看远程库的信息,如:

代码示例:
hyb@139-159-150-152:~/git_teaching git remote** **origin** **或者,用git remote -v显示更详细的信息:** **代码示例:** **hyb@139-159-150-152:\~/git_teaching git remote -v
origin git@gitee.com:hyb91/git_teaching.git (fetch)
origin git@gitee.com:hyb91/git_teaching.git (push)

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。推送是什么意思呢,我们继续往下看。


2.3 向远程仓库推送

本地已经 clone 成功远程仓库后,我们便可以向仓库中提交内容。

例如新增⼀个 file.txt 文件:

代码示例:
# 新建⽂件
hyb@139-159-150-152:~/git_teaching ls** **README.en.md README.md** **hyb@139-159-150-152:\~/git_teaching vim file.txt
hyb@139-159-150-152:~/git_teaching cat file.txt** **hello git** **# 提交⽂件** **hyb@139-159-150-152:\~/git_teaching git add .
hyb@139-159-150-152:~/git_teaching$ git commit -m"create file.txt"
[master 7ce3183] create file.txt
1 file changed, 1 insertion(+)
create mode 100644 file.txt


提交时要注意,如果我们之


前设置过全局的name和e-mail,这两项配置需要和gitee上配置的用户名和邮箱一致,否则会出错。

或者从来没有设置过全局的name和e-mail,那么我们第一次提交时也会报错。这就需要我们重新配置下了,同样要注意需要和gitee上配置的用户名和邮箱一致。如何配置已讲过,在这里就不再赘述。


到这里我们已经将内容提交至本地仓库中,如何将本地仓库的内容推送至远程仓库呢,需要使用git push命令,该命令用于将本地的分支版本上传到远程并合并,

命令格式如下:

代码示例:
git push <远程主机名> <本地分支名>:<远程分支名>
# 如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>


此时我们要将本地的 master 分支推送到 origin 主机的master分支,则可以:
使用git push origin master命令;
代码示例:
hyb@139-159-150-152:~/git_teaching$ git push origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hyb91/git_teaching.git
c6ce3f0..7ce3183 master -> master


说明:

推送成功!这里由于我们使用的是SSH协议,是不用每一次推送都输入密码的,方便了我们的推送操作。如果你使用的是HTTPS协议,有个麻烦地方就是每次推送都必须输入口令。


接下来,看看码云远端:


代码已经被推送至远端了∶


2.4 拉取远程仓库

在 gitee 上点击 README.md文件并在线修改它:


修改内容:



此时,远程仓库是要领先于本地仓库一个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。Git提供了 git pull 命令 ,该命令用于从远程获取代码并合并本地的版本。
示例格式如下:
git pull <远程主机名> <远程分支名>:<本地分支名>
# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull <远程主机名> <远程分支名>
代码示例:
# 拉取远程分支,并与当前分支进行合并
hyb@139-159-150-152:~/git_teaching git pull origin master** **remote: Enumerating objects: 5, done.** **remote: Counting objects: 100% (5/5), done.** **remote: Compressing objects: 100% (3/3), done.** **remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0** **Unpacking objects: 100% (3/3), 1.02 KiB \| 1.02 MiB/s, done.** **From gitee.com:hyb91/git_teaching** **\* branch master -\> FETCH_HEAD** **7ce3183..60e6b0a master -\> origin/master** **Updating 7ce3183..60e6b0a** **Fast-forward** **README.md \| 2 ++** **1 file changed, 2 insertions(+)** **hyb@139-159-150-152:\~/git_teaching cat README.md
...
第一次修改内容
我们发现,拉取成功了!


总结

相关推荐
初圣魔门首席弟子8 小时前
bug 2026.05.15(以前能运行的java springboot项目突然间不能运行后台数据了)
java·开发语言·bug
Desenberg13 小时前
【Claude Code】因为中途修改配置路径导致Claude Code 插件安装失败
windows·bug
QuestLab1 天前
维护 Hermes Agent CN 过程中的碎碎念,以及从bug上得到的一点点启发
bug
java修仙传2 天前
Java 实习日记:一次 Excel 导入校验 Bug 的定位与数据更新逻辑优化
java·数据库·bug·excel·后端开发
当战神遇到编程2 天前
软件测试基础入门:从 BUG 到测试用例设计完整指南
测试用例·bug
Bear on Toilet4 天前
3. BUG篇
bug
编程探索者小陈4 天前
【测试】之BUG篇
bug
棋宣5 天前
uni-app编译到微信小程序中,父传子props首次传递数据不接收的bug
微信小程序·uni-app·bug
wqdian_com5 天前
华为手机浏览器的一个bug
服务器·华为·bug
清水白石0085 天前
把事故变成护城河:如何设计回归测试,防止“订单重复创建”这类历史 Bug 卷土重来?
python·bug