SVN 、Git、Github的使用
1.1 SVN 总结以及使用建议
- 每一次保存历史记录实际上就是一次提交
- 什么时候去保存历史记录?
- 完成了一个具体的功能模块
- 代码运行没有bug
- 当天工作结束提交一次
- 没有 bug 的前提下去提交一次
- 关于历史记录版本
- 只要想要保存历史记录就必须通过服务器
- SVN 使用数字作为版本的唯一标识
- 即便同时有多人提交,也是按照顺序的版本号增长
关于版本冲突
- 例如服务器中的最新版本是 4, a.txt文件中有一段内容:
hello
- 张三 4 和服务器同步的版本
- 修改了 a.txt :
hello world
- 提交变动,保存历史记录,服务器直接就接受,版本升级为 5
- 修改了 a.txt :
- 李四 4 和服务器同步的版本
- 修改了 a.txt:
hello lisi
- 提交变动,保存历史记录,服务器会告诉你先和服务器上的版本更新同步然后再提交
- 更新:
- 5:a.txt :
hello world
- 4:a.txt :
hello list
- 5:a.txt :
- 修改了 a.txt:
- 解决冲突:
- 冲突的地方:
- 使用别人的
- 使用你自己的
- 使用别人和你自己的
- 冲突的地方:
- 例如服务器中的最新版本是 4, a.txt文件中有一段内容:
使用建议
- 每次提交之前,先更新
- 更新如果遇到冲突,先解决冲突,再提交
- 由于解决冲突很耗时,多跟你的同事口头交流
- 例如你改这个文件的时候,告诉被人不要改
- 或者别人改这个文件的时候,你不要改
- 就是这样的方式可以最大程度的避免冲突
1.2 SVN 弊端
集中式版本控制就是集中的把源代码放到一个线上的仓库中,任何提交都围绕着中央服务器进行。
这种方式最大的好处就是模式简单,可以很快上手使用版本控制,但是也带来了一些问题:
- 每一次提交都必须联网
- 很耗时
- 例如 Git 就可以本地保存历史记录,不需要联网
- 一旦服务器宕机或挂掉
- 没法保存历史记录了(Git 可以)
- 整个项目的历史记录可能丢失
- Git 不会,每一个客户端本地都会有一个克隆仓库
- 无法协同
2. 命令行
学习命令行最好的方式是学习 Linux 上的 shell、bash。
2.1 GUI VS CLI
现在,大多数的计算机用户只是熟悉图形用户界面(GUI),并且产品供应商和此领域的学
者会灌输给用户这样的思想,命令行界面(CLI)是过去使用的一种很恐怖的东西。这就很不
幸,因为一个好的命令行界面,是用来和计算机进行交流沟通的非常有效的方式,正像人类社
会使用文字互通信息一样。人们说, 图形用户界面让简单的任务更容易完成,而命令行界面
使完成复杂的任务成为可能 ,到现在这句话仍然很正确。
2.2 shell
一说到命令行,其实真正指的是 shell
。
shell 就是一个程序,它接受从键盘输入的命令,然后把命令传递给操作系统去执行。
几乎所有的 Linux 发行版都提供一个名为 bash
的 shell 程序。
bash 是 Bourne Again SHell
的首字母缩写,所指的是这样一个事实。
2.3 终端仿真器
当使用图形用户界面时,我们需要另一个和 shell 交互的叫做终端仿真器的程序。
在 Windows 上,一般使用操作系统自带的 cmd
或者 powershell
。
在 Linux 上,如果是图形用户界面,那么可以使用 terminal
或者 konsole
、gnome-terminal
之类
的终端仿真器,但基本上,它们都完成同样的事情,让我们能访问 shell,
你可能会因为附加的一些花俏功能而喜欢上某个终端。
关于名字,如果有人提到:控制台、终端、bash、shell、terminal 等,一般都是指上面这些。
一般在 Linux 上,都会提供一个 bash 或者 terminal 之类的工具,让你来使用 shell
学习 shell 最正确的方式就是学习 Linus 上的 shell。
Linus 上的 shell,或者说 Bash 是最强大的。
学 Linus 上的 shell 命令基本上切换到 Mac 上可以很快过度。
所以,安装 git 的时候,自带了一个 git bash , 是一个 Linus shell 仿真器。
也就是说 git Bash 上可以体验到绝大多数的 Linus 终端命令。
2.4 安装 Git for Windows 客户端体验 shell
Git for Windows 客户端自带了一个终端仿真器:git bash
下载地址:https://git-for-windows.github.io/
git for Windows - github 托管地址
,然后找到 Realease 模块,找到下载的对应版本即可。
注意:虽然在 Windows 上可以通过 cmd 或 powershell 体验终端的使用,
但是学习终端最正确的方式是学习 Linux 上的命令行,要更纯正,更强大。
所以,我们这里通过使用 Git for Windows 客户端(自带了一个 bash)可以供我们学习 shell。
打开和退出终端
命令提示符
命令的分类
控制台自带命令
- 工具型
- ping
- ipconfig
- shutdown
- winver
- ......
- 文件系统型
- cd
- pwd
- ls
- mkdir
- cp
- mv
- ......
- 工具型
第三方应用程序命令
- CLI(Command Line Interface) 程序:命令行应用程序
- 没有图形界面,直接在终端中运行,由第三方应用程序执行
- 接收用户通过终端输入的字符
- 处理执行用户通过终端输入的字符
- 终端会对你输入的相应的参数或者命令解析执行实现相应的功能
- 如果有提示信息,直接将提示信息或者说操作信息,输出到终端中
- 没有图形界面,直接在终端中运行,由第三方应用程序执行
- GUI 程序:图形界面应用程序
- feiq
- CLI(Command Line Interface) 程序:命令行应用程序
常用工具型命令
- ping
- ipconfig
使用终端操作文件系统
- 绝对路径和相对路径
pwd
(print working directory)ls
(list files)ls
列出当前目录文件ls 目录路径
列出指定路径文件ls -a
列出文件并显示隐藏文件或目录
cd
(change directory)- 切换到指定路径(相对路径或绝对路径)
- 在 cmd 或 powershell 中切盘符:
盘符:
回车即可
cp
(copy)cp 源路径 目标路径
- cp 在复制目录的时候,不会复制里面的子文件或子目录
- -r (recursive)递归复制
mv
(move):移动文件或者目录,还可以重命名文件或目录mkdir
(make directory):创建目录rmdir
目录名称- 只能删除空目录
rm
(remove):删除文件或目录- -rf 递归删除:直接将整个目录包括里面的内容都删掉
- 在cmd、powershell 不支持
clear
:清屏- cmd 中无法使用 clear
- cmd 中是 cls
touch
文件名- 根据文件名创建新的文件
cat
文件名- 查看指定的文本文件
使用 less 命令浏览文件内容
less 命令是一个用来浏览文本文件的程序。
less 命令是这样使用的:less 文本文件名
。
一旦 less 程序运行起来,我们就能浏览文件内容了。
如果文件内容多于一页,那么我们可以上下滚动文件。按下 q
键,退出 less 程序。
下表列出了 less 程序最常使用的键盘命令:
命令 行为
h 显示帮助屏幕
Page UP or b 向上翻滚一页
Page Down or space 向下翻滚一页
UP Arrow 向上翻滚一行
Down Arrow 向下翻滚一行
G 移动到最后一行
g 移动到开头一行
/charaters 向前查找指定的字符串
n 向前查找下一个出现的字符串,这个字符串是之前所指定查找的
q 退出 less 程序
命令行文本编辑器:VI
Visual Interface
命令模式
插入模式
通过从命令模式按 i
进入编辑模式。
保存:
从编辑模式退出到命令模式,:w
保存该文件。
:q
退出- 如果没有保存会提示让你保存再退出
:q!
强制退出
:wq
保存并退出
PATH 环境变量
目的就是为了可以在终端中的任意目录中使用该可执行文件。
介绍
- Git 是一个类似于 SVN 的一个版本控制系统VCS(Version Control System)
- 相同点:都是版本控制系统
- 历史记录
- 多人协作
- SVN 是集中式版本控制系统
- Git 是分布式版本控制系统
- 相同点:都是版本控制系统
- 关于名字:Git:饭桶,无用的人
- Angular:有角的、生硬的
- 作者:林纳斯·托瓦兹(Linus Torvalds)
- Linux 之父,创建了 Linux 操作系统的人
- 一个神话
- Git 是为了更好的管理 Linux 源代码而设计开发的
Git 的诞生
- 关于 Git 的作者:Linus Torvalds
- 创造了 Linux
- 创造了开源世界
- Ubuntu
- 2002 年,林纳斯托瓦兹使用 BitKeeper 作为 Linus 项目的版本控制系统软件
- 2005 年,大神一怒之下,就短短几个星期之内就诞生了 Git 的最初版本
- 真正的大规范被开发人员使用大概在 2013 年左右
- 2013 年之前大部分都是 SVN
- 目前绝大多数,百分之70-80的公司都在使用 Git 作为自己的版本控制系统
学习资源
- http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- git - 简明指南
- 猴子都能懂的Git入门
- 菜鸟教程:Git 教程
安装与配置
通过在命令台输入 git --version
查看是否有 Git 环境。
git config --global user.name "你的名字
git config --global user.email "你的邮箱
上面的配置用来配置执行 commit 的时候,记录提交者的一些基本的信息(名字+邮箱)。
原理模型
基本操作
以后所有的项目文件,都使用 utf8 编码,如果你的文件就是 gbk 编码文件,
你使用 git bash 提交的时候,应该是可以自动转码然后提交的。
建议:以后所有的文件都使用 utf8 编码。
# 在本地当前项目初始化一个空的 git 仓库
$ git init
# 当前当前版本管理状态:未被版本管理的,已修改的、以删除的等文件
$ git status
# 将指定的文件添加到暂存区
$ git add
$ git add .
$ git add --all
$ git add file file [file]
$ git commit -m "提交注释"
# 查看提交日志
$ git log
# 比对文件变动差异
$ git diff
工作区、暂存区、本地仓库
工作区就是当前你所能看到的工作目录,你的任何添加、修改删除默认都是在工作区。
暂存区起到两个作用:
- 可以分批次的进行提交
假设你很长时间没有做过版本记录提交,例如你修复了某一个功能模块的 bug、开发了某个功能模块、
修改了某些功能模块代码,这个时候就可以利用暂存区分批次的进行提交。
- 可以作为一个临时版本存储
例如可以将暂存区指定文件恢复到工作区。
本地仓库就是最终用来存储历史版本的地方,每一次 commit 都会形成一个历史版本保存到本地仓库中。
撤销(时光穿梭机)
使用 Git 强大的撤销功能,可以让你在工作区、暂存区、本地仓库之间来回的穿梭自如,
例如恢复某个误删除的文件,或是恢复某个误修改的文件,
甚至是将整个项目都恢复到指定的历史版本都是可以的。
下面是一些常用的撤销命令,可以自行测试一下:
# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop
总结:Git 提供了很多强大的命令供开发者来使用,并不一定都会用到,以理解交互模型为主,
这些撤销命令可以自行设定场景然后一一进行测试,没有必要全部都记住,真正用到的时候再去查询文档即可。
只要大概有个模糊的映像即可(知道有哪些功能),对于常用的命令,使用多了就记住了,不需要单独记忆。
Git 练习
假设你现在写一个教程类的 Demo,没完成一步小功能或者小模块,你希望能保存一次历史记录方便回顾查看
整个 Demo 的演变进程,例如第一步搭建好了项目骨架,则可以提交一次,第二步完成了首页相关功能,
则再提交一次,依次这样下去,就会形成一步一步的步骤,之后想要查看当初某一步的代码情况,
则可以通过 git reset --hard [commit]
进行查看。
*分支
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 新建一个分支,指向指定commit
$ git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 切换到上一个分支
$ git checkout -
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
推送和获取远程仓库
$ git remote add
$ git push
$ git clone
$ git pull
Github
准备
- 创建账户
基本使用
- 创建仓库
- 连接仓库
- 公开代码
Pull Request
扩展
- 环境变量
- Sublime 插件
SVN 、Git、Github的使用的更多相关文章
- git &github 快速入门
本节内容 github介绍 安装 仓库创建& 提交代码 代码回滚 工作区和暂存区 撤销修改 删除操作 远程仓库 分支管理 多人协作 github使用 忽略特殊文件.gitignore 1.gi ...
- git/github学习笔记
郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ...
- Git/GitHub 初用体验与总结
Git,一个神奇而又陌生的东西,居然到现在才去了解它,就像有一位仁兄说的,现在不会用Git真的都不好意思说自己搞IT的. 简单的讲,这Git是目前最先进的分布式版本控制系统,和他相对应的就是众所周知的 ...
- Git/Github + TortoiseGit 使用教程
前言 Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 在github上有很多优秀的项目,一个伟大的学习宝库.本文分享使用tortoisegit对github/ ...
- git/github 使用
原文:http://www.cnblogs.com/fnng/archive/2011/08/25/2153807.html git/github学习笔记 Posted on 2011-08-25 2 ...
- Git&GitHub
Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软 ...
- 01: git & github
目录:GIT其他篇 01: git & github 02: git分支管理 目录: 1.1 常见版本管理工具介绍 及 版本工具作用 1.2 git.GitHub和SVN比较 1.3 本地gi ...
- VSS SVN GIT SVN 加锁签出
VSS TFS SVN GIT VSS 两大功能: 1.签出后加锁,别人不能签出,独占签出. 2.在服务端可以查看哪些用户签出了哪些文件. 3.查看所有签出未签入的文件列表,SVN未发现此功能. 缺点 ...
- Python开发【笔记】:git&github 快速入门
github入门 简介: 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大 ...
- git/github基本命令
Git与项目 git的使用,主要包括: 本地仓库的命令 远程仓库的命令 项目需求.页面.模型类的设计,及页面的使用 sudo apt-get install git 安装成功后,运行如下命令 git ...
随机推荐
- 精通 JS正则表达式(转)
转载的目的在于:增加一些自己看不懂的解释.内容只加不改,灰色字体是自己寻找并增加的. 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式 ...
- mysql中的limit
mysql中常使用limit做分页查询,使用方法也很简单: SELECT * FROM table LIMIT [offset,] rows #注: offset-偏移量,rows查询返回的行数 -- ...
- VB6获取IE8的地址栏的URL信息
这是个老梗了,也没什么技术含量.因为自从接触Linux之后,Windows上我所知道的那一点api基本上都忘光了.所以这样的博文可以当做是备忘,说不定有天还能用的到. Windows上想要获取浏览器的 ...
- requireJS 源码(二) data-main 的加载实现
(一)requireJs 的整体结构: requireJS 源码 前192行,是一些 变量的声明,工具函数的实现 以及 对 三个全局变量(requirejs,require,define)若被占用后的 ...
- windows安装程序无法将windows配置为在此计算机的硬件上运行
关于装windows系统时,出现一些安装中断的处理 该方法适用于 windows安装程序无法将windows配置为在此计算机的硬件上运行 计算机意外地重新启动或遇到错误. Windows 安装无法继续 ...
- Java电器商场小系统--简单的java逻辑
//商场类public class Goods { int no; //编号 String name; //商品名称 double price; //商品价格 int number; //商品数量 / ...
- AllPairs运用遇到的问题及解决办法分享
前些天用AllPairs自动生成了交互式测试用例,中间遇到的问题困扰了一天,最后解决了.现在分享下解决过程 首先,D\AllPairs是我的ALLPairs安装目录,C盘桌面test.txt是我写的测 ...
- Git 使用问题 - win7 git bash下git pull失败
win7 旗舰版,从github上pull代码时,git bash命令出现错误 Administrator@rust-PC /g/rust_proj/cardslib (master) $ git - ...
- 从零开始打jar包
经常会头疼于一个jar包是如何制作的,包括maven的打包方式,springboot的打jar包的原理,jar包稍稍有错误就会完全无法运行.在网上折腾了很久终于有些思路和步骤,在这里做个笔记 本文大纲 ...
- 初学安卓开发随笔之 Intent 用法
首先,对于安卓开发,目前世界上流行的是使用的是Android studio 2.0 .(hh 学着来呗 书上说用这个,,) 今后就定一个计划 每天更新一个Android 随笔,增强一下自控力吧!!! ...