Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
1.SVN是集中式版本控制系统,版本库是集中放在中央服务器的。
2.Git是分布式版本控制系统,那么它就没有中央服务器的。
git和svn的区别:
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
git本地有三个工作域:工作区(working directory), 暂存区(stage/index), 资源库(repository)。如果再算上远程服务器上的git仓库(remote directory)就可以分为四个工作域。其关系如下:
(1)Workspace: 工作区,就是你平时存放项目代码的地方
(2)Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
(3)Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数
据。其中HEAD指向最新放入仓库的版本
(4)Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
git工作的一般流程:
(1)Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态
变为Staged.
(2)Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文
件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
(3)Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可
进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即
从库中取出文件, 覆盖当前修改
(4)Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致,
文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified
切换管理员权限安装git。
我这个是已经安装好的,未安装的可以在提示出现时输入y,同意安装。
注意事项:
第一次使用git命令提交代码之前,需要先设置用户名及邮箱,之后就不需要了:
stu@stu-virtual-machine:~/myproject$ git config --global user.email "你的邮箱"
stu@stu-virtual-machine:~/myproject$ git config --global user.name "你的名字"
stu@stu-virtual-machine:~/myproject$ git status
位于分支 master
尚无提交
要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)
新文件: main.c
stu@stu-virtual-machine:~/myproject$
8.使用git diff HEAD 比较当前内容与最后一次提交的版本的差异,如下在main.c中添加了一行内容,显示
添加的一行前面有‘+’号标识。如果内容相同则该命令不显示输出结果。HEAD也可以省略默认就是与最近
一次比较。
这块int b 也是修改项,把上文的in b改为了int b。
也可以通过git reset --hard 版本号回退到任意指定版本
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
stu@stu-virtual-machine:~/myproject$ vi main.c
stu@stu-virtual-machine:~/myproject$ git branch
* dev
master
stu@stu-virtual-machine:~/myproject$ git add main.c
stu@stu-virtual-machine:~/myproject$ git status
位于分支 dev
要提交的变更:
(使用 "git restore --staged <文件>..." 以取消暂存)
修改: main.c
7.历史记录一行显示 : git log --pretty=oneline
8.以图表形式显示分支:git log --graph
stu@stu-virtual-machine:~/myproject$ git commit -m 'dev添加main'
[dev 024836e] dev添加main
1 file changed, 5 insertions(+)
stu@stu-virtual-machine:~/myproject$ git status
位于分支 dev
无文件要提交,干净的工作区
stu@stu-virtual-machine:~/myproject$ git branch
* dev
master
stu@stu-virtual-machine:~/myproject$ git checkout master
切换到分支 'master'
stu@stu-virtual-machine:~/myproject$ git merge dev
更新 8bb2b7b..024836e
Fast-forward
main.c | 5 +++++
1 file changed, 5 insertions(+)
stu@stu-virtual-machine:~/myproject$ vi main.c
stu@stu-virtual-machine:~/myproject$ git branch
dev
* master
stu@stu-virtual-machine:~/myproject$
stu@stu-virtual-machine:~/myproject$ git status
位于分支 master
无文件要提交,干净的工作区
stu@stu-virtual-machine:~/myproject$ vi main.c
stu@stu-virtual-machine:~/myproject$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
修改: main.c
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
stu@stu-virtual-machine:~/myproject$ git branch dev
fatal: 一个分支名 'dev' 已经存在。
stu@stu-virtual-machine:~/myproject$ git checkout dev
error: 您对下列文件的本地修改将被检出操作覆盖:
main.c
请在切换分支前提交或贮藏您的修改。
正在终止
stu@stu-virtual-machine:~/myproject$ git stash
保存工作目录和索引状态 WIP on master: 4993413 解决合并冲突
stu@stu-virtual-machine:~/myproject$ git status
位于分支 master
无文件要提交,干净的工作区
stu@stu-virtual-machine:~/myproject$ git checkout dev
切换到分支 'dev'
stu@stu-virtual-machine:~/myproject$
分支策略: 首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
stu@stu-virtual-machine:~/myproject$ ssh-keygen -t rsa -C "你的邮箱"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/stu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):**这部分遇到要输入点回车就行**
Enter same passphrase again:
Your identification has been saved in /home/stu/.ssh/id_rsa
Your public key has been saved in /home/stu/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:QFRjZabbzQadfEYfvGIanZbRkWdYSLpv70iSgbRMFr4 你的邮箱
The key's randomart image is:
+---[RSA 3072]----+
| .o.+.= .=*+|
| . . * + =o=+|
| . . * * *.+|
| . B O @ . |
| S E @ . |
| o + |
| o + |
| + o |
| ..o|
+----[SHA256]-----+
stu@stu-virtual-machine:~/myproject$
然后就生成了自己的秘钥,生成的公钥在/home/stu/.ssh/下
创建帐号什么的就不用说了,下面说说如何使用远程仓库。
一般企业工作时,一定要注意自己提交代码的正确性,gitee会有身份记录,出现bug时,甩锅都甩不了哦。