zl程序教程

您现在的位置是:首页 >  工具

当前栏目

2020-12-13Git学习

学习 12 2020
2023-06-13 09:15:12 时间

学习Git

List item

1.描述并行开发流程

2.git分布式版本控制工作原理

一、并行开发流程

1)并行开发需要掌握的几个概念

1.同步(Synchronous)和异步(Asynchtonous)

同步:同步方法调用一旦开始,调用者必须等到方法调用返回结果,才可以进行后续的操作。

异步:异步方法调用更像一个消息传递,一旦开始,方法的调用就会立即返回结果,调用者就可以进行后续的操作。

区别:对于调用者来说异步调用感觉像是一瞬间完成的。

2.并发(Concurrency)和并行(Parallelism)

并发:多个任务之间的来回切换,而多个任务之间肯还是串行执行的(一会执行A一会执行B,系统不停的在两者之间切换)。

并行:多个任务真实的“”“同时执行。”

3.临界区

用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程想要使用它,就必须等待(在并行程序中,临界资源是保护的对象)并行程序开发

一个软件开发环境主要由硬件平台、操作系统、支撑语言、软件开发工具、应用软件包等组成。并行程序开发主要在于并行程序的设计、调试、维护和监控。

2)并行程序开发环境

现在研究重点是扩充现有的编译系统的并行语言功能,主要为: 数据级并行(利用Fortran等开发); 任务级并行(利用MPI、Linda等开发)

3)并行语言和消息传递环境 现在大多并行开发语言为Fortran、Pascal和C语言。并行环境常用的有PVM(Parallel Virtual Machine并行虚拟机)、MPI(Message Passing Interface 消息传递接口)和Express

4)并行程序设计 并行程序的设计有多种方式,主要分为: 共享变量方法;消息传递方法;数据并行程序设计;面向对象的并行程序设计;函数程序设计方法;逻辑程序设计方法。 选择并实现一种并行编程方法前,需要重点考虑:成熟性、易编程性、灵活性、效率、可移植性和成本。 成熟性:主要指编译器和消息传递器的成熟性,有时也考虑开发工具的支持水平和完善程度。 易编程性:编程方法容易实现并容易产生维护代码。 效率:保持编译器和运行系统操作所有的进程通信和同步。

5)并行开发系统的挑战

现在项目在开发的时候遇到一个问题,场景是多个用户共同使用一个项目(master)作为基准,开发自己的用户版本(customer_dev),如何寻求一个合理有效的解决方案是非常重要的。

6)可以预见的问题 如果修改了基准(master)如何将更改同步至不同用户版本(customer_dev)? 对于各用户版本(customer_dev)如何进行控制? 修改基准(master)的前提要求是什么? 7)目前的解决方案 第一种:一个仓库多分支 这种方案是使用一个版本控制仓库构建不同分支,从而实现对于不同用户版本的处理。 优点: 一个仓库即一个地址,项目管理方便 缺点: 分支会越来越多,如果没有一个完善的管理体系,会导致分支混乱

第二种:fork 仓库 这种方案是利用 fork 机制,所有客户版本作为子库单独控制,项目上相互独立,独立仓库开发。

二、什么是Git?

在没有版本的情况下,我们可以很容易地将项目恢复到以前的状态,控制系统只能不断地在不同的文件夹中存储整个项目的副本–缺点:速度非常慢,且无法对项目扩展(无法共享以及共同同时更改)

版本控制系统类型 1. 集中式系统 指在远程有一个版本控制服务器,开发者可以通过远程版本控制器来实现代码的交换同步工作。开发者可以可以从远程服务器检出代码,更新代码,也可以像远程服务器提交代码。这样做有一个好处就是每个人都可以在一定程度上看到项目中的其他人正在做些什么。

缺点: 分散架构的问题是单点故障,如果服务器离线我们无法协作或保存项目的快照,所以必须等待服务器重新上线

优点:1、 管理方便,逻辑明确,符合一般人思维习惯。 2、 易于管理,集中式服务器更能保证安全性。 3、 代码一致性非常高。

eg:SVN和TFS

下面是一个简单的工作模型图:

2. 分布式系统 每个团队成员在他们的机器上都有一个项目的副本,上面有他们的历史记录,因此我们可以在机器上本地保存项目的快照。在分布式版本控制系统中,每一个客户端都有一份完整的版本仓库,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。就算远程服务器宕机了磁盘损坏了,事后还是可以通过本地的镜像恢复远程服务器完整的版本信息.

eg:Git

下面是分布式系统原理图:

Git是目前世界最流行的版本控制系统(会在一个名为Repository(本地仓库)的特殊数据库中记录代码随时间的变化,eg:项目历史,谁做了改变)

三、 git的并行开发流程

自制,如需做基础行修改,可私

四、git分布式版本控制工作原理

1)Git 工作原理图

2)Git版本控制原理

Git管理总共分为四个区

  • Workspace:工作区
  • Stage:暂存区,用于存放临时修改的文件
  • Repository:本地仓库,所有版本信息都在这里
  • Remote:远程仓库,托管代码的服务器(如GitHub,Gitee )

我们平时写代码后需要先把文件提交到暂存区,然后再从暂存区提交到本地仓库(仓库里存放的就是不同版本的代码)

文件总共有四种状态,分别是

  • Untracked (文件未被追踪状态)
  • Staged (暂存状态)
  • Modified( 文件已被修改)
  • Unmodify(文件未被修改)

五、Git使用

1)安装git 官网(https://www.git-scm.com/)

2)创建版本库 mkdir learngit 创建文件夹//作为本地仓库 cd learngit 切换目录 pwd 命令用于显示当前目录 git init 初始化仓库 git --help命令帮助文档

创建成功,嗷嗷(⁎⁍̴̛ᴗ⁍̴̛⁎)

3)把文件添加到版本库 eg: touch readme.txt git add readme.txt 把文件添加到暂存区 git commit -m(“注释”)将文件提交到仓库

4)版本回退 git log 查看提交历史,确认回退的历史版本 git reflog 查看命令历史,确定回退的未来版本 git reset --hard commitid版本回退命令

5)撤销修改 git status 查看分支状态 git reset HEAD撤销缓存区的修改 git checkout –撤销工作区的修改 git reset --hard commitid 提交后使用版本回退

6)删除文件 rmLinux删除实际文件 git rm版本库中删除该文件 git checkout –从版本库恢复文件

7)添加远程库 ssh-keygen-t rsa -C"youremail@example.com”创建SSH Key git remote add origin https://github.com/lsy…本地版本库连接远程库 git push -u origin master本地库的内容推送到远程并关联起来 git push origin master 本地库的内容推送到远程

8)从远程仓库克隆 git clone 从远程库克隆一个本地库

9)创建与合并分支 git checkout -b dev 创建新分支,并切换到新分支 git branch dev 创建新分支 git checkout dev切换分支 git branch 查看当前分支 git merge dev 合并分支

10)解决分支冲突 git status 查看分支情况 vim<手动修改冲突文件> git add添加修改后的文件 git commit -m"conflict solved“提交修改后的文件 git branch -d dev 删除分支