当前位置: 首页 > news >正文

Git的原理与使用 -- 远程操作

目录

  • 理解分布式版本管理系统
  • 新建远程仓库
  • 克隆远程仓库
  • 向远程仓库推送
  • 拉取远程仓库
  • 忽略特殊文件
  • 配置命令别名
  • 标签管理
  • 推送标签

理解分布式版本管理系统

我们知道了什么是版本管理系统,那什么是分布式版本管理系统呢?
版本管理系统:一个帮你“记录文件每次改动、并能随时切换到任何历史版本”的时光机器和协作工具。它的核心是 “集中管理” ,所有人都围绕着一个中央服务器工作。
分布式版本管理系统:像一个开源项目。每个参与者(你、我、他)都克隆了一份完整的源代码和历史。我们可以在自己的副本上任意修改,最后再把大家的成果合并到一起。
在这里插入图片描述

新建远程仓库

创建远程项目仓库:
在这里插入图片描述
填写基本信息:
在这里插入图片描述

初始化仓库

  • 请选择语言:是选择你仓库里面保存的是什么语言的文件,主要目的就是识别您仓库里保存的是什么编程语言的文件。
  • 添加.gitignore:选择一个文件,这个文件里面保存的是你上传远程仓库时,要忽视的文件名或者是带改后缀民的文件,有时的需要上传的文件很对,但是里面有一些文件你不需要上传,手动设置比较麻烦,所以可以使用.gitignore文件来忽视你不想上传的文件。
  • 添加开源许可证:开源许可证就是一种“使用说明书”或“法律合同”,它附在你的源代码上,明确地告诉别人:他们能用你的代码做什么?他们需要遵守什么条件?他们不需要遵守什么条件?在保护你作为原作者权益的基础上,授予他人使用你代码的自由和权利。

设置模板

  • Readme文件:选择Readme模板文件,帮助别人更好的认识你的仓库,相当于是你的仓库的介绍和使用说明,也就是一个项目的“自我介绍”和“使用说明书”。
    在这里插入图片描述
  • Issue模板文件:在你的仓库里面如果有人发现了你的项目的文件的问题或者错误,可以向你提交Issue文件,而Issue模板文件会提供这样一个模板。
    在这里插入图片描述
  • Pull Request模板文件:一般开发人员不会自己将当前分支合并到master分支上,当你用其他分支向master主分支合并时,为了安全考虑,你需要创建一个合并申请单给管理员审核,不用自己直接进行合并。
    在这里插入图片描述
    仓库的管理人员一般有这四类
    在这里插入图片描述

创建成功

在这里插入图片描述
我们可以对远程仓库进行⼀个基本的设置:开源or私有
在这里插入图片描述
从创建好的远程仓库中我们便能看到,之前在本地学习过的分支,也存在于远程仓库中并被管理起来了。刚创建的仓库有且只有⼀个默认的master分支
在这里插入图片描述

克隆远程仓库

克隆远程仓库的方式常见的有两种HTTPSSSH SSH 协议和 HTTPS 协议是 Git 最常使用的两种数据传输协议。SSH 协议使用了公钥加密和公钥登陆机制,体现了其实用性和安全性,使⽤此协议需要将我们的公钥放上服务器,由 Git 服务器进行管理。使用 HTTPS 方式时,没有要求,可以直接克隆下来。
在这里插入图片描述
在这里插入图片描述
第一种方式:HTTPS克隆,直接复制
在这里插入图片描述
在本地仓库使用git clone命令进行克隆,克隆成功后本地会有一个gitcode仓库

[zx@aliyun myGit]$ git clone https://gitee.com/moeqwer/gitcode.git
Cloning into 'gitcode'...
Username for 'https://gitee.com': 15775461363   --用户名可以是你的电话
Password for 'https://15775461363@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 (from 0)
Unpacking objects: 100% (4/4), 1.80 KiB | 1.80 MiB/s, done.    --克隆成功
[zx@aliyun myGit]$ ll
total 0
drwxrwxr-x 3 zx zx 55 Oct 30 14:40 gitcode 

git config user.name 命令用于设置或查看你在本地 Git 仓库中提交代码时使用的“作者姓名”。把它想象成你在每次提交代码时,在记录本上签下自己的名字。这个名字不会用于登录远程仓库,它的唯一作用是:告诉所有人,这一笔代码是谁提交的。当你在查看项目历史(git log)时,看到的提交者名字就是由 user.nameuser.email 决定的。
git config user.email 命令用于设置或查看你在本地 Git 仓库中提交代码时使用的“作者邮箱”。核心作用就是为你的代码提交提供“联系方式”。
git config user.email 就是为你本地提交的代码 “留下联系方式”,它和 user.name 一起构成了你的提交者身份,并会随着提交历史被永久记录。

[zx@aliyun gitcode]$ git config user.name 'moeqwer'
[zx@aliyun gitcode]$ git config user.email  '2186814725@qq.com'

第二种方式:SSH克隆,直接复制

[zx@aliyun myGit]$ git clone git@gitee.com:moeqwer/gitcode.git
Cloning into 'gitcode'...
The authenticity of host 'gitee.com (180.76.198.77)' 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,180.76.198.77' (ECDSA) to the list of known hosts.
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_rsaid_rsa.pub 这两个文件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建SSH Key:

[zx@aliyun ~]$ tree .ssh   
.ssh
└── known_hosts           -- 我这里没有,需要自己创建0 directories, 1 file

使用这个命令可以创建SSH密钥。

ssh-keygen -t rsa -b 4096 -C "你的邮箱地址@example.com"

一路enter就可以了。

[zx@aliyun ~]$ ssh-keygen -t rsa -b 4096 -C "2186814725@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zx/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
......
[zx@aliyun ~]$ tree .ssh
.ssh
├── id_rsa
├── id_rsa.pub
└── known_hosts
0 directories, 3 files

顺利的话,可以在用户主目录里找到 .ssh 目录,里面有 id_rsa 和 id_rsa.pub 两个文件,这两个就是SSH Key的秘钥对, id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,可以放心地告诉任何人。
第二步:添加自己的公钥到远端仓库。复制 id_rsa.pub里面的内容到远程仓库中,在设置中添加公钥。
在这里插入图片描述
在这里插入图片描述
公钥添加成功
在这里插入图片描述

第三步:在本地克隆远程仓库,克隆好仓库之后需要设置你的user.name和user.email,同HTTPS一样,这里就不再赘述了。

[zx@aliyun myGit]$ git clone git@gitee.com:moeqwer/gitcode.git

在这里插入图片描述

[zx@aliyun myGit]$ ll
total 0
drwxrwxr-x 3 zx zx 55 Oct 31 16:30 gitcode
[zx@aliyun myGit]$ tree gitcode/
gitcode/
├── README.en.md
└── README.md
0 directories, 2 files

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

[zx@aliyun gitcode]$ git remote -v
origin	git@gitee.com:moeqwer/gitcode.git (fetch)
origin	git@gitee.com:moeqwer/gitcode.git (push)

这表示
有一个叫 origin 的远程仓库,因此origin 就是仓库名称
它的地址是 git@gitee.com:moeqwer/gitcode.git
用于拉取(fetch)和推送(push)代码

注意:如果有多个人协作开发,GitHub/Gitee 允许添加多个公钥,只要把每个人的电脑上的
Key 都添加到 GitHub/Gitee,就可以在每台电脑上往 GitHub/Gitee 上提交推送了。

向远程仓库推送

推送是分支与分支之间的推送,本地分支推送到远程分支需要对两个分支建立连接,克隆仓库是会自动把本地分支master与远程仓库中的master分支建立连接。
git push的使用语法

 git push [远程仓库名] [本地分支名]:[远程仓库的分支名]git push [远程仓库名] [本地分支名]        --如果本地分支名和远程仓库的分支名相同,可以省略只写本地分支名
[zx@aliyun gitcode]$ git push origin master:master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 307 bytes | 307.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 3341578c
To gitee.com:moeqwer/gitcode.gita23ff72..03e17e5  master -> master

查看远端,推送成功
在这里插入图片描述
推送成功!这里由于我们使用的是 SSH 协议,是不用每⼀次推送都输入密码的,方便了我们的推送操作。如果你使用的是 HTTPS 协议,有个麻烦地方就是每次推送都必须输入口令。

拉取远程仓库

我们修改当前的远程仓库中file.txt文件的内容
修改前:
在这里插入图片描述
修改后:
在这里插入图片描述
远程仓库中的file.txt文件已经被修改了,但是本地仓库中file.txt的内容并没有被修改。

[zx@aliyun gitcode]$ cat file.txt
hello file

此时远程仓库中的内容是比本地仓库中的内容更新,所以我们需要在本地仓库拉取远程仓库,与本地仓库进行合并。
git pull命令语法

 git pull [远程仓库名] [远程仓库的分支名]:[本地分支]git pull [远程仓库名] [远程仓库的分支名]     -- 如果远程仓库的分支名和本地分支相同,可以省略本地分支名称
[zx@aliyun gitcode]$ git pull origin master:master
.......
[zx@aliyun gitcode]$ cat file.txt     
hello file
xxx coding ...

我们发现,拉取成功了!

忽略特殊文件

在创建初始化仓库时,会让我们选择.gitignore模板文件,这个文件里面的内容,就是我们想要忽略的文件名。你在初始化仓库时可以选择你想要的模板文件,后面也可以自己添加你想要忽略的文件名到该文件中,git版本管理器会自动忽略掉该文件,不会推送到远端。
在这里插入图片描述
如果在创建时没有选择,可以在本地仓库创建并推送到远端。

[zx@aliyun gitcode]$ vim .gitignore     --创建.gitignore文件
[zx@aliyun gitcode]$ cat .gitignore
a.so          --忽略a.so文件
*.ini          --忽略以.ini结尾的文件

可以看到当我们创建了a.so文件时,git并没有帮我们追踪该文件,git status并没有显示让我们commit a.so文件,只显示了.gitignore文件。

[zx@aliyun gitcode]$ touch a.so
[zx@aliyun gitcode]$ git add .
[zx@aliyun gitcode]$ git status
On branch master
Your branch is up to date with 'origin/master'.Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   .gitignore

如果我们就想将a.so文件推送到远端,可以使用git add -f a.so,将a.so文件强制推送到远端。

[zx@aliyun gitcode]$ git add -f a.so
[zx@aliyun gitcode]$ git status
On branch master
Your branch is up to date with 'origin/master'.Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   .gitignorenew file:   a.so

如果所有的以.ini结尾的文件我都不想推送到远端,就想把abc.ini文件推送到远端,可以使用强制推送,也可以指定文件排除,在 .gitignore 规则外的写法就是 ! +文件名,所以,只需把例外文件添加进去即可。

[zx@aliyun gitcode]$ vim .gitignore 
[zx@aliyun gitcode]$ cat .gitignore 
a.so
*.ini
!abc.ini
[zx@aliyun gitcode]$ touch abc.ini
[zx@aliyun gitcode]$ git add .
[zx@aliyun gitcode]$ git status 
On branch master
Your branch is up to date with 'origin/master'.Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   .gitignorenew file:   a.sonew file:   abc.ini        -- abc.ini被git管理了,可以推送到远端了

如果遇到某一个文件,你想添加到仓库中,但是并没有被添加进去,我们可以使用git check-ignore -v 文件名来查看忽略原因。

[zx@aliyun gitcode]$ touch b.ini
[zx@aliyun gitcode]$ git add .
[zx@aliyun gitcode]$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   .gitignorenew file:   a.sonew file:   abc.ini
[zx@aliyun gitcode]$ git check-ignore -v b.ini         --查看忽略原因
.gitignore:2:*.ini	b.ini
[zx@aliyun gitcode]$ cat .gitignore 
a.so
*.ini      -- 以.ini结尾的文件名都会被忽略
!abc.ini

配置命令别名

在我们使用Git 期间,有些命令敲的时候着实让人头疼(太长了。。),幸运的是,git支持对命令进行简化!
举个例子,将 git status 简化为 git st ,对应的命令为:

[zx@aliyun gitcode]$ git config --global alias.st 'status'
[zx@aliyun gitcode]$ git st
On branch master
Your branch is up to date with 'origin/master'.nothing to commit, working tree clean

--global是一个全局配置,针对的是本主机上所有的仓库的,如果不加上–global选选项的话,就只针对本仓库有效。

标签管理

标签 tag ,可以简单的理解为是对某次 commit⼀个标识,相当于起了⼀个别名。例如,在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识里程碑的意义。这有什么用呢?相较于难以记住的 commit idtag 很好的解决这个问题,因为 tag ⼀定要给⼀个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。所以说,打标签就是该commit id打的,帮助你更好的认识它,分辨它。
打标签使用的语法是:

git tag [标签] [commit id]

在Git中打标签非常简单,在打标签之前,需要切换到需要打标签的分支上。

[zx@aliyun gitcode]$ git checkout master 
[zx@aliyun gitcode]$ git tag v1.0      -- 没有写commit id,默认是给最新的一次commit id打的标签
[zx@aliyun gitcode]$ git log --pretty=oneline --abbrev-commit
a9f95aa (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) my file.txt   --最新的一次commit id
50ac551 mt
eba0f93 update file.txt.
[zx@aliyun gitcode]$ git tag v0.9 50ac551   --该commit id50ac551 打标签
[zx@aliyun gitcode]$ git log --pretty=oneline --abbrev-commit
a9f95aa (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) my file.txt
50ac551 (tag: v0.9) mt     这里可以查看到标签
eba0f93 update file.txt.

git tag命令可以查看标签

[zx@aliyun gitcode]$ git tag
v0.9
v1.0

tree .git可以查看到tag标签
在这里插入图片描述

Git 还提供可以创建带有说明的标签,用-a指定标签名,-m指定说明文字,格式为:

git tag -a [name] -m "XXX" [commit_id]
[zx@aliyun gitcode]$ git tag -a v0.8 -m'my file.txt' eba0f93   --需要携带-a选项和说明信息
[zx@aliyun gitcode]$ git log --pretty=oneline --abbrev-commit
a9f95aa (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) my file.txt
50ac551 (tag: v0.9) mt
eba0f93 (tag: v0.8) update file.txt.
03e17e5 file.txt
a23ff72 Initial commit

使用git show [标签名]可以查看该标签的详细信息。

[zx@aliyun gitcode]$ git show v0.8
tag v0.8
Tagger: 15775461363 <2186814725@qq.com>
Date:   Fri Oct 31 18:04:45 2025 +0800my file.txtcommit eba0f93ea07572927346150fddbe556bdb502462 (tag: v0.8)
Author: moeqwer <2186814725@qq.com>
Date:   Fri Oct 31 09:05:56 2025 +0000update file.txt.Signed-off-by: moeqwer <2186814725@qq.com>diff --git a/file.txt b/file.txt
index f7ca42b..b68ca75 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,2 @@hello file
+xxx coding ...
\ No newline at end of file

如果你发现标签打错了,你也可以删除标签。

[zx@aliyun gitcode]$ git tag -d v0.8
Deleted tag 'v0.8' (was 069475c)
[zx@aliyun gitcode]$ git tag    --标签出现的顺序不是按照时间顺序,而是按照字母顺序出现的
v0.9
v1.0

推送标签

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。如果要推送某个标签到远程,使用命令 git push origin [tagname]

[zx@aliyun gitcode]$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag fb4f5495
To gitee.com:moeqwer/gitcode.git* [new tag]         v1.0 -> v1.0

在这里插入图片描述

在这里插入图片描述
使用git push origin --tag命令,可以将所有的标签推送到远端。

[zx@aliyun gitcode]$ git tag
v0.9
v1.0
[zx@aliyun gitcode]$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 56436290
To gitee.com:moeqwer/gitcode.git* [new tag]         v0.9 -> v0.9

在这里插入图片描述
当然,可以在本地删除远端标签。

[zx@aliyun gitcode]$ git tag -d v0.9  --删除本地标签
Deleted tag 'v0.9' (was 50ac551)
[zx@aliyun gitcode]$ git push origin :v0.9  --删除远端标签
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 6342faab
To gitee.com:moeqwer/gitcode.git- [deleted]         v0.9
[zx@aliyun gitcode]$ git push origin :refs/tags/v1.0   --删除远端标签
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 6846609d
To gitee.com:moeqwer/gitcode.git- [deleted]         v1.0

在这里插入图片描述

远端删除成功!

http://www.dtcms.com/a/553111.html

相关文章:

  • jetson开发板自编译编译pytorch
  • Git 仓库分支删除及清理指南
  • gitlab解决传过大文件后删除导致pack过大问题
  • sourcefare零基础学习,创建第一个扫描项目(服务端Git方式)
  • SAP使用abapGit在云环境中迁移开发包
  • DGX Spark 实战解析:模型选择与效率优化全指南
  • 宁德蕉城城乡建设网站广州建站业务公司
  • 长乐福州网站建设交换神器
  • Unity之OpenXR+XR Interaction Toolkit交互过滤器Filtering
  • MATLAB 模拟台风路径和强度变化
  • 第3讲:创建并运行你的第一个Flutter应用
  • 使用LangChain+LangGraph自定义AI工作流,实现音视频字幕生成工具
  • 【Matlab】基于模型预测控制(MPC)与滚动时域估计(MHE)集成的目标点镇定研究
  • 基于MATLAB的粒子群算法(PSO)优化libsvm参数完整实现
  • PostgreSQL 的表继承与分区
  • 神经网络之矩阵可逆
  • 笔记:现代操作系统:原理与实现(7)
  • Java-164 MongoDB 认证与权限实战:单实例与分片集群 整体认证配置实战 最小化授权/错误速查/回滚剧本
  • 北京公司的网站建设きょこんきょうしゃ在线
  • 第4讲:理解Flutter的灵魂 - “Everything is a Widget”
  • 驱动精灵、驱动人生、NVIDIA专业显卡驱动、360驱动大师、联想乐驱动,电脑驱动修复工具大全
  • Spring Boot 4与Spring Framework 7:云原生Java的全新革命与企业级实战
  • 虚拟机在云原生与智能时代的未来应用场景探析
  • 电脑如何设置wifi密码,详细步骤教程指南
  • C#面试题及详细答案120道(51-60)-- LINQ与Lambda
  • 北京网站备案的地址ps怎么做网站分隔线
  • DLSS是什么
  • web网页开发,旧版在线%考试,判题%系统demo,基于python+flask+随机分配考试题目,基于开发语言python,数据库mysql
  • 【C++】哈希表封装实现 unordered_map 和 unordered_set
  • 353-Spring AI Alibaba ARK 多模型示例