1.git简介

  Git 是一个分布式的文件托管系统,当然这里的文件主要是源代码(文本),也可以包含其他非文本的二进制数据。由于 git 主要用于存储代码(.java .c .cpp .h .jar .class…) 中,所以以后我们就把用代码来表示文件了。

    Git 包含了完善的客户端和服务端,客户端和服务端之间通过某种安全通信 协议(HTTPS 或者 SSH)进行文件的上传和下载。

  Git 是基于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(wingeddevil注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。

1.1 Git诞生

    说到Git,就不得不提linus,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为 最⼤的服务器系统软件。而Linux的壮大,是靠着全球热心的开源志愿者,这么多⼈在世界各 地为Linux编写代码,那Linux的代码是如何管理的呢?事实是,在2002年以前,世界各地的志愿者把源代码⽂件通过diff的⽅式发给Linus,然后由 Linus本⼈通过⼿⼯⽅式合并代码! 你也许会想,为什么Linus不把Linux代码放到版本控制系统⾥呢?不是有CVS、SVN这些免 费的版本控制系统吗?因为Linus坚定地反对 CVS和SVN,这些集中式的版本控制系统不但速度慢,⽽且必须联网才能使⽤。有⼀些商⽤的版本控制系统,虽然⽐CVS、SVN好⽤,但那是付费的,和 Linux的开源精神不符。

    不过,到了2002年,Linux系统已经发展了⼗年了,代码库之⼤让Linus很难继续通过⼿⼯⽅式管理了,社区的弟兄们也对这种⽅式表达了强烈 不满,于是Linus选择了⼀个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于⼈道主义精神,授权Linux 社区免费使⽤这个版本控制系统。 安定团结的⼤好局⾯在2005年就被打破了,应为Linux社区牛人聚集,开发Samba的Andrew试图解析BitKeeper的协议(这么干的其实也不只他⼀个),被BitMover公司发现,于是BitMover公司怒了,要收回Linux社区的免费使⽤权。然后Linus花了两周时间⾃⼰⽤C写了⼀个分布式版本控制系统,这就是Git!⼀个月之内,Linux 系统的源码已经由Git管理了!⽜是怎么定义的呢?⼤家可以体会⼀下。 Git迅速成为最流⾏的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,⽆数开源项目开始迁移⾄GitHub,包括jQuery,PHP,Ruby等等。 历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好⽤的Git了

2.在Gitee上创建Git仓库

   Gitee中文名为码云,它是OSCHINA推出的代码托管协作开发平台。该平台类似于国外的GitHub,可以为开发者提供稳定的托管服务。

   Gitee 是开源中国社区2013年推出的基于 Git 的代码托管服务,目前已经成为国内知名的代码托管平台,致力于为国内开发者提供优质稳定的托管服务。

 1.创建账号,登录gitee

ubuntu下git配置和基本使用_git

2.创建仓库

ubuntu下git配置和基本使用_git_02

ubuntu下git配置和基本使用_版本控制系统_03

 3.初始化仓库

ubuntu下git配置和基本使用_远程仓库_04

创建成功。

ubuntu下git配置和基本使用_Gitee_05

3.ubuntu下git应用

sudo apt-get install git #安装git
/*设置本地仓库信息*/
git config --global user.name "[name]" #设置全局用户名字
git config --global user.email "[email address]" #设置邮箱
git config --list #查看配置信息

3.1 本地生成公钥,使用

  Gitee 提供了基于SSH协议的Git服务,在使用SSH协议访问仓库之前,需要先配置好账户/仓库的SSH公钥。

[wbyq@wbyq ~]$ ssh-keygen -t rsa -C "it-a-shui@872561012@qq.com"
-t 为指定加密方式rsa
-C 指定生成密钥sshkey名称,可以随意填写
[wbyq@wbyq ~]$ ls /home/wbyq/.ssh/ #生成密钥文件,
id_rsa id_rsa.pub known_hosts

ubuntu下git配置和基本使用_git_06

3.2 配置gitee服务器端

ubuntu下git配置和基本使用_Gitee_07

3.3 测试是否成功

[wbyq@wbyq ~]$ ssh -T git@gitee.com
Hi it_阿水! You've successfully authenticated, but GITEE.COM does not provide shell access.

  添加成功后,就可以使用SSH协议对仓库进行操作了

3.4 ubuntu下git基本使用

3.4.1 创建本地仓库,提交代码

  (1)首先在gitee服务器上创建仓库。
  (2)初始化本地仓库。将本地仓库与远程仓库关联。

[wbyq@wbyq work]$ git init #初始化本地仓库
[wbyq@wbyq work]$ git remote add origin git@gitee.com:it-a-shui/git_test.git #关联远程仓库

  origin 是给我们当前项目的远程仓库起的名字,可以随意取,一般当只有一个远程仓库时就取名为origin。

  (3)查看本地当前项目远程仓库有哪些。

[wbyq@wbyq work]$ git remote -v
origin git@gitee.com:it-a-shui/git_test.git (fetch)
origin git@gitee.com:it-a-shui/git_test.git (push)

  (4)提交本地仓库到远程仓库

[wbyq@wbyq work]$ touch test.c #在本地仓库创建一个test.c
[wbyq@wbyq work]$ git commit -m "ubuntu下git使用测试" #编写提交说明
[wbyq@wbyq work]$ git push origin master #提交分支

  如果上传不成功,提示无法合并,可以强制上传:(一般不建议使用)

 git push -u origin +master #将本地仓库分支 origin 分支的所有内容推送给 master 仓库

     注意:采用git init创建本地仓库后,若不克隆远程仓库内容,直接提交则会将原来远程仓库中内容删除。

ubuntu下git配置和基本使用_版本控制系统_08

  (5)提交本地仓库所有文件到远程仓库。

[wbyq@wbyq work]$ cat test.c  #在test.c中添加以下内容
#include <stdio.h>
int main()
{
printf("欢迎使用git代码管理平台\n");
}
[wbyq@wbyq work]$ git add -A #本地所有文件
[wbyq@wbyq work]$ git commit -m "第二次提交测试" #提交说明
[wbyq@wbyq work]$ git push origin master #提交分支

ubuntu下git配置和基本使用_Gitee_09

3.4.2 克隆远程仓库内容

git clone <远程仓库地址>

[wbyq@wbyq work]$ git clone git@gitee.com:it-a-shui/git_test.git
正克隆到 'git_test'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 29 (delta 2), reused 0 (delta 0), pack-reused 19
接收对象中: 100% (29/29), 22.38 KiB | 402.00 KiB/s, 完成.
处理 delta : 100% (4/4), 完成.
[wbyq@wbyq work]$ ls
git_test #克隆生成的文件
[wbyq@wbyq git_test]$ cat test.c
#include <stdio.h>
int main()
{
printf("欢迎使用git代码管理平台\n");
printf("克隆远程仓库代码测试\n");
}
[wbyq@wbyq git_test]$ git commit -m "Ubuntu下克隆远程仓库代码测试" #提交说明
[wbyq@wbyq git_test]$ git push origin master #提交分支

  注意:克隆远程仓库时会在本地生成仓库,不需要通过git init创建,需要修改和提交只需要进到该仓库目录下即可。

ubuntu下git配置和基本使用_git_10

4 查看提交日志信息

[wbyq@wbyq git_test]$ git log
commit 970e00cd9669a593204f977606a48feb7b (HEAD -> master, origin/master, origin/HEAD)
Author: wbyq <872561012@qq.com>
Date: Thu Oct 28 18:04:20 2021 +0800

Ubuntu下克隆远程仓库代码测试

commit 19db83b611e678e0b3c577320cd908a1e9c
Author: wbyq <872561012@qq.com>
Date: Thu Oct 28 17:13:25 2021 +0800

第二次提交测试

commit f85d4db27fc9a9aafc56f1e6a26eee0f8
Author: wbyq <872561012@qq.com>
Date: Thu Oct 28 15:15:05 2021 +0800

添加test.c
[wbyq@wbyq git_test]$ git reflog
f81b615 (HEAD -> master) HEAD@{0}: reset: moving to f81b615d4db27fc9a9aafc56f1e9486a26eee0f8
970e00c (origin/master, origin/HEAD) HEAD@{1}: reset: moving to 970e00c
f81b615 (HEAD -> master) HEAD@{2}: reset: moving to f81b615d4db27fc9a9aafc56f1e9486a26eee0f8

  git log 命令可以显示所有提交过的版本信息

    git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

      例如执行 git reset --hard HEAD~1,退回到上一个版本;

     用git log则是看不出来被删除的commitid,用 git reflog则可以看到被删除的commitid,我们就可以买后悔药,恢复到被删除的那个版本。

5 版本回退

git reset --hard [版本号]

[wbyq@wbyq git_test]$ git reset --hard f81b615d4db9a9aafc56f1e9486a26eee0f8
HEAD 现在位于 f81b615 添加test.c
[wbyq@wbyq git_test]$ git reset --hard HEAD~1 #回退到上一个版本
HEAD 现在位于 c9f99ab 公钥测试