Java0基础_day20_版本控制工具_Git

本文介绍了版本控制的重要性,从本地版本控制、集中式到分布式版本控制的概念,并详细讲解了Git的工作原理、本地库管理、分支操作、远程库连接与开发流程。特别提到了Git的版本回退、文件差异对比、团队协作开发以及跨团队开发流程。此外,还讨论了码云的使用以及如何通过SSH免密登录。最后,文章总结了Git的几个关键点,包括分支管理、缓存机制、数据安全性以及版本同步策略。
摘要由CSDN通过智能技术生成

标签:Git、SVN、Github、码云gitee


 

 

1.版本控制简介

  • 为什么需要版本控制?

         大家肯定遇到过频繁多次修改论文等word文件的情况,极端情况是大家每次修改就另存为一个新文件,非常繁琐,效率很低,同时也无法准确描述每个副本的更改情况,因此我们需要一个工具记录我们的修改历史,保留每次修改后的最终文件,这就引入了版本控制。

  • 版本控制分类? 

 版本控制分为上面所说的本地版本控制,集中版本控制和分布式版本控制。

集中式版本控制:

  • 核心思想:中心服务器负责记录修改历史和保存
  • 交互过程:参与协作的用户需要时刻连接远程的服务器直接操作服务器的文件,然后服务器记录各自的操作历史,最后生成版本。
  • 问题:中心节点负载大、中心节点数据存在丢失风险、用户侧体验慢
  • 变更历史:CVN→SVN[开源]、BitKeeper、微软VCS

分布式版本控制:

  • 核心思想:每个用户自带副本,本地操作写到本地仓库,待合适时push到远程仓库,完成版本迭代
  • 交互过程:各主机可以独立开发,然后把变更同步到本地仓库,最后随意同步到远程服务器
  • 特点:权限控制【权限分配、审核】、分支管理【合并】、版本管理【快照】
  • 优点:不用联网、数据安全有保障、数据完整性、与linux兼容
  • 代表作品:Git

2.Git结构

总的来说,Git分为用户操作系统上的本地库和远程库,远程库即位于远程服务器的仓库,而本地库为用户本地某个文件夹,其通信流程如下图所示:


3. 本地库管理

1. 结构:包括工作区[workspace]、暂存区[index]、本地仓库[repository]

其中,工作区即当前项目所在本地的某个文件夹,暂存区可以理解为存放的修改历史,而本地仓库则是修改后的版本全部数据。

其中通过add命令把本地文件添加到暂存区,再通过commit提交到本地仓库。

2.本地库初始化操作→告诉git工具,某个文件夹需要他来管理

→进入文件夹→git init→此时该文件夹会出现.git的文件

3.本地库初始化操作2→告诉git工具自己的信息,即我是谁→git签名

→形式:用户名,email地址【可以随便写】

→命令级别:

  • 项目级别
    ​git config user.name jj
    git config user.email jj@163.com
  • 系统级别
    git config --global user.name zhangsan
    git config --global user.email zhangsan@183.com

【注意】此时你会发现用户文件夹/当前文件夹下会有.gitconfig的配置文件。

【查看配置文件】

git config --system  --list
git config --global --list

4.本地库add和commit操作

通用操作:

git status→git add XX→  git status→ git commit -m "描述信息" XX →git status
或者:
git status→git add ..→  git status→ git commit -m "描述信息"  →git status

5. 版本控制

前面讲到,每一个本地库的版本都有一个版本号,其实它是将我们的本地库版本数据经过自带的SHA-1哈希算法映射为固定长度的唯一标识信息,据此可以区分不同的版本和数据,在Git底层采用了HEAD指针指向当前的版本号,即本地仓库数据快照。

因此,根据这个版本号,我们就可以实现版本回退与前进、文件删除恢复、文件差异对比:

  • 查看版本号:
    • git log
    • git log --pretty=oneline
    • git log --oneline//选取前7位hash值;
    • git reflog//显示指针编号

  • 版本回退方式

    • 方式1:hard:在本地库移动HEAD指针,重置暂存区,重置工作区

    • 方式2:soft:只在本地库移动HEAD指针

    • 方式3:mixed:在本地库移动HEAD指针,重置暂存区

    • 理解:我们说这上面的本地库,暂存区,重置工作区可以理解为三兄弟,正常情况下是一排一起走,齐头并进,如果只移动部分,那么会导致数据出错。

  • 回退指令:

    • 法1:靠索引
      git reset --hard hash值;
      如:git reset --hard f52c18c 
      法2:靠指针
      git reset --hard HEAD^
      git reset --hard HEAD~3
  • 文件差异对比
git diff 1.txt //此时是工作区与暂存区比较

git diff HEAD 1.txt 工作区与本地库某个版本比较

git diff 缺省比较多个文件


4.远程库连接、开发流程

一般情况下,有如下步骤:

第一步:在本地新建文件夹,例如folder,然后git bash here

第二步:输入git init初始化文件夹

第三步:输入git clone clone地址,如

​git clone https://github.com/Zhujie-ww/jquery_search.git

【注意】这会有三个效果:拷贝文件、初始化本地库、创建origin远程地址别名

第四步:开发、撸代码

第五步:git add . →git commit -m "更新日志"→git status→准备推送

第五步:push准备

前提:先使用git remote -v查看当前远程库是否存在别名及传送方式,如果有必要的话,可以git remote add origin XX.git地址→将连接命名为origin

【注意】这里的git地址可以使SSH格式,也可以是HTTP格式。如果是HTTP格式,则一般会要求登录,输入你的git地址所在的网站的注册的用户信息和密码;如果是SSH格式,则需要手动配置:

ssh-keygen -t rsa -C "1282206372@qq.com"
复制公钥密码到github/Gitee即可。

此时配置好后,系统用户文件夹下会有.SSH文件,里面有_PUB文件,直接打开复制粘贴到对应网站后台即可。

【注意2】SSH方式是全局的,不用每次登录,而http方式是每次需要登录,好处是可以选择不同的代码托管网站进行push。

第六步:开始push

git push origin master
//这里的origin前面已经取别名绑定到了XX.git地址。

5.分支处理

git支持多分支,具体而言,拿github举例,分为master分支和其他分支,在实际开发中,这样的设计有利于并行开发,大大提高效率,同时开发独立,不会影响大分支。

分支处理
分支处理

分支的各命令如下:

第一个:查看分支:git branch -v

第二个:创建分支:git branch hot_fix

第三个:切换分支:git checkout hot_fix

第四个:合并分支

  • 第一步:切换到被合并的分支上→即大分支上
    • git checkout master

  • 第二步:进行merge合并/吞并
    • git merge hot_fix

  • 最终效果:master分支吞并了hot_fix分支即上图的样子,成为master的新版本。

分支合并冲突:

描述:在不同分支对同一个文件进行相同操作时会合并失败,git不知道如何处理该文件

举例:

解决办法:与另一个分支作者进行交流,删除标记,修改到合适的位置,写入退出。

vim xx.txt//修改文件的标记,进行合并
git status
git add xx.txt
git commit -m "合并成功"//注意,这里千万不能带文件名,这是规定

 

 

6.团队内部开发流程

如图所示,岳不群与令狐冲要协作开发,都是一个队伍里的,怎么操作呢?

第一步:岳不群新建项目,如Aoteman小程序:

git init  
git add .
git commit -m "第一版奥特曼程序"
git status
git reote -v 
git remote add origin_http https://github.com/Zhujie-ww/jquery_search.git
git push origin master

此时登录密码后上传到了github服务器的jquery_search仓库,即远程库。

第二步:令狐冲通过clone、修改代码后进行push操作

git clone https://github.com/Zhujie-ww/jquery_search.git
git add .
git commit -m "这是令狐冲的第一版"
git status 
git remote -v
git push origin master

此时显然会被git进行拦截,因为此时令狐冲并未获取代码push权限,此时需要找仓库主人-岳不群邀请加入。

第三步:岳不群拉令狐冲入伙

岳不群后台设置github仓库的权限,将邀请连接发给令狐冲,然后后者加入即可push。

第四步:岳不群查看

此时,由于岳不群的本地库与现在远程库的版本不一致,因此

岳不群需要通过pull拉去所有的最新版本库,待查看,修改后提交,此时git才认为你是真的想提交了。【这是不是有点像多线程呢?】

值得注意的是,pull其实是fetch+merge,即获取数据,合并数据。

其中:fetch命令:

git fetch origin master

用于下载远程库的master分支到本机的origin/master文件夹下【自动新建,互不干扰】。

然后merge命令:

git merge origin/master[远程地址别名/分支名]

其含义是左侧所在的分支【一般是本地master】吃掉右边的远程地址的master分支,用于合并。

当然,以上两步可以合并为:

git pull origin master

【选择问题】如果变化小,建议pull,否则还是要fetch+merge。

【插曲】有时候,团队中成员会同时修改同一个文件的某一行内容,此时后push的用户必须要pull下来,然后将冲突的地方手动修改,最后push回去。


7.跨团队开发流程

 

 如上图,不难发现,如果想临时加入第三方贡献人员的代码,可以这么做:

第一步:东方不败先fork到自己的github仓库,然后clone到本地,修改后push到自己的远程库

fork
git clone https://github.com/Zhujie-ww/jquery_search.git
git add .
git commit -m "这是东方不败的新贡献第一版"
git remote -v
git remote add origin_dongfnagbubai  https://github.com/dfbb/Aotman.git
git push origin_dongfnagbubai master

第二步:东方不败在github提交自己的pull request给岳不群

第三步:岳不群审核后通过pull request,至此东方不败贡献的代码已然合并到岳不群的仓库中!

第四步:岳不群pull到本地进行修改


8.码云+git

第一步:注册完善信息

第二步:设置绑定SSH公钥,免密码登录

  进入C:\USERS\ADMINISTRATOR\.SSH

  生成公钥

  ssh-keygen -t rsa

   //采用rsa加密算法

   此时生成两个文件,赋值_pub文件内容

第三步:在码云添加公钥,加入绑定,修改标题;

第四步:在码云新建仓库

              设置是否公开

           许可证:开源是否可以随便用,是否可以商用,是否可以转载。

最后,clone到本地,每次push默认到码云!


 

9.总结

第一点:分支管理其本质是HEAD指针标识,再次彰显指针妙法!

第二点:处处有缓存,git 第二次push时不用输入密码了,因为windows自带凭据管理器,记录下自己输入的密码,更为方便。

第三点:任何事情都要留后手,换在计算机世界中,时时要备份,处处有快照,不管是虚拟机的快照功能,还是SVN修改记录,或是Git副本存档,都保证了数据的安全性,尽管有时这是以空间为代价的。

第四点:下载慢的较好的解决思路之一是采用国内镜像网站!

第五点:常用linux命令要多用:

cd ./X #或者直接 cd X
pwd
clear/reset  #清屏/重载
ls  # 白色=文件、绿色=可执行文件,蓝色=目录
touch #文件名.后缀=新建文件)  
mkdir #新建文件夹  
rmdir #删除文件夹  				
rm -rf /   #递归清除linux的所有东西
history  #查看历史命令
# 注释
exit  #退出
help #帮助

第六点:版本同步时不想同步一些信息,方法:

在根目录下新建.gitignore文件,加入规则:

# 默认忽略的文件
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# IDEA配置文件
.idea/
*.iml
*.ipr
*.iws

# 类文件
*.class
*.log
*.lock
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值