• GitHub 相关内容


    1. Git是分布式版本控制系统

    • 集中式版本控制系统:版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。(集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。)
    • 分布式版本控制系统:根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

    2. 创建版本库 ( creating the repository)

    • 版本库又名仓库(repository),你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

    • 所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
    $ mkdir learngit
    $ cd learngit
    $ pwd  注:pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit
    /Users/michael/learngit
    

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

    $ git init  注意:通过git init命令把这个目录变成Git可以管理的仓库
    Initialized empty Git repository in /Users/michael/learngit/.git/

        注意:瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

    3.  把文件添加到版本库

    • 注意:所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
    • 不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。

      因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持

    • 使用Windows的童鞋要特别注意

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

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

      
      
      Git is a version control system.
      Git is free software.

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

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

      $ git add readme.txt

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

      $ git commit -m "wrote a readme file"

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

    • 为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

      $ git add file1.txt
      $ git add file2.txt
      $ git add file3.txt
      $ git commit -m "add 3 files."

    4. 时光机穿梭

    • 我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容:
      Git is a distributed version control system.
      Git is free software.

      现在,运行git status命令看看结果:

    • $ git status
      # On branch master
      # Changes not staged for commit:
      #   (use "git add <file>..." to update what will be committed)
      #   (use "git checkout -- <file>..." to discard changes in working directory)
      #
      #    modified:   readme.txt
      #
      no changes added to commit (use "git add" and/or "git commit -a")

      git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改

      虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看

      $ git diff readme.txt 
      diff --git a/readme.txt b/readme.txt
      index 46d49bf..9247db6 100644
      --- a/readme.txt
      +++ b/readme.txt
      @@ -1,2 +1,2 @@
      -Git is a version control system.
      +Git is a distributed version control system.
       Git is free software.

      git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个“distributed”单词。

      知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add

      $ git add readme.txt

      同样没有任何输出。在执行第二步git commit之前,我们再运行git status看看当前仓库的状态:

      $ git status
      # On branch master
      # Changes to be committed:
      #   (use "git reset HEAD <file>..." to unstage)
      #
      #       modified:   readme.txt
      #

      git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

      $ git commit -m "add distributed"

      输出

      [master ea34578] add distributed
       1 file changed, 1 insertion(+), 1 deletion(-)

      提交后,我们再用git status命令看看仓库的当前状态:

      $ git status

      输出 

    • # On branch master
      nothing to commit (working directory clean)
      注:Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的。
  • 相关阅读:
    快速幂
    某年元宵节大礼包 矩阵快速幂
    HDU 3303 Harmony Forever 前缀和+树状数组||线段树
    HDU 4325 Flowers 树状数组+离散化
    11、【设计模式】构建器模式
    【基础】数据类型
    【Mybatis】Mybatis缓存
    【FTP】FTP(文件传输协议)工作原理(SFTP)
    Docker是什么
    【RabbitMQ】使用RabbitMQ实现延迟任务
  • 原文地址:https://www.cnblogs.com/assassin/p/4296374.html
Copyright © 2020-2023  润新知