精华内容
下载资源
问答
  • BDTC大会官网:https://t.csdnimg.cn/q4TY作者 | 马超来源 | CSDN博客陶哲轩菲尔兹奖得主,著名华裔数学家,号称地表最强大脑拥有者,近日他与三位物理家共同发表了一篇论文发现了特征值特征向量之间全新...

    BDTC大会官网:https://t.csdnimg.cn/q4TY

    作者 | 马超

    来源 | CSDN博客

    陶哲轩菲尔兹奖得主,著名华裔数学家,号称地表最强大脑的拥有者,

    b7b9ce8e1a5242f0c4f2a35685527f85.png

    近日他与三位物理学家共同发表了一篇论文发现了特征值与特征向量之间的全新关系,在业内引起了不小的反响。

    特征值与特征向量

    特征值是线性代数中的一个重要概念。其实简单的理解特征值与特征向量就要从线性变换说起,因为大部分的线性变换都会改变向量的方向,如下图所示:

    70e5e150b455f24e72341f1b94460173.gif

    不过也存在只改变长度不改变方向的线性变换,如下图所示:

    ba4e498afceb6c7176bc334d6c5e907c.gif

    那么从定义上来讲,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是A的一个特征值(characteristic value)或本征值(eigenvalue)。非零n维列向量x称为矩阵A的属于(对应于)特征值m的特征向量或本征向量,简称A的特征向量或A的本征向量。

    有关特征值与特征向量关系的新发现

    0cb132e3d35160c14baf68996cc25200.png

    我们可以看到陶哲轩等4位科学家的论文名字叫作《从特征值得到特征向量》他们得到的新公式写出来是这样的

    f539392203ba0d4a7901ab160ab9f552.png

    其中vi,j代表特征值入i对于特征向量的第j个元素

    入i(A)为矩阵A的第i个特征值

    Mj为A的第j个余子式

    我们知道特征值就是直接利用公式进行求解,相对比较简单,但是特征向量是非常难解的,不过有了这个公式,实际把求解特征向量的方法也变简单了,也就是说今后再求解特征向量就直接拿出Mj既矩阵A的第j个余子式既可,因为余子式本身就是删除原矩阵的行和列的过程,所以论文中才会说“通过删除原矩阵的行为列,你可以得到一个原矩阵的余子式,将余子式的特征值与原矩阵的特征值结合,你就可以得到原矩阵的特征向量” 。

    2f19fd2bb9cea3221b56d2c77c075325.png

    哇塞,因吹丝停。据说陶哲轩对这个新发现的第一反应是:这么完美、这么简明的定理,早就应该出现在教科书里了。笔者在看完这篇报道之后也感到非常吃惊,所以就特地留意了一下相关评论,果然有惊喜,难道这个公式真的早就在教科书中吗?

    6e6b9139a7af6f0be776aecfd1248d85.png

    《矩阵的计算理论与方法》到底说了什么

    为了求证北大徐树方老师的《矩阵的计算理论与方法》到底说了什么,笔者把应届硕士毕业的同事问了个遍,终于找到,翻开第323页的引理1如下:

    62d911fe8c200104de88dd94b947eee6.png

    我的天,这个公式和本次新发现的公式是完全等效了。不过缓过神来之后仔细看看,发现此书上的证明是前提条件的,既矩阵必须为三对角矩阵。而三对角矩阵的非零系数必须在主对角线、低对角线、高对角线这三条对角线上。书中原文如下:

    06cc4d88d6bb640f3b89ecd28f90c1e7.png

    而且在公式的过程中也用到了三对角矩阵的性质

    05008ccf5b11a73ac55a341b6840dcb7.png

    而对比本次论文中的证明,陶哲轩等科学家是利用极限定理将这个公式推广了。(虽然这步证明笔者还没看懂,如果哪位读者能搞懂这步的含义请留言告知)

    13c0b40d057b083e543087d417c37078.png

    写在最后

    近期数学方面的基础研究突破不断,如笔者前文介绍有关布尔复杂度猜想的证明(https://blog.csdn.net/BEYONDMA/article/details/98094541)。

    但在这许多重大发现面前,本次定理证明的意义也绝对不遑多让,特征向量与特征值可以用于研究微分方程;可以用于统计协方差矩阵的主因分析;甚至在机器学习中也有储如数据降维等许多应用;它们是如此重要以至于一个任何一点突破都会影响深远。不过遗憾的是我国的数学家虽然很早之前就发现了此公式,但却没有把它在一般情况下进行验证,所以与其说如此简洁完美的定理为什么没有早早出现在教科书,不如说为什么没有被及时推广。

    (*本文为AI科技大本营转载文章,转载请联系原作者)

    2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。6.6 折票限时特惠(立减1400元),学生票仅 599 元!

    展开全文
  • 1、面向过程与面向对象区别回忆知识,同学们在之前学习,不管是将代码解耦、功能封装,我们都是使用function()自定义函数。对于一些较大功能函数,例如数据库操作,我们只能将其拆分成许多function()。...

    1、面向过程与面向对象的区别

    回忆知识,同学们在之前的学习,不管是将代码解耦、功能封装,我们都是使用的function()自定义函数。

    对于一些较大功能的函数,例如数据库的操作,我们只能将其拆分成许多个function()
    而一些私有的逻辑解耦,只能单独存放在一个文件中保存,否则就极其难维护代码。

    而这样的编程方式,就是PHP5.0+之前,PHP的编程方式,我们将之称为面向过程编程。

    在PHP5.0+之后,这样的编程方式已经彻底废弃了,原因是因为PHP提供了一个class{}类定义。

    A、面向过程与面向对象的对比

    如果将面向过程的程序解耦,称之为功能拆分,拆分之后的function()是没办法按一个大的范围管理的,最大的管理范围是用一个文件单独装起来,例如:

    1、公共函数库

    2、私有函数库

    而面向对象的程序解耦,则可以称之为功能设计,我们将某个管理范围内的所有函数都统一放入class{}类定义中,这样就不再需要使用文件管理函数类别。

    同时class{}还有着许多function()自定义函数无法做到的特性,将在之后中一一学习到。

    下面我们用一个简单的案例,来加深面向对象 与 面向过程的区别:

    假设,我们现在要像炼气期升阶考试中一样,封装一些数据库的操作,那么面向过程只能这样做:

    php

    # 开启数据库

    function Start(){}

    # 关闭数据库

    function End(){}

    # 新增数据

    function Add(){}

    # 修改数据

    function Upd(){}

    # 删除数据

    function Del(){}

    # 更多的其他数据操作函数

    ......

    这样每个function()都是独立的,他们之间没有任何关联,同时当你引入这个保存着所有function()文件的时候,PHP就会计算这些function()函数体所占用的内存,

    就好比,你建房子,虽然还没开工(还没调用函数),但你已经买了一堆材料回来(函数体积),那就肯定会占用一些面积存放它们啦。

    而面向对象的实现方式,则是这样:

    php

    # 第一个数据库操作封装

    class Mysql{

    # 开启数据库

    public function Start(){}

    # 关闭数据库

    public function End(){}

    # 更多的其他数据操作函数

    ......

    }

    # 第二个数据库操作封装

    class Oracle{

    # 开启数据库

    public function Start(){}

    # 关闭数据库

    public function End(){}

    # 更多的其他数据操作函数

    ......

    }

    相比于面向过程,我们需要引入这个保存着所有class{}文件之后,再new 对应的class,才能调用其内部的function()函数,虽然比起面向过程来说,这样的使用方式多了一个步骤,却解决了函数重名的问题。

    而在引入这个文件的时候,PHP只会计算这个文件大小所占用的内存,不会计算class{}内部function()函数体所占用的内存大小,就好比,你建房子,class()只是一张设计图,而你在没有调用(new)之前,建房子的材料是还没买回来的(内部函数体积),它所占用的面积就是这张设计图的大小。

    B、两者的区别

    面向过程优点:

    1、代码量少

    2、上手简单

    面向过程缺点:

    1、代码耦合度高、所有功能基本都是考页面引入关联起来

    2、解耦能力差

    3、解耦依赖function()自定义函数,内存开销巨大

    4、项目难管理、代码难维护

    面向对象优点:

    1、程序逻辑清晰

    2、代码耦合度低

    3、解耦能力强

    4、解耦使用class{},代替页面分离,减少function()所占用的函数体积内存开销

    5、基于面向对象实现的单一入口程序,可以更好的管理项目,与维护旧代码

    6、使用class{}类定义的函数,可以有效的控制调用权限,让程序更加安全。

    面向对象缺点:

    1、代码量多

    2、上手难度高

    C、使用场景

    面向过程与面向对象,在编程中的区别,主要是一个主次关系,面向过程主要核心是使用function()自定义函数为主,面向对象则是使用class{}类定义为主,function()自定义函数为辅;

    在现在的IT界中,已经基本没人会使用面向过程编程了,因为优缺点太明显。

    2、面向对象的抽象概念

    class{}的主要概念,是必须要将它想象为一张 或 一组设计图。

    335ccf7c1811dbe86c468f567ae99339.png

    展开全文
  • 数学三个组,综合两个组,共十一个组,在小组负责人及小组观察员带动下,在学校报告厅、办公室等场所,围绕学校所提供教材片断,思考怎样教学设计更有利于学生更好的学或怎样教学设计才能更好地促进生生互动...
  • 将前7实验内容集成到一界面下,如直线段、圆、矩形曲线绘制填充,以及对图像处理,并能利用交互技术实现对图元选取、修改和交互。 四、实验过程及步骤 1、程序界面设计 2 、控件属性说明 添加...

    一、实验目的

    掌握在.net环境下的绘图软件界面设计与交互技术。

    二、实验准备

    学习在.net环境下的界面设计的一般原理与交互技术等基本知识。

    三、实验内容

    将前7个实验内容集成到一个界面下,如直线段、圆、矩形与曲线的绘制填充,以及对图像的处理,并能利用交互技术实现对图元的选取、修改和交互。

    四、实验过程及步骤

    1、程序界面设计

    2 、控件属性说明

    添加mainmnue控件,属性如:左添加2panel控件,设置panel1.name=P,panel2作为一个调色板

    3 、程序代码

    Imports System.Drawing
    Imports System.Drawing.Drawing2D
    Imports System.Math 
    --------------------------------------------------------------------------------------------
    Public Class Form1
        Dim f1 As Integer = 0
        Dim lp(100, 20) As Point
        Dim lf As Boolean
        Dim ln(100) As Integer
        Dim lleft As Boolean
        Dim cp1(100) As Point
        Dim cp2(100) As Point
        Dim cr(100) As Single
        Dim cf As Boolean
        Dim rp1(100) As Point
        Dim rp2(100) As Point
        Dim rf As Boolean
        Dim l As Integer
        Dim c As Integer
    Dim r As Integer
        Dim Pencolor As Color
        Dim lc(100) As Color
        Dim cc(100) As Color
    Dim rc(100) As Color
    --------------------------------------------------------------------------------------------
        Private Sub Init()
            Dim i, j As Integer
            For i = 0 To 100
                ln(i) = 0
            Next
            lf = True
            lleft = True
            cf = True
            rf = True
            l = 0
            c = 0
            r = 0
        End Sub
    --------------------------------------------------------------------------------------------
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            P.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
            P.Dock = DockStyle.Fill
            P.BackColor = Color.White
            GroupBox1.Dock = DockStyle.Right '该控件停靠在其包含控件的右边缘
            lRed.Text = "R"
            lRed.BackColor = Color.Red '获取控件的背景颜色为红色
            lGreen.Text = "G"
            lGreen.BackColor = Color.Green '获取控件的背景颜色为绿色
            lBlue.Text = "B"
            lBlue.BackColor = Color.Blue   '获取控件的背景颜色为蓝色
            pColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
            pColor.BackColor = Color.Black
            trRed.Maximum = 255
            trRed.Minimum = 0
            trRed.LargeChange = 17
            trRed.SmallChange = 1
            trRed.TickFrequency = 17
            trRed.TickStyle = TickStyle.BottomRight '刻度线位于水平控件的底部或者垂直控件的右部
            trRed.Value = 0  '刚开始设置为0
            trGreen.Maximum = 255
            trGreen.Minimum = 0
            trGreen.LargeChange = 17
            trGreen.SmallChange = 1
            trGreen.TickFrequency = 17
            trGreen.TickStyle = TickStyle.BottomRight
            trGreen.Value = 0 '刚开始设置为0
            trBlue.Maximum = 255
            trBlue.Minimum = 0
            trBlue.LargeChange = 17
            trBlue.SmallChange = 1
            trBlue.TickFrequency = 17
            trBlue.TickStyle = TickStyle.BottomRight
            trBlue.Value = 0 '刚开始设置为0
            Init()
            Pencolor = Color.Black
        End Sub
    --------------------------------------------------------------------------------------------
        Private Sub mLine_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mLine.Click
            f1 = 1
        End Sub
    --------------------------------------------------------------------------------------------
        Private Sub mCircle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mCircle.Click
            f1 = 2
        End Sub
    --------------------------------------------------------------------------------------------
        Private Sub mRectangle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mRectangle.Click
            f1 = 3
        End Sub
    --------------------------------------------------------------------------------------------
        Private Sub mClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mClear.Click
            f1 = 4
            P.Invalidate()
            Init()
        End Sub
    --------------------------------------------------------------------------------------------
        Private Sub P_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles P.MouseDown
           Select Case f1
                Case 1
                    If e.Button = MouseButtons.Left Then
                        If lf Then
                            lc(l) = Pencolor
                            lp(l, ln(l)) = New Point(e.X, e.Y)
                            lf = False
                        ElseIf Not lf Then
                            ln(l) = ln(l) + 1
                        End If
                    ElseIf e.Button = MouseButtons.Right Then
                        lleft = False
                        P.Invalidate()
                    End If
                Case 2
                    If cf Then
                        cc(c) = Pencolor
                        cp1(c) = New Point(e.X, e.Y)
                        cf = False
                    ElseIf Not cf Then
                        cf = True
                        P.Invalidate()
                    End If
                Case 3
                    If rf Then
                        rc(r) = Pencolor
                        rp1(r) = New Point(e.X, e.Y)
                        rf = False
                    ElseIf Not rf Then
                        rf = True
                        P.Invalidate()
                    End If
            End Select
        End Sub
    --------------------------------------------------------------------------------------------
        Private Sub P_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles P.MouseMove
            Select Case f1
                Case 1
                    If lleft Then
                        If Not lf Then
                            lp(l, ln(l) + 1) = New Point(e.X, e.Y)
                            P.Invalidate()
                        End If
                    End If
                Case 2
                    If Not cf Then
                        cp2(c) = New Point(e.X, e.Y)
                        P.Invalidate()
                    End If
                Case 3
                    If Not rf Then
                        rp2(r) = New Point(e.X, e.Y)
                        P.Invalidate()
                    End If
            End Select
        End Sub
    --------------------------------------------------------------------------------------------
        Private Sub P_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles P.Paint
            Dim rect1 As Rectangle
            Dim rect2 As Rectangle
            Dim i, j As Integer
            Dim g As Graphics = e.Graphics
            g.SmoothingMode = SmoothingMode.AntiAlias
            If l > 0 Then
                For i = 0 To l - 1
                    For j = 0 To ln(i) - 1
                        g.DrawLine(Pens.White, lp(i, j), lp(i, j + 1))
                        g.DrawLine(New Pen(lc(i), 3), lp(i, j), lp(i, j + 1))
                    Next
                Next
            End If
            If c > 0 Then
                For i = 0 To c - 1
                    rect1 = New Rectangle(cp1(i).X - cr(i), cp1(i).Y - cr(i), cr(i) * 2, cr(i) * 2)
                    rect2 = New Rectangle(cp1(i).X - cr(i), cp1(i).Y - cr(i), cr(i) * 2, cr(i) * 2)
                    g.DrawEllipse(Pens.White, rect1)
                    g.DrawEllipse(New Pen(cc(i), 3), rect2)
                Next
            End If
            If r > 0 Then
                For i = 0 To r - 1
                    rect1 = New Rectangle(Min(rp1(i).X, rp2(i).X), Min(rp1(i).Y, rp2(i).Y), Abs(rp1(i).X - rp2(i).X), Abs(rp1(i).Y - rp2(i).Y))
                    rect2 = New Rectangle(Min(rp1(i).X, rp2(i).X), Min(rp1(i).Y, rp2(i).Y), Abs(rp1(i).X - rp2(i).X), Abs(rp1(i).Y - rp2(i).Y))
                    g.DrawRectangle(Pens.White, rect1)
                    g.DrawRectangle(New Pen(rc(i), 3), rect2)
                Next
            End If
            Select Case f1
                Case 1
                    If ln(l) >= 1 Then
                        For j = 0 To ln(l) - 1
                            g.DrawLine(Pens.White, lp(i, j), lp(i, j + 1))
                            g.DrawLine(New Pen(lc(l), 3), lp(i, j), lp(i, j + 1))
                        Next
                    End If
                    If lleft Then
                        If Not lf Then
                            g.DrawLine(Pens.White, lp(l, ln(l)), lp(l, ln(l) + 1))
                            g.DrawLine(New Pen(lc(l), 3), lp(l, ln(l)), lp(l, ln(l) + 1))
                        End If
                    Else
                        If ln(l) > 0 Then
                            l = l + 1
                        End If
                        lf = True
                        lleft = True
                    End If
                Case 2
                    If Not cf Then
                        cr(c) = Sqrt((cp2(c).X - cp1(c).X) * (cp2(c).X - cp1(c).X) + (cp2(c).Y - cp1(c).Y) * (cp2(c).Y - cp1(c).Y))
                    rect1 = New Rectangle(cp1(c).X - cr(c), cp1(c).Y - cr(c), cr(c) * 2, cr(c) * 2)
                    rect2 = New Rectangle(cp1(c).X - cr(c), cp1(c).Y - cr(c), cr(c) * 2, cr(c) * 2)
                        g.DrawLine(Pens.White, cp1(c), cp2(c))
                        g.DrawLine(New Pen(cc(c), 3), cp1(c), cp2(c))
                        g.DrawLine(Pens.Black, cp1(c), cp2(c))
                        g.DrawEllipse(Pens.White, rect1)
                        g.DrawEllipse(New Pen(cc(c), 3), rect2)
                    Else
                        cr(c) = Sqrt((cp2(c).X - cp1(c).X) * (cp2(c).X - cp1(c).X) + (cp2(c).Y - cp1(c).Y) * (cp2(c).Y - cp1(c).Y))
                    rect1 = New Rectangle(cp1(c).X - cr(c), cp1(c).Y - cr(c), cr(c) * 2, cr(c) * 2)
                    rect2 = New Rectangle(cp1(c).X - cr(c), cp1(c).Y - cr(c), cr(c) * 2, cr(c) * 2)
                        g.DrawEllipse(Pens.White, rect1)
                        g.DrawEllipse(New Pen(cc(c), 3), rect2)
                        c = c + 1
                    End If
                Case 3
                    If Not rf Then
                        g.DrawLine(Pens.White, cp1(r), cp2(r))
                        g.DrawLine(Pens.Black, cp1(r), cp2(r))
                        rect1 = New Rectangle(Min(rp1(r).X, rp2(r).X), Min(rp1(r).Y, rp2(r).Y), Abs(rp1(r).X - rp2(r).X), Abs(rp1(r).Y - rp2(r).Y))
                        rect2 = New Rectangle(Min(rp1(r).X, rp2(r).X), Min(rp1(r).Y, rp2(r).Y), Abs(rp1(r).X - rp2(r).X), Abs(rp1(r).Y - rp2(r).Y))
                        g.DrawRectangle(Pens.White, rect1)
                        g.DrawRectangle(New Pen(rc(r), 3), rect2)
                    Else
                        rect1 = New Rectangle(Min(rp1(r).X, rp2(r).X), Min(rp1(r).Y, rp2(r).Y), Abs(rp1(r).X - rp2(r).X), Abs(rp1(r).Y - rp2(r).Y))
                        rect2 = New Rectangle(Min(rp1(r).X, rp2(r).X), Min(rp1(r).Y, rp2(r).Y), Abs(rp1(r).X - rp2(r).X), Abs(rp1(r).Y - rp2(r).Y))
                        g.DrawRectangle(Pens.White, rect1)
                        g.DrawRectangle(New Pen(rc(r), 3), rect2)
                        r = r + 1
                    End If
                Case 4
                    g.FillRectangle(Brushes.White, P.ClientRectangle)
                    f1 = 0
            End Select
    --------------------------------------------------------------------------------------------
    Private Sub tr_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles trRed.Scroll, trGreen.Scroll, trBlue.Scroll
            Pencolor = Color.FromArgb(trRed.Value, trGreen.Value, trBlue.Value)
            pColor.BackColor = Pencolor
        End Sub
    End Class
    

    5 、程序运行

    刘一哥GIS:专注测绘地理信息教育,探索地理奥秘,分享GIS价值!

     

    展开全文
  • Git学习教程():Git工作流程

    千次阅读 2011-11-10 20:49:08
    一般来说,跟其他源码控制系统工作流程没什么两样,唯一一区别就是载入(stage)的过程。整个工作流程大致是这样(流程1): 远程仓库同步 修改文件 查看变更 载入变更 提交载入变更
    第三课   Git 工作流程
        与远程仓库同步,修改,载入(stage)和提交项目
     

    现在你已经有一个git本地仓库,一切都配置完毕。然后该怎么办?
    一般来说,跟其他的源码控制系统的工作流程没什么两样,唯一一个区别就是载入(stage)的过程。整个工作流程大致是这样(流程1):
    与远程仓库同步
    修改文件
    查看变更
    载入变更
    提交载入的变更
    重复
    上传

    这是最复杂的情况,如果你不与别人合作开发的话,就不需要上传到仓库中去(流程2):
    * 修改文件
    * 提交变更
    * 重复
    简单吧。要记得,git是分布式的,所以如果不是合作项目的话,实际上不需要提交到一个公共的共享服务器上--你可以像使用RCS一样,只用来追踪本地文件变更。下面,让我们先来看个简单的示例,紧接着再来看用git协作开发的实例。
    简单示例
    如果你想跟着做这个例子,请克隆这个项目:
    $ git clone git://github.com/schacon/simplegit
     

    例子开始,按照流程2,我们首先要修改README文件,将自己添加到项目作者中去。所以我们修改这个文件。然后我们希望提交这个变更,所以我们运行'git commit -a' 命令。 -a 的意思是告诉git先将变更了的文件先载入(stage),然后提交-我们后面会通过'staging area'命令实现,但是现在运行 'git commit -a' 命令,效果跟在SVN中使用'commit'命令一样。
    $ git commit -a
    执行完之后,一个提交信息的提示会出现在编辑器中(这里$EDITOR环境变量或'core.editor'这两个git配置变量的默认值都是vim)类似下面这样的内容:
    _
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch main
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    # modified:   README
    #                                                                     
    ~                                                                                     
    ~                                                                                     
    ".git/COMMIT_EDITMSG" 9L, 253C
    输入一些提交的信息,譬如"added myself to the README as an author"然后退出。
    vim操作提示:
    按下I,o,a进入编辑模式,编辑完毕按Esc,输入:wq保存退出。
    然后会看到这样的提示:

    [master]: created 5896d4d: "added myself to the README as an author"
     1 files changed, 2 insertions(+), 1 deletions(-)
     
    显示我们刚刚输入的提交信息,并且有一组关于这次提交项目中文件变更的统计数字。同时还给我们一个提交的校验和,'5896d4d',这个校验和可以用来日后确切的查看这次提交的细节。
    这就是简单用例。修改文件,'git commit -a',重复
    协作开发示例
    现在,我们来介绍一个复杂点的实例,这次我们使用远程仓库,将项目上传上去,从而跟其他的开发者一起协同工作。同时,我们会介绍staging area。
    如果你会从远程仓库中克隆项目,那么与远程仓库项目同步也是相当简单的--只需要执行'git pull'.如果是远程仓库项目没有变化,也就是说其他的开发者没有对项目进行变更,会显示这样的信息:
    Already up-to-date.
    相反,执行这条命令之后会将你上次同步之后远程仓库中的变更同步到本地项目中,并且git会合并这些新的变更:
    $ git pull
    Updating c264051..b04dc3d
    Fast forward
     lib/simplegit.rb |    4 ++++
     1 files changed, 4 insertions(+), 0 deletions(-)
    例子开始,重新克隆远程仓库中的项目,修改README文件和lib/simplegit.rb文件(不要执行git commit -a)。现在你可以使用'git status'命令来查看工作目录发生了什么变更:
    $ git status
    # On branch master
    # Changed but not updated:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    modified:   README
    modified:   lib/simplegit.rb
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    我们看到,有两个文件是在"changed but not updated"段落中出现 ,这意味着这两个文件还没有载入(unstaged). 如果现在我们提交,什么也不会发生。也就是说文件必须先载入(stage),然后才能提交。
    所以,我们先来载入(stage) 文件,git中使用'git add'命令不仅可以开始追逐文件而且可以对他们载入stage变更。所以让我们载入(stage) README文件的变更,然后再来查看一下状态。
    $ git add README
    $ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    # modified:   README
    #
    # Changed but not updated:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    modified:   lib/simplegit.rb
    现在'lib/simplegit.rb'文件还是未载入(unstaged), 但是README文件现在已经到了'changes to be committed'段落中-它几经载入(stage)了。现在如果我们运行提交命令(不要-a,这个会自动stage所有的东西),只有这个文件会被提交-而simplegit.rb依然是unstaged。这时,我们使用-m选项来执行'git commit',这样后面跟上字符串表示这次提交的信息。
    $ git commit -m 'updated the README'
    [master]: created 14bb3c6: "updated the README"
     1 files changed, 1 insertions(+), 2 deletions(-)
    如果现在再执行'git status',我们会看到stage之后的文件现在已经提交了,只剩下了unstaged的'simplegit.rb'文件。
    $ git status
    # On branch master
    # Your branch is ahead of 'origin/master' by 1 commit.
    #
    # Changed but not updated:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    modified:   lib/simplegit.rb
    #

    现在我们可以stage并且提交这个文件:
    $ git commit -a -m 'added a staging command to the library'
    [master]: created bbaee85: "added a staging command to the library"
     1 files changed, 4 insertions(+), 0 deletions(-)
    $ git status
    # On branch master
    # Your branch is ahead of 'origin/master' by 2 commits.
    #
    nothing to commit (working directory clean)
    现在我们已经将两次提交的变更都搞定了,而且加了提交信息,可以让我们的合作伙伴很容易理解我们做的变更。经过最后一次提交,我们看到'git status'执行之后显示我们的工作目录clean了(同时提示我们现在的分枝上有两个提交还没有上传)
    所以,现在我们将这些变更上传到服务器端与我们的合作伙伴分享,前提是我们有上传的权限,(如果没有上传的权限,我们可以在网络上创建一个自己的git仓库,将其上传),然后让朋友下载。
    运行'git push'会将我们的变更上传到服务器。
    $ git push
    Counting objects: 11, done.
    Compressing objects: 100% (6/6), done.
    Writing objects: 100% (7/7), 744 bytes, done.
    Total 7 (delta 3), reused 0 (delta 0)
    To git@github.com:schacon/simplegit.git
       b04dc3d..bbaee85  master -> master

    到目前为止,我们看到了新数据都已经上传完毕,服务器上的主分支也已经更新了。现在我们可以复习一下这整个的过程,让我们可以更加熟练的将git应用到我们的项目中去。

     

    转自http://fsjoy.blog.51cto.com/318484/244826


    展开全文
  • 前言不知道这个东西能否算是技术文章或者是教程这些是我在学习ASP.NET过程体会心得...废话不多说直接开始第一章 架构第一节 基本原理与三个支柱 我是从学习ASP转而学习ASP.NET,相信也不乏有许多像我这样的学
  • 你如何在三个月内获得三年工作经验   一篇很不错文章,它告诉我们,只要方法正确,3个月能做事很多,并且,最重要是:不仅要,而且要习,那样才能真正有用。转贴此文过来,供大家共同...
  • http://wiki.ros.org/cn/ROS/Tutorials/Recording%20and%20playing%20back%20data引言本节教程将描述如何录制ROS系统运行过程数据到一.bag文件中,然后通过回放该数据来重现之前运动过程。1.录制1.1 先决...
  • 今天分享老师相处一些经验跟技巧。非常重要,为什么?因为对我们学生来说我们在学校待时间有时候比在家里待时间还要多,我们一天大部分清醒时间都是在学校度过。那么在学校怎么跟老师、同学相处就...
  • 高人交心,轻松学习,把时间留给更重要人更重要事。精彩就点击右上角分享出去,赠人玫瑰手染余香。文末有打印资料方法往期回顾:五年级上册数学期末综合测试卷(附答案),可下载!五年级上册数学计算题训练...
  • 卷积神经网络教程学习资料整理

    千次阅读 2016-11-15 15:21:25
     自己学习卷积神经网络也有大半月了,现在想想整个过程还是很坎坷。其中一部分原因应该是自己比较依赖中文博客,倒不是因为写得不好,更多是因为内容不完整和系统化。就像如果我连卷积神经网络是维结构都...
  • MNIST是一入门级计算机视觉数据集,它包含...(你可能会觉得该几篇文档文字内容社区中给文档几乎一致,没错,不过我学习方法是理解社区中文档,读懂一句再复制一句过来。博客只是作为一学习整理。)...
  • 程序框图 算法表现形态不仅有自然语言,还有程序框图程序.用自然语言描述算法优点是通俗易懂,当算法中操作步骤都是顺序执行时比较容易理解.缺点是如果算法中包含判断和循环,并且操作步骤较多时,就不那么直观...
  • Ubuntu安装重装过程【学习记录】

    千次阅读 2018-01-29 15:56:37
    失败次,最后一次安装成功,故来记录安装过程,以便以后参考以及为有相同情况初学者提供思路。本文只记录分区和引导情况,其他可以参考网上教程。电脑为戴尔灵越系列,UEFI引导。 第一次安装: 分四区:/+/...
  • 3dsmax是Autodesk公司旗下Discreet子公司推出的面向个人用户电脑的三维动画制作软件新版3dmax8在用户界面建模特性材质特性动画特性高级灯光和渲染特性等几方面有了很大改进极大地提高了制作渲染输出过程的速度和...
  • 1, a 教学是 在国家教育目的规范下,由教师的教与学生的学共同组成一种活动,学生通过老师有计划地培养引导,掌握系统文化知识和技能,发展能力促进全面发展的过程 b,教学教育: 相互联系 又有区别,教育...
  • 把解九连环看成一个学习的过程刚开始是这样就像低年级孩子乖乖听老师上课面对简单问题(五连环)会轻易地解下三个环自作聪明小孩一个没注意问题变样了同样是解了三环还有两个环未解但就那么一瞬间他(她)就跟不...
  • 包含整个系统分析、设计全过程和配套源码,课程共55课时,从最初业务需求入手,一步步将整个系统设计过程进行实现,课程包括界面设计和代码编写等整个制作过程的完整录像,因此对于学习ASP.NET层架构和...
  • 数据收集和整理学习目标1.经历收集整理和分析数据的过程能根据实际情况对数据进行分类整理和统计2.能通过分类整理数据完成统计表并解决简单实际问题3.培养学习兴趣和他人合作意识先分组调查每月出
  • (点击上方公众号,可快速关注一起Python)作者:浪子燕青 链接:http://www.langzi.fun/Python面向对象编程.html面向对象编程和函数式编程(面向过程编程)都是程序设计方法,不过稍有区别。面向过程编程:1. 导入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 796
精华内容 318
关键字:

学与教的三个过程