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

工具:Git分布式版本控制系统


文章目录

    • 介绍
    • 分布式版本控制系统原理
    • git安装和使用
      • git软件分类
      • 安装软件
      • 注册开源社区github
      • git ssh key 配置
      • 远程仓库
      • 分支管理
      • 标签管理
    • 引用

介绍

分布式版本控制系统下的每一台终端都可以充当类似集中式版本控制系统的中央服务器。每台终端都可以保存版本库,并且版本库也可以不同,可以对每个版本库进行修改,修改完成后可以集中后最后更新,这更方便每个合作者之间的交流沟通。此外,git的分支等等策略更是合作方式的最佳办法。

分布式版本控制系统原理

理解git原理需要先理解几个术语:

  • 工作区:在编辑器内可增加或修改文件等位置;
  • 缓存区:只能通过git bash等窗口显示,它是提交代码、解决冲突的中转站;
  • 版本库:本地.git/目录,内含缓存区暂存区;
  • 本地仓库:连接本地代码和远程代码的枢纽,仅能通过git bash显示。在没有联网状态下,本地代码可先提交至该处;
  • 远程仓库:托管远程代码的中央服务器,如开源网站github

git安装和使用

git软件分类

git使用软件类型有git shellgit desktop两种类型,git shell是直接使用git 命令行,包括git addgit commit等,其中以git bash软件为代表;git desktop类型主要是图形界面软件,可以通过鼠标点击按钮实现git add和git commit等功能,其中以GitHub desktop,smartgit等为代表。这里分别推荐git bash和github desktop。

安装软件

  • 分别到git bash和github desktop网站下载对应操作系统版本的软件,这里就以git bash安装作为标准。
  • 按照默认设置安装git bash,完成后打开git bash,同时可以按照配置linux的shell环境一样配置git bash的环境,如.vimrc.bash_profile等文件,如下图所示。

  • 设置用户名和用户邮箱,该信息每次会通过修改提交git命令上传到远程仓库,也即为了识别用户。还有一个配置客户端长期存储用户名和密码的命令。
# 必须配置
git config --global user.name  "Hua"
git config --global user.email  "hua1@outlook.com"# 可选择配置
git config --global credential.helper store# 检查配置
git config --list 
>user.email=hua1@outlook.com
>user.name=Hua

注册开源社区github

github是全球程序员交流平台,又因程序员大多数是单身男性,因此也被称为全球基友交流平台。注册分为三步:

  1. 创建账户;
  2. 选择订阅;
  3. 分享经历。

git ssh key 配置

为何要配置git ssh key呢?ssh协议可以避免输入账户名和密码直接拉去或上传代码至远程仓库。通过配置本地电脑或者位置的rsa公钥至github网址,可以实现无需输入用户名和密码的方式方便快速地提交和更新代码。解决方案如下:

  1. 打开本地git bash,使用ssh-keygen -t rsa -C "emailname@mails.com",一路回车,最后生成的文件位于~/.ssh/目录。打开目录内的id_rsa.pub文件,复制内容。
  2. 打开github网站,点击右上角头像,下拉菜单显示setting选项,选择添加rsa公钥。
  3. 测试是否添加成功。
ssh -T git@github.com
>Hi Hua! You've successfully authenticated, but GitHub does not provide shell access.

远程仓库

远程仓库是可以充当“中央服务器”托管代码的位置,其他终端可以从该处获取原始代码,从这一点看好像分布式版本控制系统与集中式版本控制系统无太大差别,但git的每一台终端都可以充当“中央处理器”且无主次之分,一般情况下大家会把某台24小时开机的终端看成“中央处理器”,每台终端从服务器拉取代码和提交修改等。

  • GitHub仓库与本地仓库同步:GitHub已存在某个仓库,同时本地也存在同名仓库,为使得两仓库远程同步,只需要输入如下命令
# step1: 登陆GitHub并创建example_git远程仓库# step2: 跳转到本地仓库目录
cd  path_dir/example_git# step3: 初始化版本库 .git
git init # step4: 连接本地仓库和远程仓库
git remote add origin git@github.com:HuaZou/example_git # step5: 推送本地文件至远程仓库,并且关联本地和远程的master分支
git push -u origin master # 第一次推送使用-u参数,后续只需要 git push origin master
  • 克隆远程仓库:如想获取GitHub上的某个仓库,只需要在本地使用做如下处理:
# step1: 克隆远程仓库至本地工作区
git clone git@github.com:HuaZou/example_git# step2: 查看工作区文件状态
git status# step3: 提交工作区修改文件等至暂存区
git add filesname# step4: 提交操作命令描述至本地仓库
git commit -m "operation description"# step5: 推送本地仓库至远程仓库,注意保证远程仓库的head是高于本地仓库,否则会发生conflict错误
git push origin master
  • 版本回退:版本信息均存在.git目录,可以使用git loggit log --pretty=oneline查看head信息也即提交信息等。git reset --hard commit_id回到某个提交命令的版本。

  • 撤销修改:发现某些修改需要撤回是,可以根据修改提交状态选择命令
# step1: 查看文件状态
git status  # step2: 如果文件只通过git add提交到暂存区
git checkout -- filename.txt# step3: 如果文件已经通过git commit提交到本地仓库
git reset HEAD filename.txt # git reset不仅仅可以版本库回退也可以文件撤回修改
  • 删除文件:未添加至暂存区和已添加两种情况。前者使用基本的rm命令即可,后者删除动作是一个处理过程,也需要提交命令:1)git rm filename.txt;2)git commit -m "remove file"

分支管理

分支是从主支线上分离出来,分支上的操作不会影响主线的工作,在完成分支上的任务后再合并到主线即可。

  • 查看当前分支情况:git branch;
  • 创建分支:git branch branchname;
  • 切换分支:git checkout branchname;
  • 创建并切换分支:git checkout -b branchname;
  • 合并某分支到当前分支:git merge branch1; git branch -d branch1;
  • 删除分支:git branch -d branchname;

master分支一般仅仅发布新版本,工作的最新状态是在dev分支,其他人工作是在自己的分支等,如图:

标签管理

标签管理一般是工作完成到某个重要节点了,然后希望对工作进行标记,这个时候可以使用git tag给该阶段打上标签。

# 查看标签
git tag# 在某个版本打上标签
git tag v0.1 <可加上某个commit版本># 给标签加上其他信息
git tag -a v0.1 -m "version 0.1 released" 1094adb# 查看标签说明
git show v0.1# 删除标签
git tag -d v0.1# 推送标签
git push origin v0.1

引用

  1. git帮助文档
  2. 廖雪峰git教程
http://www.lryc.cn/news/464301.html

相关文章:

  • python+docxtpl:word文件模版渲染
  • 018_基于python+django荣誉证书管理系统2024_jytq9489
  • Vulkan 开发(三):Vulkan 物理设备
  • Netty无锁化设计之对象池实现
  • 工厂生成中关于WiFi的一些问题
  • Java爬虫:获取商品评论数据的高效工具
  • oracle中的exists 和not exists 用法
  • 自定义导出Excel数据注解实践
  • CSS3 动画相关属性实例大全(一)(@keyframes ,background属性,border 属性)
  • 拦截器或过滤器往本次请求体中添加信息
  • Docker 安装达梦 DM8 数据库实战指南
  • QtCreator14调试Qt5.15出现 Launching Debugger 错误
  • day1:基础了解
  • 【从零开始的LeetCode-算法】3099. 哈沙德数
  • 【Next.js 项目实战系列】02-创建 Issue
  • 浅谈C++的future
  • 期货外盘行情源7个市场CTP推送式服务说明
  • 计算机毕业设计 | SSM 校园线上订餐系统(附源码)
  • 【iOS】使用一个单例通过AFNetworking来实现网络请求
  • 如何从模块内部运行 Pytest
  • oracle数据库---基本查询(单表查询、多表查询、子查询、分页查询、oracle内置函数、行列转换、集合运算)
  • web API基础
  • 【C++】创建TCP服务端
  • 每天练打字6:今日状况——常用字后五百击键3第2遍已完成,赛文速度93.56
  • rk3568创建基于Ubuntu18.04交叉编译遇到的坑
  • 对“一个中心,三重防护”中安全管理中心的理解
  • jmeter用csv data set config做参数化1
  • 软件分享 丨eSearch 截图软件
  • pytorh学习笔记——cifar10(一)生成数据
  • pikachu靶场SSRF-curl测试报告