1 git
1.1 什么是git
git是一个开源的分布式版本控制系统。git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
1.2 git与svn的区别
- GIT是分布式的,SVN是集中式管理;
- GIT把内容按元数据方式增量存储,而SVN是按文件; <.svn .git >
- GIT分支和SVN的分支不同;
- GIT的内容完整性要优于SVN:
- git内容存储使用的是SHA-1哈希算法;
- SVN有一个全局的整数编号,而git则是一个SHA-1值作编号:
- SVN控制粒度可以到某个目录(当然很少这样做);而git一般是整个项目;
1.3 git与github、gitee等的区别
Git 是一种版本控制系统,是一个命令,是一种工具,有点像cmd(命令行工具)。
Github 是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。
Gitlab 类似 github,一般用于在企业内搭建git私服,要自己搭环境。
Gitee 即码云,是 oschina 免费给企业用的,不用自己搭建环境,可以建立自己的私有仓库。
Git-ce 是社区版,gitlab-ee是企业版,收费的。
依据个人喜好,使用不同的平台
Github与Gitee的对比
Github与Gitee是一类,在云端。区别是Github是国外的,Gitee是国内的。二者的使用需要借助Git。
2 gitee的使用
2.1 gitee仓库的创建
登陆gitee码云的官网:https://gitee.com/创建账号和密码后,然后创建仓库:
2.2 在linux下对git进行配置
开发者向码云版本库写入最常用到的协议是SSH协议,因为SSH协议使用公钥认证,可以实现无口令访问,而若使用HTTPS协议每次身份认证时都需要提供口令。
2.2.1 在Linux上对git进行全局配置
该配置只需要做一次且对该Linux主机上所有git管理项目生效:
git config --global user.name "tianpeng"
git config --global user.email "tianpeng_dsp@126.com"
2.2.2 生成SSH Key
ssh-keygen -t rsa -C "tianpeng_dsp@126.com"
/home/tianpeng/.ssh/id_rsa 私钥
/home/tianpeng/.ssh/id_rsa.pub 公钥
2.2.3 上传public Key
查看public key并拷贝,将它添加到码云个人账号的SSH公钥里:
cat ~/.ssh/id_rsa.pub
验证账户密码后,添加公钥成功。
公钥添加测试
ssh -T git@git.oschina.net
2.3 git使用
2.3.1 git下载测试
2.3.2 提交代码到本地库
首先将要上传的文件目录拷贝到git_space目录下
执行:
(1) git add
(2) git commit (写记录笔记)
(3)git push origin master(弹出 username for ‘https://gitee.com’:输入登录邮箱, password for ‘https://’:输入登录密码)
git add:作用就是将我们需要提交的代码从工作区添加到暂存区,就是告诉git系统,我们要提交哪些文件,之后就可以使用git commit命令进行提交了。
git commit 主要是将暂存区里的改动给提交到本地的版本库。git commit -m ”xxxx“,-m参数表示可以直接输入后面的”message“, 如果不加-m参数,那么是不能直接输入xxx的,而是会调用一个编辑器一般是vim来让你输入这个xxx, xxx即是我们用来简要说明这次提交的语句。
2.3.3 git push
在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器对应的分支上。
git push 的一般形式为 pit push <远程主机名> <本地分支名> <远程分支名>,例如:
git push origin master: refs/for/master,即将本地的master分支推送到远程主机origin上的对应的master分支, origin是远程主机名。第一个master是本地分支名,第二个master是远程分支名。
git push origin master
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :refs/for/master
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin –delete master
git push origin
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push
如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用 git branch -r ,查看远程的分支名
关于 refs/for:
refs/for 的意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的,而refs/heads 不需要