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

git 入门使用教程

image

git 入门使用教程

Git简介

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

  • 引用官方的话,Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。
  • 引用廖雪峰老师的话,它能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以。

版本控制

版本控制就是一种用于管理项目、文件、目录等的一种技术手段,他可以实现对内容历史控制​,就如同下图中的手动版本控制。通过版本控制技术,我们可以有效的实现对内容的查看历史记录、备份以及恢复文件等操作。可以简单的认为是一个版本管理器。
通过Git可以实现以下功能:

  • 对文件的备份、历史记录的操作,起到保护作用
  • 跨区域协同开发,协同办公,减轻负担
  • 跟踪和记录项目开发过程

Git的诞生

很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

随后,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

Git&SVN

git就是分布式的版本控制系统。所有​的版本信息仓库都同步到了本地​,用户可以离线查看左右版本记录,也可以离线在本地提交,工作时直接在本地编辑,联网时再推送至云端。git通过仓库来存放和管理这些文件,git仓库可以分为:

  • 本地仓库:开发人员本地的git仓库

  • 远程仓库:远程服务器上的git仓库

SVN是集中式版本控制的代表。项目的所有版本​数据都保存在服务器​上,开发者工作时需要从服务器获得最新版本到本地,然后进行修改或编辑。开发者离线时不能查看历史版本或在不同不同分支工作。

image

安装Git

linux系列安装git很简单,执行一条命令即可。更多其它版本安装请查看官方文档:https://git-scm.com/downloads

Debian/Ubuntu

sudo add-apt-repository ppa:git-core/ppa
sudo apt update; apt install git

Fedora

yum install git           # (up to Fedora 21)
dnf install git             # (Fedora 22 and later)

Arch Linux

pacman -S git

openSUSE

zypper install git 

centos/RHEL

yum install  -y git

Windows

直接下载(淘宝镜像),傻瓜式安装即可。

工作区域

git含有4个工作区域,3个本地工作区域(工作区​、暂存区​、资源库​)和一个远程仓库​。

  • 工作区:平时存放代码的位置,也就是我们的项目目录。
  • 暂存区.git​文件中的index​文件就暂存区。用与临时存放改动的文件,也叫stage。
  • 版本库:本地存放所有版本数据的地方,位置位于工作区根目录下的 .git​目录中,版本库中存放了很多配置信息、日志信息和文件版本信息等。
  • 远程仓库:在服务器端托管代码的地方

image

git的工作流程:

  1. 在工作目录中添加、修改文件,进行项目开发
  2. 将需要进行版本管理的文件放入暂存区(git add .​),便于后期将文件推送至本地仓库
  3. 将暂存区的文件提交到本地Git仓库(git commit​)
  4. 将文件推送到远程仓库(git push​)

image

全局设置

当安装完Git之后,首先要做的就是设置用户名和email地址,每次的git提交都会使用该信息。该信息并不要求必须是我们github/gitee的用户名和邮箱,可以任意指定。

查看配置信息

# 查看系统git配置信息
git config --system --list
# 查看用户git配置信息
git config --global --list

设置用户信息

# 用户名
git config --global user.name "xcy.小相"
# 邮箱
git config --global user.email "xc2532800855@163.com"

文件状态

image

  1. Untracked未跟踪状态。表示该文件存在于工作目录中,但是并没有添加到git库,不参与版本控制。通过git add​命令将文件添加到暂存区中,即状态变为staged​。
  2. Unmodify:文件已入库但未修改状态。该文件最终有两种去处:被修改(Modified),通过git rm​移出版本库(Untracked)。
  3. Modified文件已入库且已修改状态。该文件最终有两种去处:通过git add​进入暂存(staged)状态,使用git checkout​命令丢弃修改返回到unmodify状态。
  4. staged已暂存状态,执行git commit​命令则将修改同步到库中。这时库中的文件和本地文件又变为一致,文件状态变为Unmodify状态。

创建仓库

要使用Git管理项目,我们首先需要有一个Git仓库。创建Git仓库的方式通常有两种:直接在本地初始化一个仓库,克隆远程仓库至本地。

创建本地仓库

创建一个项目目录,切换到项目根目录下执行下面的命令即可:

git init

执行之后可以看到文件根目录下有一个.git目录,该目录包含关于版本等的所有信息,则说明创建成功。

image

克隆远程仓库(常用)

克隆一个项目和它的整个代码历史(版本信息)

git clone [远程仓库地址]

本地操作

image

远程操作

基本操作

image

合并冲突

git merge 用来做分支合并,将其他分支中的内容合并到当前分支中。比如分支结构如下:
image
当前分支是master

$ git checkout master

把issueFix中的内容Merge进来:

$ git merge issueFix

如果没有冲突的话,merge完成。有冲突的话,git会提示那个文件中有冲突,比如有如下冲突:

<<<<<<< HEAD:test.c
printf (“test1″);
=======
printf (“test2″);
>>>>>>> issueFix:test.c

可以看到 ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时检出的分支)中的内容,下半部分是在 issueFix 分支中的内容。解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决:

printf (“test2″);

这个解决方案各采纳了两个分支中的一部分内容,而且删除了 <<<<<<<​,=======​,和>>>>>>>​ 这些行。在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决(resolved)。因为一旦暂存,就表示冲突已经解决。

分支操作

命令作用
git branch -r
git branch 分支名称新建一个分支
git checkout 分支名称切换到指定分支
git merge 分支名称合并到指定分支
git branch -d 分支名称删除某个分支
git push 仓库别名 --delete 分支名称删除远程仓库的某个分支

标签操作

git的标签,使得是某个分支某个特定时间点的状态,类似快照。通过标签,可以很方便的切换到标记时的状态。开发人员通常使用这个功能来发布节点(v1.0,v2.0)
image

命令作用
git tag列出所有的标签
git tag 标签名称创建一个新标签
git push 仓库别名 标签名称将标签推送至远程仓库
git checkout -b 分支 标签名称检出标签到一个新的分支

忽略文件

git默认是将本地工作目录中的所有文件都提交,即将所有文件都纳入版本控制中。但有时因为部分原因我们需要忽略部分文件,不纳入版本控制之中。这时,我们就可以通过.gitignore​文件来进行忽略设置。
在主目录下下创建.gitignore文件:

  1. 号开头的内容会被忽略掉,相当于注释内容
  2. 可以使用linux通配符。
  3. 以!开头表示例外规则,将不会被忽略
  4. 名称最前面添加路分隔符/​,表示忽略根路径下的某文件
  5. 名称的最后面天添加路径分隔符/​,表示忽略所有文件名为该名称的文件
# 忽略所有的后缀名为md的文件
*.md 
# readme.md除外的文件全部被忽略
!readme.md  
# 忽略路径为/files文件及其子目录中的内容
/files  
# 忽略所有名为files下的所有文件
files/ 

9. 使用码云

  1. 生成本地秘钥:
ssh-keygen -t rsa -C "xc2532800855@163.com" -f ~/.ssh/git_rsa
  1. 配置多秘钥管理
c d / . s s h / cd ~/.ssh/ cd /.ssh/ vim cofig
# 输入以下内容
Host gitee
HostName gitee.com
User git
Identityfile ~/.ssh/git_rsa
$ sudo chmod +600 ./config
  1. 在gitee 中创建仓库
  2. 克隆仓库到本地
~/Study/Git/gitCode » git clone https://gitee.com/xcyxiaoxiang/git-study.git
正克隆到 'git-study'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (6/6), 13.26 KiB | 905.00 KiB/s, 完成.
~/Study/Git/gitCode » ls                                                  
git-study
~/Study/Git/gitCode » cd git-study                                        
~/Study/Git/gitCode/git-study(master) » ls                                
LICENSE  README.en.md  README.md

http://www.xdnf.cn/news/4541.html

相关文章:

  • 全国通用Y1大型游乐设施修理作业证精选题
  • PTS-G5K13M RF Generator 5kW / 13MHz 射频电源User s Manual
  • Spring Boot 如何自动配置事务管理器?
  • 数据结构之线性表
  • 阿里云codeup以及本地gitclone+http
  • Mybatis标签使用 -association 绑定对象,collection 绑定集合
  • ROS第十三梯:RViz+Marker——自定义几何形状可视化
  • 深度学习模型的部署实践与Web框架选择
  • 淘宝按图搜索商品(拍立淘)Java 爬虫实战指南
  • 拉削丝锥,螺纹类加工的选择之一
  • 1.3 Expression.Lambda表达式树的介绍
  • LWIP的超时事件笔记
  • 【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成
  • vllm命令行启动方式并发性能实测
  • 联想Horizon 2系列电脑 参数
  • SpringBoot学生宿舍管理系统开发实现
  • 浏览器跨标签通信的实现原理
  • feign负载均衡
  • linux(centos)联网情况下部署
  • 第一章——typec电路
  • SpirngAI框架 Advisor API详解
  • 【无标题】如何在sheel中运行Spark
  • 基于Django框架开发的企业级IT资产管理系统
  • Topic和Partition的关系是什么?为什么需要分区? (Topic是逻辑分类,Partition是物理分片;提升并行度和扩展性)
  • 【信息系统项目管理师-论文真题】2005下半年论文详解(包括解题思路和写作要点)
  • mint系统详解详细解释
  • 开源数学推理模型DeepSeek-Prover-V2:88.9%通过率+超长推理链
  • 数造科技携 DataBuilder 亮相安徽科交会,展现“DataOps +AI”双引擎魅力
  • 机器学习之嵌入(Embeddings):从理论到实践
  • LangChain第二讲:不设置环境变量也能调用LLM大模型吗?(更简单地调用LLM)