代码
【git 和gitee 从入门到实践】 git + gitee 入门实践

【git 和gitee 从入门到实践】 git + gitee 入门实践

【git 和gitee 从入门到实践】 git + gitee 入门实践

作者:琦玉

来源:MindSpore论坛

原帖:https://bbs.huaweicloud.com/forum/thread-55222-1-1.html

写在前面

作为一个编程小白,刚开始的时候完全不知道git为何物,但招聘简历上很多岗位都提到了这个词,本着跟我无关高高挂起的懒惰原则,我坚决不看哈哈哈。但小编我最近换了份工作,日常生活中中与这个名词接触的次数大大增加,让我实在是没有办法啊,花点时间来了解一下这git到底是什么,不求融会贯通,至少要入个门吧,于是就在学习的过程中写下了这篇入门笔记,很多人说git+GitHub才是王道,不好意思我觉得gitee的中文名太让我出戏了,哈哈哈,项目也开源在gitee上,所以决定试一下这个组合。实践过程中明确感受到gitee+git是简单易上手的,大家完全不用担心会被“劝退”~话不多说,让我们进入正题吧。

Gitee简介

大名鼎鼎的码云哈哈哈,再笑一下。Gitee是开源中国开发的一款基于git的代码托管平台,能够实现的功能有很多,代码托管,项目管理啊,写作开发等等,目前是国内代码系统的扛把子,前言中提到的GitHub和gitee的作用和性质是高度相似的,但两者有这两个显著的不同:gitee速度快(百度的),gitee支持免费的私密项目。有兴趣了解更多一点的朋友们可以去码云平台帮助文档好好了解一下,地址:http://git.mydoc.io/ 这文档写的很好,主要全是中文(废话)还通俗易懂,推荐大家好好看看。

Gitee注册

直接访问https://gitee.com/signup,注册一个就行

Git简介

git是一个分布式的开源版本控制系统,git是一种技术或者说是工具,可以有效,高速的处理从小到大的项目版本管理。而gitee是基于git的代码托管平台,理解他们的区别非常重要。一个经典的git开发过程:1从服务器上克隆完整的Git仓库到单机上。2在自己的机器上根据不同的开发目的,创建分支并修改代码。3在单机上自己创建的分支上提交代码。4在单机上合并分支。5把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。6生成补丁(patch),把补丁发给主开发者。7看主开发者的反馈,如果主开发者发现两个一般开发者之间之间有冲突,就要求他们先解决冲突,然后再由其中一人提交,如果主开发者可以解决冲突或者没有冲突,就通过。

Git安装

要安装先下载嘛,网址https://git-scm.com/downloads

20200509-162259(eSpace).png

根据自己的需要来下载相应的版本,小编这里是win10的环境,安装了win10x64,对于git的windows安装,其实一路next就行了,next到底都不需要配置环境变量,会自动给你配置好,蛮方便的。

怎么验证你到底安装成功还是失败了呢?

打开cmd,输入git --version 如果出现版本信息,那你就装成功了,像我下面这样:

20200507-171633(eSpace).png

代码托管

Gitee已经注册好了,git也安装成功了,那么我们试一试代码托管功能吧。在开始之前,我们来讲git中四个比较重要的概念

1. git branch命令(分支

git默认的分支一般是master,当然一般默认的东西都是可以修改的。我们在master完成一次开发,生成了一个稳定版本,那么当需要添加新功能或者做修改时,只需要新建一个分支,然后在这个分支上面开发,完成之后合并到主分支即可,分支功能解决的是正在开发的版本与上线版本稳定性冲突的问题。

2. git commit命令(提交)

git对于版本的管理其实是对提交的管理,git用40个字节长度的16进制字符串来标识每一个提交,每一个提交具有唯一的标识,可以根据这个标识任意回退。

3. git pull命令(拉取)

用于取回远程仓库某个分支的更新,再与本地仓库进行合并。

4. git push命令(推送)

用于把本地的代码更新到远程仓库。

了解了这些基础概念,我们开始正式学习git+gitee的使用。

创建远程代码库

登录自己的gitee账号,选择“新建项目”

20200508-092701(eSpace).png

这边我在自己码云创建了一个“testGit”的仓库,下面选择是否公开,根据个人需求选择,同时勾选“使用Readme文件初始化这个项目”,点击新建之后,可以看到远程代码仓库创建成功,同时库内有一个README.md文件:

20200511-141640(eSpace).png

这就表示你创建成功啦。

创建本地代码仓库

在本地电脑的一个盘下新建一个文件夹来作为自己的本地代码仓库,也就是说以后希望这个文件夹里面的改动都能够被git进行管理,我这边是在D盘下面新建了一个文件夹,暂且也命名为testGit,方便记忆。

进入文件夹,按住shift键的同时在空白处右击鼠标,选择“在此处打开Powershell窗口”,执行代码:

git init

(这句话的意思是初始化一个本地仓库,之后可以看到文件夹下面多了一个.git文件夹,这个文件夹可能是隐藏文件夹,需要在根目录下设置所有文件可见,用于记录所有与管理本仓库相关的文件,请小心改动)

20200511-140737(eSpace).png

进行代码托管

本地仓库和远程代码仓库现在都已经建立好了,我们要将他们进行同步才能在gitee上进行代码托管。

1. 本地代码仓库与远程代码仓库进行同步,执行代码:

2. 拉取远程代码库:

我的远程库上有两个文件,但是目前新建的代码库中没有这两个文件,所以先执行pull操作将远程仓库拉取合并到本地仓库,否则会出错,执行代码:

git pull origin master

此处第一次执行git pull是没有用的,因为本地创建了代码仓库,目前git默认的关联库就是在本地。需要执行git pull origin master命令才行,这句话的意思是推送到远程库的master分支,以后就可以直接使用git pull命令了。

20200511-144530(eSpace).png

当然这一步的时候会遇到一些问题,我在拉取的时候没有遇到,但我在网上看其他的一些学习笔记的时候,这个问题出现的还是蛮常见的,所以在这里拿出来讲讲。错误提示:“fatal:refusing to merge unrelated histories”,出现这种错误是因为git认为这两个仓库不同所以无法合并,我们执行语句的时候这样写就行了:

git pull origin master –allow-unrelated-histories

3. 向远程代码库推送文件:

这里我做一个简单的操作,在本地新建一个名为test1.txt的文本文件,现在要将他推送到远程仓库里面去。此时第一步代码是

git add .

这一步是将当前工作区的所有文件存放到暂存区

当然这一步执行的时候会遇到一个问题, 我这边遇到的时候比较懵,问题如下:

20200511-154930(eSpace).png

我比较单纯,按照提示的输入了git config –global user.email”xxxxxxxx(我的邮箱)”和git config –global user.name”xxxxx(我的用户名)”。结束之后一运行发现,不行。。。。。

这就很尴尬了,试了几次之后找到了一个完全可行的方法,在本地仓库中打开.git文件夹,再打开config文件,添加下面一段:

[user]

email = 你的邮箱

name = 你的用户名

重点是,这边输入的时候必须要是英文输入,包括标点符号等号之类的,否则还会报错,但是你设置好之后,上面那个问题就解决了。

此时你再运行:

git commit –m”对该操作的描述”

此时git已经感觉到了仓库中的变化,我们这时候再运行:

git push

将本地的同步到远程代码仓库

20200511-162035(eSpace).png

操作截图如上图所示,这时候我们再返回远程代码端,刷新一下网页,就可以看到test1.txt已经出现再远程代码端啦!

20200511-162119(eSpace).png

删除,回退版本

提交跟拉取远程的学会了,那我们现在试试看删除跟回退,我们以删除文件夹和文件为例子,本地已经有文件test1.txt文件了,这里我们在本地新建一个文件夹abc,同时先根据上面的操作把这个文件夹推送到远程代码仓库。我在推送时遇到了一个问题:

20200512-171005(eSpace).png

查了一下是分支的原因,我们先创建一个新的分支:

git branch newbranch

然后查看一下当前分支;

git branch

如下图所示:

20200512-171316(eSpace).png

前面有*号的表示是当前所在的分支,这时候我们就要切换过来:

git checkout newbranch

这时候就已经切换过来了,不放心的git branch再看一眼

然后将你的改动提交到新的分支上

git add .

git commit –m “你的说明”

然后检查是否成功 git status 切换到主分支:

Git checkout master

将新分支提交的 改动合并到主分支上:

git merge newbranch

然后就可以推送到远程代码仓了:

git push –u origin master

最后把这个分支删除掉:

git branch –D newbranch

我在这边还遇到一个特别憨憨的问题,实在是尴尬,在本地新建了一个空的文件夹,怎么同步都同步不到远程代码仓库,后来才发现,同步****空文件夹到远程仓库,因为git默认本地文件夹没有改动。

1. 删除文件

执行下面的命令:

git rm 想要删除的文件和其后缀

git rm 想要删除的文件夹的名字 –r

示例:git rm test1.txt

此处删除的是test1.txt本地文件,我们还要同步到远程代码仓库里面去:

git commit –m “删除test1.txt”

git push

20200512-191450(eSpace).png

远程代码仓库刷新一下就会发现文件已经删除了。

此时我们再来删除文件夹

git rm abc –r

git commit –m “描述”

git push

20200512-192207(eSpace).png

此时远程代码仓库刷新一下就会发现文件已经删除了。

2. 找回文件

Git对于版本的管理本质是对提交的管理,所以再每个操作后最好提交一下,便于之后需要回退,例如要找回上面操作中删除的test1.txt。

最重要的一点,如果你正在进行某些更改,需要先推送远程仓库,否则回退之后,最新的状态的内容就没有了。以如下流程为例子:

Commit1—> Commit2--> Commit3(误删操作)--> Commit4--> Commit5(最新)

我们先保存目前的Commit5,然后回退到Commit2,此时test1.txt出现了,但是最新变动没有了,我们拷贝出test1.txt。然后回退到Commit5,拷贝进去test1.txt,再推送到远程代码库,得到Commit6。

执行命令:

git log

可以查看提交的唯一标识

20200512-194015(eSpace).png

执行命令:

git reset –hard 回退的commit唯一标识号

拷贝出test1.txt

git reset –hard 最新的commit唯一标识号

拷贝test1.txt进本地代码库,push到远程代码仓库

20200512-194816(eSpace).png

好啦,大功告成,此时的远程和本地代码仓库都已经恢复了test1.txt,但是没有恢复abc文件夹。

通过上面的学习,已经基本掌握git+gitee的基础使用啦,每一个小甜头都是进步的动力,加油鸭!