【Git】快速入门安装及使用git与svn的区别常用命令

一、导言

1、什么是svn?

        SVNSubversion的简称,是一个集中式版本控制系统。与Git不同,SVN没有分布式的特性。在SVN中,项目的代码仓库位于服务器上,团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个文件的修改历史,包括作者、时间和具体更改内容等信息。

        使用SVN时,团队成员需要从中央代码仓库中检出项目的最新代码,并在本地进行开发和修改。一旦完成工作,他们将代码推送回中央代码仓库以共享变更。SVN提供了一系列命令和功能,如更新代码、提交代码、查看历史记录、比较文件差异等,以便团队成员协同工作和管理代码版本。然而,由于SVN是集中式的,当网络连接中断或者服务器出现故障时,团队成员可能无法提交或获取最新代码。

1.1、svn的利

  1. 简单易用:相对于Git而言,SVN的命令和操作相对简单,学习曲线较为平缓。对于一些非技术背景或刚接触版本控制的开发者来说,使用SVN更容易上手。
  2. 集中化管理:SVN采用集中式的工作方式,所有代码都保存在服务器端,可以集中管理和控制代码的访问权限,方便团队协作、控制代码质量和安全性。
  3. 安全性:由于所有代码保存在服务器上,避免了本地代码丢失的风险,并且管理员可以管理和监控每个用户的操作,保证了代码的安全性。

1.2、svn的弊

  1. 需要网络连接:由于SVN是集中式的,需要与中央代码仓库进行交互,因此必须有稳定的网络连接。如果网络中断或服务器故障,将无法提交或获取最新代码,从而影响开发流程。
  2. 不支持离线工作:SVN需要与远程服务器交互,开发者无法在离线情况下进行代码修改和提交,限制了在没有网络连接的环境下的自由开发能力。
  3. 分支管理复杂:相比于Git,SVN的分支管理相对较为复杂。分支的创建、合并和删除需要手动操作,并且可能会面临一些冲突解决的挑战。
  4. 存储效率低:由于SVN采用基于差异的版本控制方式,每次提交只保存进行的更改,存储效率相对较低。尤其是在大规模项目中,占用的存储空间较大。

2、什么是Git?

        Git是一个分布式版本控制系统,用于管理和跟踪软件开发项目的源代码。它能够记录整个项目的历史更改,包括每个文件的修改、添加和删除,以及每次提交的作者和时间等信息。通过使用Git,团队成员可以协同工作并共享代码,并且能够轻松地撤销或回滚更改,解决合并冲突以及自动识别和处理代码更新。Git也提供了分支功能,使得开发者能够在独立的分支上开展工作,最后再将分支合并到主线上。这使得多人同时开发同一项目变得更加容易和安全。

2.1、Git的利

  1. 分布式版本控制:Git是一个分布式版本控制系统,每个开发者都可以拥有完整的代码库复本,并且可以离线工作。这使得团队成员可以独立进行开发和提交变更,而不会受到网络连接或服务器故障的影响。
  2. 强大的分支管理:Git的分支管理功能非常强大和灵活。开发者可以轻松地创建、合并和删除分支,实现独立开发和并行工作。这对于团队协作和多个功能或修复并行进行时非常有益。
  3. 快速操作和高性能:由于Git本地存储了完整的代码副本,可以在本地进行快速的代码查看、提交和切换。相比于集中式的版本控制系统,Git的操作通常更快速,尤其在大型项目中表现更优秀。
  4. 丰富的工具生态系统和社区支持:Git拥有庞大的用户群体和活跃的开源社区,提供了丰富的工具和扩展。还有许多第三方工具和服务,如GitHub,提供了代码托管、协作和Code Review等功能。

2.2、Git的弊

  1. 学习曲线较陡:相对于SVN等集中式版本控制系统,Git的学习曲线较为陡峭。它有许多高级功能和命令,对于初学者来说,可能需要一定的时间和精力来熟悉和掌握。
  2. 存储占用较大:由于Git存储了完整的代码副本,每次提交都会增加存储空间的消耗。尤其是在项目历史变得庞大时,会产生更多的磁盘空间需求。
  3. 强大的功能和灵活性带来复杂性:Git的强大功能和灵活性可以使其变得复杂和难以理解。例如,分支合并和解决冲突可能需要一些技巧和经验来处理。

3、区别

        Git相对于SVN在分布式特性、分支管理和强大的版本控制能力上有优势。但SVN由于简单易用和集中式的特点,在某些场景下仍然被广泛使用。选择使用哪种版本控制系统取决于项目的需求、团队的工作流程和开发者的偏好。它们的设计思想和工作方式上存在一些显著区别。

  1. 分布式 vs 集中式:最明显的区别是Git是一个分布式版本控制系统,而SVN是一个集中式版本控制系统。在Git中,每个开发者都拥有完整的代码仓库副本,可以离线工作并提交变更。而SVN中的代码仓库位于服务器上,开发者通过向服务器提交和获取代码来进行工作。
  2. 版本管理方式:Git以增量快照方式保存代码的不同版本,每次提交都会创建一个新的快照,并记录父快照的引用关系,从而构建出一棵提交历史的有向无环图。SVN则采用基于差异的方式,只存储每次提交的差异,相较于Git,SVN对存储空间的占用更为高效。
  3. 分支管理:Git的分支管理非常灵活和强大,可以轻松创建、合并和删除分支,并且支持同时存在多个独立开发的分支。而SVN的分支管理相对简单,通常需要手动创建分支,并且在合并分支时较为复杂。
  4. 性能:由于Git拥有完整的代码仓库副本,在大型项目中可以提供更快的操作速度。SVN的性能在大规模项目上可能受到网络连接和服务器性能的限制。

这里是我所理解的一个区别:

  1. 去中心化
    1. GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。     
  2. git仓库的任何一个拷贝都可以独立作为一个服务器来使用
  3. 在Git中文件有四种状态:
    1. 未跟踪(untrack):表示文件为新增加的
    2. 已修改(modified):表示修改了文件,但还没保存到git仓库中。
    3. 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
    4. 已提交(committed):表示文件已保存在git仓库中。
  4.  其它
    1. GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
    2. GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏
  5. 直接记录快照,而非差异
    1. GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  6. 直接记录快照,而非差异
    1.      GIT分支和SVN的分支不同,分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  7. git存在分支。

二、git的使用

1、创建仓库

  1. 进入工作台 - Gitee.com官网进行登录注册。
  2. 在首页点击创建仓库,填写完之后创建即可。
    1. 仓库名称路径根据你自己的来进行填写,这两个也是必须要填写的。
    2. 如果你是新手我建议这边选中开源

2、Windows安装Git

进入Git - Downloads (git-scm.com)下载2.22以上的版本。

【注意】不要安装在C盘(win10会有权限问题)。

  1. 下载完成后双击安装选中安装路径。
  2. ①默认不会在桌面创建图标,并且增加了一个新的特性
    ②将GItBash添加到Windows terminal中,建议勾选。
  3. 选择一个默认的编辑器,默认为Vim(Linux的),里面还有Notepad,我选择使用Vim。
  4. 在Git创建分支后的默认的名字(master),如果没有特别的使用默认的设置,点击next即可
  5. 默认推荐为第二个,不包含全部的工具。第三个是git 和 Unix全部工具
  6. 开启https连接,保证数据传输数据的安全,按照默认的选择即可
  7. 额外的配置选项,这里面默认都没有选,可以将这两个选框勾选上,支持(node、python)然后选择install
  8. 启动git Bash 查看发行说明  可以不用选中
  9. win + R cmd 输入:git --version 查看版本 
  10. 或者在电脑的任意位置右键看见这两个就说明安装成功了。

3、上传仓库

  1. 创建一个新的仓库,创建完成后记住或者保存这个界面,会用到。
  2. 在本地新建一个用来上传的文件夹,右键点击 Git Bash Here ,会出现一个命令窗口。
  3. 一次运行创建仓库出现的命令。
    ①运行第一个命令会在你的用户下面 出现一个文件。
    ②执行第二个框选的命令,当我们执行到git init的命令后会有一个隐藏的文件夹,我们执行完命令之后会弹出一个登录的窗口,登录即可。

  4. 上传完成

快速上传:

  1. 把我们的文件放入已经创建好的仓库文件夹里面
  2. 在命令窗口里面 输入命令 : git add .
  3. git commit -m "新提交的文件" : 提交之后在git是看不到你的文件的
  4. git push :推送到git

4、仓库下载资源

  1. 拿到我们需要克隆的地址。
  2. 创建一个新的文件夹用于克隆。
  3. 输入命令:git clone [url]:克隆远程仓库到本地。
  4. 克隆完成

三、git常用命令

Git有许多其他命令和选项可供使用。可以通过运行git --help或查阅Git文档来获取更详细的命令说明和用法。以下是一些常见的Git命令及其功能:

  1. git init:初始化一个新的Git仓库。
  2. git clone [url]:克隆远程仓库到本地。
  3. git add [file]:将文件添加到暂存区。
  4. git commit -m "message":提交暂存区的文件,并添加提交信息。
  5. git status:查看工作区和暂存区的状态。
  6. git log:查看提交历史记录。
  7. git branch:查看分支列表。
  8. git checkout [branch]:切换到指定分支。
  9. git merge [branch]:将指定分支合并到当前分支。
  10. git pull:拉取远程仓库的最新代码。
  11. git push:推送本地代码到远程仓库。
  12. git remote add origin [url]:关联本地仓库与远程仓库。
  13. git diff:查看工作区与暂存区的差异。
  14. git reset [commit]:撤销提交,并将HEAD指针移动到指定的提交。
  15. git stash:将当前修改保存到临时存储区,以便切换分支或恢复后再次应用。

四、git常用命令理论

这些命令是Git的基础,可以帮助你管理你的项目和协作与他人。在使用这些命令时,你需要理解其背后的理论,包括版本控制、分支管理、合并和解决冲突等概念,才能更好地使用Git来管理你的项目。

下面是一些常用的Git命令及其理论:

  1. git init:这个命令用于创建一个新的Git仓库。当你运行这个命令时,Git会在当前目录下创建一个新的.git目录,这个目录包含了所有Git需要的数据和元数据。
  2. git clone:这个命令用于克隆一个Git仓库到本地。你可以通过这个命令下载一个远程仓库到你的本地机器上,这样你就可以查看该项目,或者对其进行修改。
  3. git add:这个命令用于将文件添加到暂存区,准备提交。根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。
  4. git commit:这个命令用于提交暂存区中的文件到仓库。你可以通过这个命令将暂存区中的文件提交到你的本地仓库。
  5. git push:这个命令用于将本地仓库中的文件推送到远程仓库。你可以通过这个命令将你本地的修改推送到远程仓库,以便其他人可以看到和共享你的更改。
  6. git pull:这个命令用于从远程仓库中拉取文件到本地。你可以通过这个命令从远程仓库中下载最新的更改到你的本地机器上,以便你可以查看和修改这些文件。
  7. git merge:这个命令用于合并两个分支。你可以通过这个命令将两个分支的更改合并到一起。
  8. git rebase:这个命令用于将一个分支的更改应用到另一个分支上。你可以通过这个命令将一个分支的更改应用到另一个分支上,而不是合并两个分支。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/136250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Glide transform旋转rotate圆图CircleCrop,Kotlin

Android Glide transform旋转rotate圆图CircleCrop,Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.load…

基于单片机的养殖场温度控制系统设计

博主主页:单片机辅导设计 博主简介:专注单片机技术领域和毕业设计项目。 主要内容:毕业设计、简历模板、学习资料、技术咨询。 文章目录 主要介绍一、控制系统设计二、系统方案设计2.1 系统运行方案设计2.1.1 羊舍环境温度的确定 三、 系统仿…

Leetcode—226.翻转二叉树【简单】

2023每日刷题(二十四) Leetcode—226.翻转二叉树 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

【解决方案】vue 项目 npm run dev 时报错:‘cross-env‘ 不是内部或外部命令,也不是可运行的程序

报错 cross-env 不是内部或外部命令,也不是可运行的程序 或批处理文件。 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! estate1.0.0 dev: cross-env webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! Exit status 1 np…

vue-router路由守卫进阶

vue-router路由守卫进阶 路由守卫,可以想象为古代御前侍卫,路由守卫,则是对路由进行权限控制 分类:全局守卫、独享守卫、组件内守卫 全局前置-路由守卫 作用:主要用来鉴权 用户点击导航区,随后引起路径的…

kubernetes (k8s)的使用

一、kubernetes 简介 谷歌2014年开源的管理工具项目,简化微服务的开发和部署。 提供功能:自愈和自动伸缩、调度和发布、调用链监控、配置管理、Metrics监控、日志监控、弹性和容错、API管理、服务安全等。官网:https://kubernetes.io/zh-cn…

后入能先出,一文搞懂栈

目录 什么是栈数组实现链表实现栈能这么玩总结 什么是栈 栈在我们日常编码中遇到的非常多,很多人对栈的接触可能仅仅局限在 递归使用的栈 和 StackOverflowException,栈是一种后进先出的数据结构(可以想象生化金字塔的牢房和生化角斗场的狗洞)。 栈&…

洛谷P5731 【深基5.习6】蛇形方阵java版题解

import java.util.Arrays; import java.util.Scanner;// 给出一个不大于9的正整数n,输出nn的蛇形方阵。 public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] a new int[n][n];int total…

MySQL中表格的自我复制,与复制表格

先创建一个空表,my_tab01 CREATE TABLE my_tab01(id INT ,name VARCHAR(32),sal DOUBLE,job VARCHAR(32),deptno INT); SELECT * FROM my_tab01;准备一张有数据的表格: 将另一张表格的数据插入到my_tab01的表格中: -- 演示如何自我复制 --…

前端项目导入vue和element

1.安装nodejs 下载链接https://cdn.npmmirror.com/binaries/node/v18.18.0/node-v18.18.0-x64.msi 进入cmd 命令行模式 管理员身份运行 输入 (node -v)能看到版本号 npm config set prefix "C:\Program Files\nodejs" 默认路径 npm config…

刚柔相济铸伟业 ——访湖南顺新金属制品科技有限公司董事长张顺新

时代在变,唯初心不改。 精致、谦虚、谨慎、儒雅、温和——他就是张顺新,湖南顺新金属制品科技有限公司、湖南顺新供应链管理有限公司董事长,民建长沙市委常委,民建湖南省环资委副主任,省、市民建企联会常务副会长&…

基于SSM+Vue的随心淘网管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

官方Redis视图化工具Redisinsight

一、下载最新版本的 docker pull redislabs/redisinsight mkdir /data/redisinsight docker run -d -u root -p 8001:8001 -v /etc/localtime:/etc/localtime -v /data/redisinsight:/db --restartunless-stopped redislabs/redisinsight:latest 二、浏览器打开 http://192…

自动化测试(Java+eclipse)教程

webdriver环境配置 1.下载chromedriver到本地(一定要选择和自己浏览器相对应的版本chromedriver下载地址) 2.加入到环境变量path中 webdriver工作原理 创建web自动化测试脚本 1.Maven项目创建 File->New->project->(搜索maven)选择maven pr…

爱家房产网站源码 爱家房产网商业版 微信互动营销整合+手机触屏版+经纪人分销

房产网站源码手机访问自动转手机版修改修复如下: 1,修复手机版首页标题头部名称 2,修复手机版首页频道导航按钮 3,新增手机版广告位置显示方式 4,修复手机版首页内容显示样式 5,手机版头部背景颜色ic…

什么是观察者模式?用 Python 如何实现 Observer(观察者或发布订阅)对象行为型模式?

什么是观察者模式? 观察者模式(Observer pattern)是一种行为型设计模式,它允许对象之间建立一种一对多的依赖关系,当一个对象的状态发生变化时,其相关依赖对象都会得到通知并自动更新。 在观察者模式中&am…

三天打鱼两天晒网

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为选择结构编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 二、题目分析 三、解题 程序运行代码 #include<stdio.h> int main(){int n;scanf("%d",&n);i…

Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

Go 接口&#xff1a;Go中最强大的魔法,接口应用模式或惯例介绍 文章目录 Go 接口&#xff1a;Go中最强大的魔法,接口应用模式或惯例介绍一、前置原则二、一切皆组合2.1 一切皆组合2.2 垂直组合2.2.1 第一种&#xff1a;通过嵌入接口构建接口2.2.2 第二种&#xff1a;通过嵌入接…

【应用前沿】360QPaaS 精彩亮相首届中国航空制造设备博览会 | 数智航空

近日&#xff0c;首届“中国航空制造设备博览会”&#xff08;CAEE2023&#xff09;在宁波国际会展中心顺利召开&#xff0c;本届大会以“数智产融 开放发展”为主题&#xff0c;以“新技术、新产品、新服务、新企业”为定位&#xff0c;以特色化、专业化、品牌化、高端化为方向…

AVL树详解

目录 AVL树的概念 旋转的介绍 单旋转 双旋转 旋转演示 具体实现 通过高度判断的实现 通过平衡因子判断的实现 AVL树的概念 AVL树是一种自平衡的平衡二叉查找树&#xff0c;它是一种高效的数据结构&#xff0c;可以在插入和删除节点时保持树的平衡&#xff0c;从而保证…