SVN&Git使用手册

InterviewCoder

切记 代码是先更新再提交.
(一)SVN 和 GIt 区别
1.基本
SVN 是集中式版本控制工具
git 是分布式版本控制工具

2.SVN 和 Git 优缺点
svn 优点:
1. 方便管理者查看每个开发者开发进度
2. 方便对开发者进行权限控制
svn 缺点:
1. 严重依赖网络环境进行版本控制
2. 中央服务器宕机,无法进行版本控制
3. 中央服务器磁盘损坏,丢失历史版本内容
Git 优点:
1. 很完美的解决了 SVN 存在的缺点

TortoiseGit 小乌龟
给当前项目提交到码云上
1. 用浏览器登录码云,在码云上创建一个仓库
2. 打开 TortoiseGit 软件
3. 新建一个文件夹改好名字 (注意是空文件夹)
4. 右键文件夹–>Git 克隆…–> 弹出如下图–> 粘贴好 url
5. 点击确定就可以了

6. 然后就给你自己的代码放入刚才的文件夹下,然后就点击推送等等.
2.设置用户名和邮箱

直接设置即可。签名密钥不需要管

Git 使用笔记
(一)概念
1.什么是版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。

2.为什么要版本控制
有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
3.集中化的版本控制系统
接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。
集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
这么做虽然解决了本地版本控制系统无法让在不同系统上的开发者协同工作的诟病,但也还是存在下面的问题:

单点故障: 中央服务器宕机,则其他人无法使用;如果中心数据库磁盘损坏有没有进行备份,你将丢失所有数据。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

必须联网才能工作: 受网络状况、带宽影响。

4.分布式版本控制系统
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 Git 就是一个典型的分布式版本控制系统。
这类系统,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
分布式版本控制系统可以不用联网就可以工作,因为每个人的电脑上都是完整的版本库,当你修改了某个文件后,你只需要将自己的修改推送给别人就可以了。但是,在实际使用分布式版本控制系统的时候,很少会直接进行推送修改,而是使用一台充当 “中央服务器” 的东西。这个服务器的作用仅仅是用来方便 “交换” 大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
分布式版本控制系统的优势不单是不必联网这么简单,后面我们还会看到 Git 极其强大的分支管理等功能。
5.Git 与其他版本管理系统的主要区别
Git 在保存和对待各种信息的时候与其它版本控制系统有很大差异,尽管操作起来的命令形式非常相近,理解这些差异将有助于防止你使用中的困惑。
下面我们主要说一个关于 Git 其他版本管理系统的主要差别:对待数据的方式。
Git 采用的是直接记录快照的方式,而非差异比较。我后面会详细介绍这两种方式的差别。
大部分版本控制系统(CVS、Subversion、Perforce、Bazaar 等等)都是以文件变更列表的方式存储信息,这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。
具体原理如下图所示,理解起来其实很简单,每个我们对提交更新一个文件之后,系统记录都会记录这个文件做了哪些更新,以增量符号 Δ(Delta) 表示。

我们怎样才能得到一个文件的最终版本呢?
很简单,高中数学的基本知识,我们只需要将这些原文件和这些增加进行相加就行了。
这种方式有什么问题呢?
比如我们的增量特别特别多的话,如果我们要得到最终的文件是不是会耗费时间和性能。
Git 不按照以上方式对待或保存数据。 反之,Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。

6.使用 git 原因
分布式版本控制工具
为什么使用 git 呢?
互联网项目,业务越来越复杂,项目越来越大,使用 SVN 版本控制不太好使了。
从 git 目标,看 git 的优势 速度快、分布式、有能力管理大型项目

7.工作流程以及流程图

在工作目录中修改文件。
暂存文件,将文件的快照放入暂存区域。
提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
8.程序员工作流程
项目经理:1 创建项目 2 项目添加本地暂存态 3 项目提交到本地 4 建立远程连接 5 推送代码到远程服务器
程序员 A:1 克隆代码到本地 2 编写代码,将代码添加本地暂存态 3 代码提交本地 4 推送代码到服务器
程序员 B:1 克隆代码到本地 2 编写代码,将代码添加本地暂存态 3 代码提交本地 4 推送代码到服务器 5 更新其他程序员提交的代码
9.git 三种状态

已提交(committed):数据已经安全的保存在本地数据库中。

已修改(modified):已修改表示修改了文件,但还没保存到数据库中。

已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

由此引入 Git 项目的三个工作区域的概念:Git 仓库 (.git directoty) 、工作目录 (Working Directory) 以及 暂存区域 (Staging Area) 。

(二)Git 分支
1.分支概念

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。

有人把 Git 的分支模型称为 “必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。和许多其他版本控制系统不同,Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。理解分支的概念并熟练运用后,你才会意识到为什么 Git 是一个如此强大而独特的工具,并从此真正改变你的开发方式。
2.分支需求
现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流
程:

开发某个网站。
为实现某个新的需求,创建一个分支。
在这个分支上开展工作。
假设此时,你突然接到一个电话说有个很严重的问题需要紧急修补,那么可以按照下面的方
式处理:
返回到原先已经发布到生产服务器上的分支。
为这次紧急修补建立一个新分支。
测试通过后,将此修补分支合并,再推送到生产服务器上。
切换到之前实现新需求的分支,继续工作。
(三)git 指令
1.创建 git 目录
git init

创建 git 目录:
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。(参见 Git 内部原理 来了解更多关于到底 .git 文件夹中包含了哪些文件的信息。)
2.克隆仓库
git clone [url]
克隆仓库的命令格式是 git clone [url] 。比如,要克隆 Git 的可链接库 libgit2,可以用下面的命令
$ git clone https://github.com/libgit2/libgit2

这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。如果你进入到这个新建的 libgit2 文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。如果你想在克隆远程仓库的时
候,自定义本地仓库的名字,你可以使用如下命令
$ git clone https://github.com/libgit2/libgit2 mylibgit
这将执行与上一个命令相同的操作,不过在本地创建的仓库名字变为 mylibgit
3.查看文件状态
git status
要查看哪些文件处于什么状态,可以用 git status 命令。如果在克隆仓库后立即使用此命令,会看到类似这
样的输出.

跟踪新文件

(四)使用
1.安装 git

http://note.youdao.com/noteshare?id=448878ab8bdba693717f8967e6aa6a4f

2.将项目上传到码云上

如果账户已经配置好,git 客户端也安装好,在将要上传的文件中,右键打开 Git Bash Here, 按如下步骤即可:
1.git init
2.git remote add origin “你的码云项目地址(ssh 或 https)”
开始提交项目
3.git pull origin master 如果密码报错看下面
4.git touch init .txt // 如果已经存在更改的文件,则操作这一步,否则跳过即可
5.git add .
6.git commit -m “第一次提交(提交信息)”
7.git push origin master
如出现错误 hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push --help’ for details.
可执行此操作继续,git push -u origin master -f 强制命令会覆盖别人分支,慎用

密码报错在这里进行修改

3.用 git 从 github 上下载代码

新建一个文件夹,放你需要下载的东西。右键点击 “Git Bash Here”

此时会弹出 git 的命令窗口

3、输入 git clone + 下载地址,回车即可。如 git clone https://github.comxxx.git
等待下载

下载好之后,文件夹里就会出现相应的项目啦~

(五)GitGUI 操作
1.使用 gui 上传代码到码云上
https://blog.csdn.net/qq_33867131/article/details/80831491

SVN 的基本使用
(一)基本简介
开源的版本控制系统,可以用来保存代码,同步代码,也可以保存图片文档电影什么的.
主要作用就是可以随时进行代码同步。但是会存在一些问题,会有一些解决方案
(二)服务端创建仓库
1.搭建仓库,添加用户

http://note.youdao.com/noteshare?id=549663e56580a3643bbcc9104c357226

2.分配权限

创建好用户后,用户还是不能访问我们的仓库,接下来我们要给用户分个组(如果想让用户不进组也能访问仓库,可以直接给单个用户权限

3.给代码放到 svn 上面

然后复制仓库地址

在你要上传的项目右键

然后点击确定

(三)错误解决
1.代码错乱问题
去查看日志,下载正确的时间段的代码,然后再创建新的仓库,放那个代码,原来的仓库就删除掉就可以了.

2.No appropriate protocol
公司的 SVN 协议从 svn 协议变更到 https 协议,结果 IDEA 的 SVN 报 No appropriate protocol,查询资料,最终解决方案是:
Go to Preferences > Version Control > SubVersion > Enable Interactive Mode
3.versionControl 里面找不到 subversion 选项
去安装 svnToolBox 插件 即可解决

# 关于我

Brath 是一个热爱技术的 Java 程序猿,公众号「InterviewCoder」定期分享有趣有料的精品原创文章!

InterviewCoder

非常感谢各位人才能看到这里,原创不易,文章如果有帮助可以关注、点赞、分享或评论,这都是对我的莫大支持!

评论