• Git与GitHub入门基础(一)


    Git的诞生

      很多人都知道,Linus在1991年创建了开源的Linux。从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了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可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

      历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

    Git安装

      最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。

    Linux上安装Git

      首先,你可以试着输入git,查看系统是否安过Git:

    1 $ git
    2 The program 'git' is currently not installed. You can install it by typing:
    3 sudo apt-get install git

      像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。如果用Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装。

      如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./configmakesudo make install这几个命令安装就好了。

    Windows上安装Git

      在Windows上使用Git,可以从Git官网下载安装程序,然后按默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

      安装完成后,还需要最后一步设置,在命令行输入:

    1 $ git config --global user.name "Your Name"
    2 $ git config --global user.email "email@example.com"

      因为Git是分布式版本控制系统,所以每个机器都必须自报家门:你的名字和Email地址。注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

    创建版本库

      什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

    1 $ mkdir learngit
    2 $ cd learngit
    3 $ pwd
    4 /Users/michael/learngit

      注意:如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。

      接下来,通过git init命令把这个目录变成Git可以管理的仓库:

    1 $ git init
    2 Initialized empty Git repository in /Users/michael/learngit/.git/

      这样Git就把仓库建好了,而且是一个空的仓库。可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,这个目录默认是隐藏的。没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。当然,不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。

    添加文件到版本库

      所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

      不幸的是,Microsoft的Word格式是二进制格式,因此版本控制系统是没法跟踪Word文件的改动的,如果要真正使用版本控制系统,就要以纯文本方式编写文件。因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码。建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

      使用Windows的Git时,应特别注意:

      千万不要使用Windows自带的记事本编辑任何文本文件!!原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题!比如,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议使用Notepad++代替记事本。记得把Notepad++的默认编码设置为UTF-8 without BOM即可。

      言归正传,现在我们编写一个sayHello.py文件,内容如下:

    1 def sayHello(name):
    2     print("Hi,", name)

      一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

      第一步,用命令git add告诉Git,把文件添加到仓库:

    1 $ git add sayHello.py

      执行上面的命令,没有任何显示,说明添加成功。

      第二步,用命令git commit告诉Git,把文件提交到仓库:

    1 $ git commit -m "creat sayHello.py file"
    2 [master (root-commit) eaadf4e] creat sayHello.py file
    3  1 file changed, 2 insertions(+)
    4  create mode 100644 sayHello.py

      简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

      参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  • 相关阅读:
    常见的设计模式:单例模式、工厂模式、观察者模式、装饰模式与适配器模式
    WCF、Web API、WCF REST、Web Service之区别
    Asp.Net Web API VS Asp.Net MVC
    sql server 2008 评估期已过期解决办法
    IIS6.0中布署MVC站点
    SQL Server类型与C#类型对应关系
    经纬度 lbs 笔记
    C#实现用Newtonsoft.Json 4.5.11解析人人网院校信息并获取院系信息
    当前上下文中不存在名称"Session"
    [ASP.NET]HttpCookieCollection to CookieCollection的最简单方法
  • 原文地址:https://www.cnblogs.com/zhangchao162/p/9567308.html
Copyright © 2020-2023  润新知