GitHub 相关内容

系统 1722 0

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添加文件需要 add commit 一共两步呢?因为 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)的。

GitHub 相关内容


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论