这是我参与「第四届青训营 」笔记创作活动的第15天。
最近正忙于小组合作项目,因为之前没有用过Github合作完成项目,所以感到手忙脚乱。正好借此机会,系统学习git的基本原理,以便于相关命令的理解。同是,也分享一些我使用git中出现的错误和解决方案。
1.Git基本文件储存原理解析
(图源:www.jianshu.com/p/710572d6e…)
首先,与集中式版本控制系统不同,Git是一个分布式的版本控制系统。对于集中式版本控制系统而言,不同用户提交代码都有统一服务器来管理版本号以及代码的合并。但是分布式不同,由于用户分散在世界各地,在没有网络通信的情况下,容易形成版本冲突。所以,这里我们需要对每一个不同版本的代码提供一个编号,这个编号应该是独一无二的。Git这里使用了哈希算法来实现。Git的快照流优点很明显:可以不经过版本2、3而直接查看版本1,进而节省大量切换版本的时间。
这里对于哈希算法进行一个简单介绍:
- 一个哈希算法,加密结果长度固定
- 输入数据确定,输出结果保证不变
- 输入数据有变化,输出结果一定变化
那么Git如何存储代码呢?从本质上来讲,Git是一个内容寻址文件系统,核心部分是一个简单的键值对数据库(key - value data store) Git会依照我们工程的目录结构在执行commit之后在objects里相应的建立一套blob和tree文件。每个commit引用一个tree,根据工程目录结构,tree在引用下一个tree或者blob,以此来形成文件树。
2.Git报错及解决方案分享
在Git的使用中,我遇到不少问题,下面分享一些问题和解决方案:
a.添加公钥
在我尝试进行克隆操作时,出现以下报错:
Cloning into []...
The authenticity os host 'github.com' can't be established.
...
Please make sure you have the correct access rights
经过在网上搜索报错,锁定了一下,主要是因为没有在github上添加公钥。解决方法如下:
>>> ssh-keygen -t rsa -C [你的邮箱]
// 中间除非出现了[y/n]选项输入“y”外,剩下一律继续按enter。这时候会显示一个randomart image
//留意这时候会生成一个id_rsa.pub文件,需要按照所给路径找到这个文件
//(因为作者是Mac,所以直接利用访达->前往->前往文件夹 输入路径即可查找出相应文件)
//复制所有文件内的内容即可。
打开自己的Github,在“我”的档案里面选择设置,点击Access->SSH-> New SSH key,不用管title部分,粘贴后会自动生成
>>> ssh -T git@github.com
大功告成!
b. 切换分支并push文件
直接切换分支会出现报错:
>>> git branch
>>> git checkout -b [另一个已经存在的分支名称] origin/[另一个已经存在的分支名称]
报错: 'origin/[另一个已经存在的分支名称]' is not a commit and a branch [另一个已经存在的分支名称] cannot be created from it.
这里我的建议是先clone一下Git上的文件,再把新写的代码push到clone下来的文件夹里。具体操作入下:
>>> git clone url // 克隆文件
// 打开新克隆下来的文件夹,清空文件内容并且添加新的代码,重新打开终端
>>> git checkout -b [另一个已经存在的分支名称] origin/[另一个已经存在的分支名称] //切换分支
>>> git status // 检查文件变更状态
>>> git add . // 添加至缓存
>>> git commit -m ""
>>> git push // push到远程仓库,完成操作
感谢大家的阅读:本人才疏学浅,如有错误之处,欢迎大家在评论区指正。