git的使用和讲解

版本控制

说到版本控制,脑海里总会浮现大学毕业是写毕业论文的场景,你电脑上的毕业论文一定出现过这番景象!

1
2
3
4
5
6
7
8
9
10
11
毕业论文_初稿.doc
毕业论文_修改1.doc
毕业论文_修改2.doc
毕业论文_修改3.doc
毕业论文_完整版1.doc
毕业论文_完整版2.doc
毕业论文_完整版3.doc
毕业论文_最终版1.doc
毕业论文_最终版2.doc
毕业论文_死也不改版.doc
...

以上就是使用最原始的方式进行版本控制,但是这种方式有显著缺点:

  • 多个文件,保留所有版本时,需要为每个版本保存一个文件…
  • 协同操作,多人协同操作时,需要将文件打包发来发去…
  • 容易丢失,被删除意味着永远失去…(可以选择网盘)

为了解决以上版本控制存在问题,应运而生了一批版本控制工具:VSS、CVS、SVN、Git等,其中Git属于绝对霸主地位。

注意:一般版本控制工具包含两部分

  • 客户端(本地):本地编写内容以及版本记录
  • 服务端(网盘):将内容和版本记录同时保存在远程(可有可无)
git的光速入门

git是什么?

git 是一种版本控制器,更直白的说,团队开发的时候,管理代码使用的软件

git的安装

git 在win,mac下都可以安装。

windows下的安装

https://www.git-for-windows.github.io/ 下载软件,双击,一路“Next”完毕,安装成功!

linux下的安装
1
yum install git

git的配置

人在江湖飘,哪能没名号

在你使用git之前,需要先进行配置,即要报名号,否则不能提交代码

1
2
$ git config --global user.name # 你是谁
$ git config --global user.email # 联系方式
本地代码管理
创建版本库
1
2
3
cd E:/
mkdir test
git init

注意:

  • 不要将仓库建在中文目录下,否则可能出现问题
  • .git是一个隐藏的目录,不要随便乱碰(每一次的操作,都会有记录)
添加文件

E:/test目录下面,用你喜欢的编辑器来开发你的程序,比如:index.py

1
print("helloworld")

编辑完成之后,git status来查看文件的状态

1
git status

此时,git发现有一个新的文件,但是并没有把该文件纳入管理。
我们需要两步,让git来管理该文件

  • git add index.py # 把index.py文件保存在暂存区
  • git commit -m '新建文件' # 把index.py提交到版本库
修改文件

这个过程和添加文件是一样的,同样需要两步

删除文件

rm来删除文件,并直接commit,提交到版本库

例如:先创建一个foo.py的文件,供练习删除使用

步骤如下:

1
2
3
4
5
6
7
8
9
10
11
$ touch foo.py # 创建foo.py
$ git add foo.py
$ git commit -m '删除使用'
$ ls
foo.py index.py
 
# 开始删除
$ git rm foo.py
rm 'foo.py'
 
$ git commit -m '删除foo.py'

远程仓库

经过前面的练习,我们已经能够在本地的仓库里管理代码了,但如果是团队开发,怎么配合起来呢?

我们可以把版本放在互联网上,开发者把自己的最新版本推到线上仓库,同时,把最新版本的代码拉到本地,这样,就可以协同工作了

注册在线仓库账号

国内:http://www.github.com
国外:http://git.oschina.net

github.com是目前全球最大的同性交友网站,但是由于网站在国外,因此访问起来速度不是很好,所以,我们这次使用 git.oschina.net来完成讲解

创建项目

在oschina上注册后,新建项目,我们先新建一个项目,叫做test

创建成功之后,oschina会为这个项目提供两个地址:

1
2
http地址:https://git.oschina.net/lianshou/test.git
ssh地址:git@git.oschina.net:lianshou/test.git
把代码推到远程仓库

推:push

  • 为本地库添加远程库
    git remote add origin https://git.oschina.net/lianshou/test.git
    意思是:添加一个远程的仓库,代号是origin 地址是:https://.../test.git

  • push推代码
    git push origin master
    意思是:把你本地的版本(默认是master),推到代号为origin的远程库
    这个过程会让你输入用户名和密码,即你注册时的用户名和密码

团队合作

你想让xiaoming和你一起开发这个项目,首先我们需要在lianshou这个项目中把xiaoming添加进来,让其成为开发者,步骤如下:

项目-->管理-->项目成员管理-->开发者-->添加项目成员-->输入xiaoming

接下来就是开发:

  • 首先需要clone一份代码到自己的本地,
1
2
cd F:/
git clone https://git.oschina.net/lianshou/test.git

xiaoming开始在自己的工作区开发代码,然后提交代码到这个地址

那到另一个账户,如何得到最新的代码?

之前推(push)代码到远程服务器,那拉代码,自然就是pull了

1
git pull origin master
git的特点和诞生

分布式版本控制器

何为分布式,与集中式有何区别?

先来看svn:

中间的svn服务器中,存储着代码版本的变迁以及变迁的日志

你想查看改动日志,你需要连上svn服务器
你想退回上个版本,你需要连上svn服务器
你想创建新的分支,你需要连上svn服务器

联网不说,但是svn服务器坏了呢?你说咋办

而git是这样的:

每个开发者的电脑上都有一个完整的版本,日志以及分支信息
但开发者不依赖于服务器,可以看日志,回退版本,创建分支

当然,世界各地的开发需要交换最新的版本信息,
因此,git往往也是需要服务器的

但是,两者的本质区别在于:

git服务器是提供开发者“交换”代码用的,服务器的数据丢了没有关系,换一台就好了,因为本地已经保存了一份

但是svn服务器要是坏了的话 ,那就是真的坏了

发展历史

版本查看以及切换

工作区和版本库

如果你想更清晰的学习git,你必须要了解3个重要的区域:

  • 工作区:开发者的工作目录
  • 暂存区:修改已被记录,但未被录入版本库的区域
  • 版本库:存放变化日志以及版本信息

改动日志查看

1
2
3
4
git log : 查看项目日志
git log file : 查看某个文件日志
git log . :查看本目录日志
git reflog: 查看详细做了啥

若果感觉有点乱,可以使用git log --pretty=oneline 让日志单行显示

版本的切换

1
git reset --hard "head^^^"

--hard代表的是当前版本,后面的^符号代表的是退回到第几个版本,几个^符号就代表退回第几个

但是这种方式不是很灵活,因此不建议大家使用这种方式切换,我们使用:

1
git reset --hard 2580d

2580d代表的是版本号,只需要保证版本号是唯一的即可

分支管理

分支的作用

假设网站现有支付宝支付功能,现在需要上线微信支付的功能,此时涉及修改的文件为:wechat.py, ali.py

刚做到一半,突然有个紧急的bug:支付宝支付之后不能修改状态,那此时你需要立即修改这个bug,需要修改的文件是ali.py

但是问题是,ali.py你已经做了一半了,而且尚未完成,直接再次基础上修改,肯定会有问题,把ali.py倒回去?那之前的工作就白费了。

此时你肯定会想,能不能在做微信支付的时候,能否把仓库复制一份,再此副本上修改,不影响原仓库的内容,修改完毕之后,再把副本的内容合并过去

那这个就是分支的概念

前面见过的master就是代码的主分支

实际中,我们一般不会直接提交代码到master上

而是会创建一个分支dev,在dev分支上,进行开发测试,没有问题了之后,在合并到master上

查看分支

1
git branch

创建分支

1
git branch dev

切换分支

1
git checkout dev

合并分支

1
git merge dev
远程服务器配置

查看远程仓库

1
2
git remote
git remote -v

删除远程仓库

1
2
3
命令:git remote remove <远程地址>
 
例子:git remote remove origin

添加远程仓库

1
git remote add <远程仓库别名> <远程仓库地址>

修改远程仓库

1
git remote rename <旧名称> <新名称>
公钥登录

我们push代码的时候,老是需要输入用户名和密码,非常不方便。

因此,配置公钥,可以避免频繁的输入用户名和密码

  • 配置ssh格式的远程仓库
    git remote add 远程仓库名 远程仓库地址

  • 创建ssh key
    ssh-keygen -t rsa -C "youemail@163.com"
    一直回车,不用输入密码,完成之后,可以再主目录里找到.ssh文件夹,内有id_rsaid_rsa.pub两个文件, id_rsa是私钥,id_rsa.pub是公钥

  • 把公钥放到服务器上

编码不易,且行且珍惜!


支付宝

微信

 

RabbitMQ队列

星轨

分享
  • 新浪微博

  • 微信

  • 有道云笔记

取消
 

表情 | 预览

git光速入门的更多相关文章

  1. GIT 从入门到放弃大整理

    跟着廖雪峰学 GIT  http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GUI f ...

  2. 第三章 Git的入门 - 读书笔记

    Android驱动月考3 第三章 Git的入门 - 读书笔记 对于Github,这是全世界最大的开源平台,你可以把你做的项目在这里开源,把你发现的一些新技术在这里开源,向全世界的开发者们分享,大家都彼 ...

  3. git简单入门

    git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...

  4. Android系统移植与驱动开发--第三章 Git使用入门及在学习中有感

    第三章 Git使用入门 使用Git的目的是减少各种版本的Linux的压缩大小,提供源代码在Linux上进行编译. 在这一个章节中,其实就是关键步骤的操作,虽然Git与我们学习的android没有很大的 ...

  5. 让 Python 带你进入开源的世界——Git 从入门到与他人协作开发

    让 Python 带你进入开源的世界--Git 从入门到与他人协作开发 我认为开源社区中有很多优秀的资源,并且可以帮助进阶中的程序员提高编程能力和水平.所以,我发起了<HelloGitHub&g ...

  6. Git快速入门进阶篇

    本文接着Git快速入门篇,继续探讨Git在管理项目中的一些应用. 远程仓库的使用 查看远程仓库 查看你已经配置的远程仓库服务器,可以运行 git remote 命令.指定选项 -v,会显示需要读写远程 ...

  7. git快速入门 push/clone/reset/merge/切换分支全都有

    本文介绍git快速入门,从安装/创建init / 发布push/版本回退reset / branch分支切换/合并分支merge 这些基本的操作都有涉及,方便新人快速入手,有需要的朋友mark一下.首 ...

  8. Git 快速入门--Git 基础

    Git 快速入门 Git 基础 那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余. 在开始学习 G ...

  9. Git原理入门简析

    为了获得更好的阅读体验,建议访问原地址:传送门 前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的 ...

随机推荐

  1. JS---DOM---点击操作---节点的方式---案例

    点击操作---节点的方式---案例 案例1:点击按钮,设置p变色---节点的方式做 <!DOCTYPE html> <html lang="en"> < ...

  2. iOS-----------安装fir-cli错误

    1.在终端执行  gem install fir-cli 一直提示错误:    You don't have write permissions for the /Library/Ruby/Gems/ ...

  3. sql server2017开启远程连接

    1.安装完SQL server2017之后,选择SQL 身份验证登录,可以先用windows身份验证登录把密码更改好了,然后服务器右键重新启动 ,再断开连接 ,选择SQL身份验证登录验证,关闭SQL ...

  4. 手把手教你安装Virtualbox,安装并运行虚拟机

    一.安装VirtualBox. 官网:https://www.virtualbox.org/wiki/Downloads 首先,进入官网下载页面,单击Windows hosts 链接(图中红色方框), ...

  5. tensorflow基础-数据类型

    一:tensorflow中的计算定义和执行 首先,对于tensorflow来说,最重要的概念就是图(Graph)和会话(Session),tensorflow的计算思想是:以图的形式来表示模型,表示和 ...

  6. Nginx 常用模块

    Nginx 常用模块 1. ngx_http_autoindex_module # ngx_http_autoindex_module模块处理以斜杠字符(' / ')结尾的请求,并生成一个目录列表. ...

  7. IT兄弟连 HTML5教程 HTML5的基本语法 小结及习题

    小结 一个完整的HTML文件由标题.段落.列表.表格.文本,即嵌入的各种对象所组成,这些逻辑上统一的对象称为元素.HTML文档主体结构分为两部分,一部分是定义文档类型,另一部分则是定义文档主体的结构框 ...

  8. Linux下离线安装python项目的依赖包

    第一步新建一个site-packages文件夹,把python项目有需要的依赖包名称导出到site-packages下的requirements.txt中 $ pip3 freeze > req ...

  9. 【Java基础】Java中你必须知道的知识点

    目录 Java中面向对象的基础知识 1. 什么是面向对象  2. 三大基本特征和五项基本原则 3. Java的平台无关性 4. 值传递和引用传递 5. 方法重载和重写 6. 基本数据类型 7. 包装类 ...

  10. PAT 1003 Emergency 最短路

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...