Git和SVN的使用

下载地址

git下载地址:https://git-scm.com/downloads
svn下载地址:https://sourceforge.net/projects/win32svn

GIT的使用

一.git核心命令使用

1、安装git 客户端安装(全部下一步)

官方客户端: https://git-scm.com/downloads/
其它客户端:https://tortoisegit.org/download/

2、认识GIT的基本使用

1.git 项目创建与克隆
2.文件提交与推送
完整模拟从项目添加到push 过程
创建项目
初始化git仓库
提交文件
远程关联
push 至远程仓库
3.本地初始化GIT 仓库:
基于远程仓库克隆至本地
git clone <remote_url>
当前目录初始化为git 本地仓库
git init
本地添加-添加指定文件至暂存区
git add
添加指定目录至暂存区
git add
添加所有
git add -A
将指定目录及子目录移除出暂存区
git rm --cached target -r
添加勿略配置文件 .gitignore
提交至本地仓库
git commit file -m '提交评论'
快捷提交至本地仓库
git commit -am '快添加与提交'
初次上传源码提交失败?
解决方案一:使用允许无关联的历史记录的参数拉取之后再push
git pull origin master --allow-unrelated-histories

git push
解决方案二:
git push -u origin master -f
引用参见:点击链接

3.分支管理

查看当前分支

git branch [-avv]
基于当前分支新建分支
git branch [branch name]
基于提交新建分支
git branch [branch name] [commit id]
基于origin新建分支test
git branch test origin/master
删除分支
git branch -d test test2
git branch -d {dev}
切换分支
git checkout [branch name]
合并分支
git merge
解决冲突,如果因冲突导致自动合并失败,此时 status 为mergeing 状态.
需要手动修改后重新提交(commit)

4、远程仓库管理

查看远程配置

git remote [-v]
添加远程地址
git remote add origin http:xxx.xxx
删除远程地址
git remote remove origin
上传新分支至远程
git push --set-upstream origin master
将本地分支与远程建立关联
git branch --track --set-upstream-to=remotes/master/master master

5、tag 管理

查看当前

git tag
创建分支
git tag [tag name] [branch name]
删除分支
git tag -d [tag name]

6、日志管理

查看当前分支下所有提交日志

git log
查看当前分支下所有提交日志
git log {branch}
单行显示日志
git log --oneline
比较两个版本的区别
git log master..experiment
以图表的方式显示提交合并网络
git log --pretty=format:'%h %s' --graph
git log --graph --oneline
git show

二.git存储

1、存储方式区别

GIT把内容按元数据方式存储类似k/v数据库,而SVN是按文件(新版svn已改成元数据存储)

演示git 存储过程演示
echo '文本内容' | git hash-object -w --stdin
cd .git/objects/df/
git cat-file -p
echo 'version1' > text.txt
git hash-object -w text.txt

2、使用方式区别

从本地把文件推送远程服务,SVN只需要commint 而GIT需要 add、commint、push 三个步骤
SVN基本使用过程
img
Git基本使用过程
img

3、版本管理模式区别

git 是一个分布式的版本管理系统,而要SVN是一个远程集中式的管理系统
集中式
img分布式
img

三、git 底层原理

GIT存储对象
GIT树对象
GIT提交对象
GIT引用

1、GIT存储对象(hashMap)

Git 是一个内容寻址文件系统,其核心部分是一个简单的键值对数据库(key-value data store),你可以向数据库中插入任意内容,它会返回一个用于取回该值的hash 键。
git 键值库中插入数据

echo '文本内容' | git hash-object -w --stdin
79362d07cf264f8078b489a47132afbc73f87b9a
基于键获取指定内容
git cat-file -p 79362d07cf264f8078b489a47132afbc73f87b9a
Git基于该功能 把每个文件的版本中内容都保存在数据库中,当要进行版本回滚的时候就通过其中一个键将期取回并替换。
模拟演示git 版写入与回滚过程
查找所有的git 对象
find .git/objects/ -type f
写入版本1
echo 'version1' > README.MF; git hash-object -w README.MF;
写入版本2
echo 'version2' > README.MF; git hash-object -w README.MF;
写入版本3
echo 'version3' > README.MF; git hash-object -w README.MF;
回滚指定版本
git cat-file -p c11e96db44f7f3bc4c608aa7d7cd9ba4ab25066e > README.MF
所以我们平常用的 git add 其实就是把修改之后的内容 插入到键值库中。当我们执行 git add README.MF 等同于执行了 git hash-object -w README.MF 把文件写到数据库中。
我们解决了存储的问题,但其只能存储内容同并没有存储文件名,如果要进行回滚 怎么知道哪个内容对应哪个文件呢?接下要讲的就是树对象,它解决了文件名存储的问题 。

2、GIT树对象

树对象解决了文件名的问题,它的目的将多个文件名组织在一起,其内包含多个文件名称与其对应的Key和其它树对象的用引用,可以理解成操作系统当中的文件夹,一个文件夹包含多个文件和多个其它文件夹。
每一个分支当中都关联了一个树对象,他存储了当前分支下所有的文件名及对应的 key.
通过以下命令即可查看
查看分支树

git cat-file -p master^

3、git提交对象

一次提交即为当前版本的一个快照,该快照就是通过提交对象保存,其存储的内容为:一个顶级树对象、上一次提交的对象啥希、提交者用户名及邮箱、提交时间戳、提交评论。

$ git cat-file -p b2395925b5f1c12bf8cb9602f05fc8d580311836
tree 002adb8152f7cd49f400a0480ef2d4c09b060c07
parent 8be903f5e1046b851117a21cdc3c80bdcaf97570
author tommy 1234567890@qq.com 1234567890 +0800
committer tommy 1234567890@qq.com 1234567890 +0800
通过上面的知识,我们可以推测出从修改一个文件到提交的过程总共生成了三个对象:
一个内容对象 ==> 存储了文件内容
一个树对象 ==> 存储了文件名及内容对象的key
一个提交对象 ==> 存储了树对象的key 及提交评论。

4、GIT引用

当我们执行 git branch {branchName} 时创建了一个分支,其本质就是在git 基于指定提交创建了一个引用文件,保存在 .git\refs\heads\ 下。

演示分支的创建
git branch dev
cat.git\refs\heads\dev
git 总共 有三种类型的引用:
1.分支引用
2.远程分支引用
3.标签引用
查询比较两个版本
git log master..experiment
版本提交历史网络
git log --pretty=format:'%h %s' --graph
查看分支树
git cat-file -p master^

四、git 初次上传代码标准流程

初始化本地仓库

git init
添加远程仓库地址
git remote add origin https://gitee.com/JourneyOfFlower/***仓库
将本地所有资源添加至暂存区(但未提交)
git add -A
提交暂存区添加的资源(提交在本地【需要push才会到git服务器】,预防下一步拉取时代码被远端直接覆盖)
git commit -am 备注
将远程仓库的初始化资源拉取至本地
git pull 或 git fetch
查看当前所有分支(本地仓库[绿色]&远程仓库的[红色])
git branch -avv
将本地仓库与远程仓库的传输流绑定 或 将当前分支内容强行推送到远程仓库 master 分支
git branch --set-upstream-to=remotes/origin/master master 或 git push --set-upstream origin master
将本地仓库暂存区的文件全部推送(push)远程仓库
git push 报错信息:fatal: refusing to merge unrelated histories(拒绝合并不相关的历史)
解决报错
git pull origin master --allow-unrelated-histories(允许合并不相关历史)
推送
git push(不报错,即完成)

本文作者:Journey&Flower

本文链接:https://www.cnblogs.com/JourneyOfFlower/p/12619831.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Journey&Flower  阅读(210)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 Not Found REOL
  2. 2 白色恋人 游鸿明
  3. 3 盛夏的果实 莫文蔚
  4. 4 以父之名 周杰伦
  5. 5 晴天 周杰伦
  6. 6 简单爱 周杰伦
  7. 7 东风破 周杰伦
  8. 8 稻香 周杰伦
  9. 9 爱在西元前 周杰伦
  10. 10 千里之外 费玉清-周杰伦
  11. 11 偏爱 张芸京
  12. 12 大海 张雨生
  13. 13 月亮惹的祸 张宇
  14. 14 雨一直下 张宇
  15. 15 过火 张信哲
  16. 16 隐形的翅膀 张韶涵
  17. 17 天下 张杰
  18. 18 当你孤单你会想起谁 张栋梁
  19. 19 清明雨上 许嵩
  20. 20 玫瑰花的葬礼 许嵩
  21. 21 断桥残雪 许嵩
  22. 22 城府 许嵩
  23. 23 等一分钟 徐誉滕
  24. 24 客官不可以 徐良_小凌
  25. 25 坏女孩 徐良_小凌
  26. 26 犯贱 徐良
  27. 27 菠萝菠萝蜜 谢娜
  28. 28 贝多芬的悲伤 萧风
  29. 29 睫毛弯弯 王心凌
  30. 30 我不是黄蓉 王蓉
  31. 31 秋天不回来 王强
  32. 32 今天你要嫁给我 陶喆,蔡依林
  33. 33 丁香花 唐磊
  34. 34 绿光 孙燕姿
  35. 35 求佛 誓言
  36. 36 十一年 邱永传
  37. 37 下辈子如果我还记得你 马郁
  38. 38 一千年以后 林俊杰
  39. 39 江南 林俊杰
  40. 40 曹操 林俊杰
  41. 41 背对背拥抱 林俊杰
  42. 42 会呼吸的痛 梁静茹
  43. 43 勇气 梁静茹
  44. 44 爱你不是两三天 梁静茹
  45. 45 红日 李克勤
  46. 46 星月神话 金莎
  47. 47 嘻唰唰 花儿乐队
  48. 48 穷开心 花儿乐队
  49. 49 六月的雨-《仙剑奇侠传》电视剧插曲 胡歌
  50. 50 一个人的寂寞两个人的错 贺一航
  51. 51 好想好想-《情深深雨濛濛》电视剧片尾曲 古巨基
  52. 52 情人 刀郎
  53. 53 冲动的惩罚 刀郎
  54. 54 西海情歌 刀郎
  55. 55 2002年的第一场雪 刀郎
  56. 56 红玫瑰 陈奕迅
  57. 57 浮夸 陈奕迅
  58. 58 爱情转移 陈奕迅
  59. 59 独家记忆 陈小春
  60. 60 记事本 陈慧琳
  61. 61 看我72变 蔡依林
  62. 62 寂寞在唱歌 阿桑
  63. 63 樱花草 Sweety
  64. 64 中国话 S.H.E
  65. 65 波斯猫 S.H.E
  66. 66 杀破狼-《仙剑奇侠传》电视剧片头曲 JS
  67. 67 Lydia F.I.R.
  68. 68 I Miss You 罗百吉_青春美少女.
白色恋人 - 游鸿明
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 林利南

作曲 : 游鸿明

编曲 : 涂惠源

冷空气 却清晰

你在南极冰山雪地里

极光中雪白的肌肤

是哀愁是美丽

为了要遇见你

我连呼吸都反复练习

兰伯特仁慈的冰川

带领我走向你

零下九十一度的酷寒

滚滚红尘千年的呼喊

藏在沃斯托克的湖岸

沉寂轻叹

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮

零下九十一度的酷寒

滚滚红尘千年的呼喊

藏在沃斯托克的湖岸

沉静轻叹

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮