版本控制工具-Git

版本控制工具-Git

一、概述

学习资料: https://git-scm.com/book/zh/v2

什么是版本控制系统?

版本控制软件提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,追踪多个版本的开发和维护活动,及时发布软件

一句话总结:版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统

版本控制系统分类:

  • 集中式版本控制系统(CVCS): SVN

在这里插入图片描述

  • 分布式版本控制系统(DVCS):Git

在这里插入图片描述

什么是Git?

Git是一款免费开源的分布式版本控制系统,用以处理小到大型的工程版本控制操作。

Git历史

同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。

Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。

到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统(参见 Git 分支)。

Git学习文档

中文文档: https://git-scm.com/book/zh/v2

二、Git使用

安装Git

以windows平台为例

下载Git lient应用

https://github.com/git-for-windows/git/releases/download/v2.23.0.windows.1/Git-2.23.0-64-bit.exe

安装配置

建议:使用默认配置即可

如何使用Git
  • GUI
  • Bash
    在这里插入图片描述
初始化设置
Administrator@PC-20190909FNCP MINGW64 /e
$ git config --global user.name 'liujianxin'

Administrator@PC-20190909FNCP MINGW64 /e
$ git config --global user.email '3433686663@qq.com'

Administrator@PC-20190909FNCP MINGW64 /e
$ git config --list
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
user.name=gaozhy
user.email=gaozhy@zparkhr.com.cn
核心概念

Git 工作区、暂存区和版本库

  • 工作区:工作目录。

  • 暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    在这里插入图片描述

基本操作

创建版本库(Repository)

仓库的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻恢复还原。

Administrator@PC-20190909FNCP MINGW64 /f/baizhi
$ git init
Initialized empty Git repository in F:/baizhi/.git/

使用git init指令会在工作目录中,创建一个隐藏目录.git, 此目录是git版本库文件,请勿破坏

Add

将工作区中的文件 添加到版本库的暂存区

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git add Hello.java
Commit

将暂存区的数据,提交到版本库。只有提交到版本库的数据,Git才会进行版本控制操作

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git commit -m 'first commit Hello.java'
[master (root-commit) 8c21f36] first commit Hello.java
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 Hello.java
Status

展示Git的工作状态

如:删除Hello.java

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    Hello.java

no changes added to commit (use "git add" and/or "git commit -a")
Checkout

从版本库恢复误删除的数据

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git checkout -- Hello.java
Diff

比对工作区文件或者目录和版本库内容差异

+: 工作区对比版本库多出来代码

-: 工作区对比版本库少出来代码

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git diff Hello.java
diff --git a/Hello.java b/Hello.java
index d6301bf..936b28c 100644
--- a/Hello.java
+++ b/Hello.java
@@ -1,5 +1,4 @@
 public class Hello{
        public static void main(String[] args){
-               System.out.println("Hello");
        }
 }
Rm

删除工作区的文件或者目录

真删除
Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ rm -rf Cat.java

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    Cat.java

no changes added to commit (use "git add" and/or "git commit -a")

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git add Cat.java

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    Cat.java


Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git commit -m 'delete Cat.java'
[master a980b75] delete Cat.java
 1 file changed, 1 deletion(-)
 delete mode 100644 Cat.java
误删除
Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    Hello.java

no changes added to commit (use "git add" and/or "git commit -a")

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git checkout -- Hello.java

版本回退

log

展示Git版本库的提交日志


Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git log

commit a980b7551643e8ab39d41ec9a84cae3903990db9 (HEAD -> master)  # commit id
Author: gaozhy <gaozhy@zparkhr.com.cn>   # 操作人身份信息
Date:   Fri Oct 18 14:33:04 2019 +0800   # 操作时间
 						
    delete Cat.java						 # 操作内容
    
Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git log --pretty=oneline
a980b7551643e8ab39d41ec9a84cae3903990db9 (HEAD -> master) delete Cat.java
5e3aa730d9a4e2656ebb0589ec9e604dec413d61 modify something
c85edcd49c082a1f41bd36342c248b89b9c95d21 first commit Cat.java
2fae3bb8852414d6787eaab3965cf04d69246366 print hello
8c21f366594684612b71df8827807677b302332b first commit Hello.java
reset

回退到版本库的历史版本

从历史版本回到将来版本

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git reset --hard 2fae3 
HEAD is now at 2fae3bb print hello

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
# 展示所有的操作日志
$ git reflog
8c21f36 (HEAD -> master) HEAD@{0}: reset: moving to 8c21f366594684612b71df882780                                                                                                               7677b302332b
a980b75 HEAD@{1}: reset: moving to a980b7551643e8ab39d41ec9a84cae3903990db9
8c21f36 (HEAD -> master) HEAD@{2}: reset: moving to 8c21f366594684612b71df882780                                                                                                               7677b302332b
c85edcd HEAD@{3}: reset: moving to c85edcd49c082a1f41bd36342c248b89b9c95d21
a980b75 HEAD@{4}: commit: delete Cat.java
5e3aa73 HEAD@{5}: commit: modify something
c85edcd HEAD@{6}: commit: first commit Cat.java
2fae3bb HEAD@{7}: commit: print hello
8c21f36 (HEAD -> master) HEAD@{8}: commit (initial): first commit Hello.java
Check(过期)

丢弃已提交到暂存区的修改内容

三、Git远程仓库-GitHub

Git远程仓库:GitHub、GitLab

GitHub是全球最大的一个Git本地版本库的托管网站,使用Github可以有效的对Git本地版本库的内容进行备份,并且我们可以借助于GitHub完成协同开发

https://github.com/

注册&登陆

配置SSH免密登陆

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$  ssh-keygen -t rsa -C "gaozhy@zparkhr.com.cn"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Created directory '/c/Users/Administrator/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yj8T1aEOWEfRR8L10gqlfu6tPvWKD2+JJAqG5SpDTi0 gaozhy@zparkhr.com.cn
The key's randomart image is:
+---[RSA 2048]----+
|         .o+.o+  |
|        . . ++.o |
|       o . ooo. o|
|      o . o... o |
|   . +  S+  . o  |
|  E o.+.. o .o  .|
| + . oo. o o...o.|
|  + .  .+   .=+..|
|   o    .o  .+B+.|
+----[SHA256]-----+
Administrator@PC-20190909FNCP MINGW64 ~
$ cd .ssh/

Administrator@PC-20190909FNCP MINGW64 ~/.ssh
$ ll
total 5
-rw-r--r-- 1 Administrator 197121 1675 十月 18 15:11 id_rsa
-rw-r--r-- 1 Administrator 197121  403 十月 18 15:11 id_rsa.pub

在这里插入图片描述

创建Git远程仓库

在这里插入图片描述

本地关联远程版本库

Administrator@PC-20190909FNCP MINGW64 /e
$ cd F:

Administrator@PC-20190909FNCP MINGW64 /f
$ cd baizhi/

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
# 关联
$ git remote add origin https://github.com/gaozhy520/bigdata2.git

推送代码

Administrator@PC-20190909FNCP MINGW64 /f/baizhi (master)
$ git push -u origin master
Username for 'https://github.com': 627345199@qq.com
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 6 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 296 bytes | 296.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/gaozhy520/bigdata2.git
   2fae3bb..f94ae97  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

四、分支管理

展示当前所处分支

当前所处的分支前,会有*标记

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (master)
$ git branch
* master

创建分支

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (master)
$ git checkout -b dev
Switched to a new branch 'dev'

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (dev)
$ git branch
* dev
  master

切换分支

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (dev)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (master)
$ git checkout dev
Switched to branch 'dev'

合并分支

test分支功能合并到dev分支

  1. 切换到dev分支
  2. merge操作
Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (dev)
$ git merge test
Updating b5655a3..13b13cf
Fast-forward
 Hello.java | 1 +
 1 file changed, 1 insertion(+)

删除分支

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (master)
$ git branch -d test
Deleted branch test (was 13b13cf).

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (master)
$ git branch
  dev

五、协同开发

邀请组员

在这里插入图片描述

发送邀请链接

发送邀请链接https://github.com/gaozhy520/bigdata2/invitations给协同者,协同开发者选择同意后,即可假如项目中(读写访问权限)。

协同者克隆项目

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (master)
$ git clone https://github.com/gaozhy520/bigdata2.git

协同开发代码提交到远程版本库

协同者操作

同步协同者的代码到本地版本库

Administrator@PC-20190909FNCP MINGW64 /f/baizhi1/bigdata2 (master)
$ git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/gaozhy520/bigdata2
 * branch            master     -> FETCH_HEAD
   f94ae97..db941ee  master     -> origin/master
Auto-merging Hello.java
CONFLICT (content): Merge conflict in Hello.java
Automatic merge failed; fix conflicts and then commit the result.

发现如下内容:CONFLICT (content): Merge conflict in Hello.java

解决代码冲突问题:

  • 代码共存(无重合)
  • 保留一方(有重合)

六、冲突处理

当团队协同工作的时候,多位团队成员同时操作一个文件。团队成员A操作完成后,将该文件提交到远程仓库上。此时,其他团队成员的本地文件与版本库上的文件版本不一致。当团队成员B操作完成并对文件进行 提交操作时,就会产生冲突
在这里插入图片描述
在这里插入图片描述

七、IDEA集成

准备工作

  • 需要Git客户端应用(略)

集成方法

设置

在这里插入图片描述

开启

在这里插入图片描述

初始化

在这里插入图片描述

其余操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值