美文网首页Git
使用GitHub

使用GitHub

作者: 归云丶 | 来源:发表于2017-04-03 22:10 被阅读15次

    我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的。其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人的开源项目。

    在GitHub出现以前,开源项目开源容易,但让广大人民群众参与进来比较困难,因为要参与,就要提交代码,而给每个想提交代码的群众都开一个账号那是不现实的,因此,群众也仅限于报个bug,即使能改掉bug,也只能把diff文件用邮件发过去,很不方便。

    但是在GitHub上,利用Git极其强大的克隆和分支功能,广大人民群众真正可以第一次自由参与各种开源项目了。

    如何参与一个开源项目呢?比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页https://github.com/twbs/bootstrap,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone:

    git clone git@github.com:michaelliao/bootstrap.git
    

    一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。

    Bootstrap的官方仓库twbs/bootstrap、你在GitHub上克隆的仓库my/bootstrap,以及你自己克隆到本地电脑的仓库,他们的关系就像下图显示的那样:

    如果你想修复bootstrap的一个bug,或者新增一个功能,立刻就可以开始干活,干完后,往自己的仓库推送。

    如果你没能力修改bootstrap,但又想要试一把pull request,那就Fork一下我的仓库:https://github.com/michaelliao/learngit,创建一个your-github-id.txt
    的文本文件,写点自己学习Git的心得,然后推送一个pull request给我,我会视心情而定是否接受。

    小结

    • 在GitHub上,可以任意Fork开源仓库;

    • 自己拥有Fork后的仓库的读写权限;

    • 可以推送pull request给官方仓库来贡献代码

    自定义Git


    在安装Git一节中,我们已经配置了user.nameuser.email,实际上,Git还有很多可配置项。

    比如,让Git显示颜色,会让命令输出看起来更醒目:

    $ git config --global color.ui true
    

    这样,Git会适当地显示不同的颜色,比如git status命令:


    文件名就会标上颜色。

    我们在后面还会介绍如何更好地配置Git,以便让你的工作更高效。

    忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定不爽。

    好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

    不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

    • 忽略文件的原则是:
    1. 忽略操作系统自动生成的文件,比如缩略图等;

    2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生
      成的文件就没必要放进版本库,比如Java编译产生的.class文件;

    3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

    举个例子:

    假设你在Windows下进行Python开发,Windows会自动在有图片的目录下生成隐藏的缩略图文件,如果有自定义目录,目录下就会有Desktop.ini文件,因此你需要忽略Windows自动生成的垃圾文件:

    # Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini
    

    然后,继续忽略Python编译产生的.pyc.pyodist等文件或目录:

    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
    

    加上你自己定义的文件,最终得到一个完整的.gitignore文件,内容如下:

    # Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini
    
    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
    
    # My configurations:
    db.ini
    deploy_key_rsa
    

    最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说working directory clean

    使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。

    有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:

    $ git add App.class
    The following paths are ignored by one of your .gitignore files:
    App.class
    Use -f if you really want to add them.
    

    如果你确实想添加该文件,可以用-f强制添加到Git:

    $ git add -f App.class
    

    或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:

    $ git check-ignore -v App.class
    .gitignore:3:*.class    App.class
    

    Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。

    小结

    • 忽略某些文件时,需要编写.gitignore

    • .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理

    配置别名

    有没有经常敲错命令?比如git statusstatus这个单词真心不好记。

    如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的。

    我们只需要敲一行命令,告诉Git,以后st就表示status

    $ git config --global alias.st status
    

    好了,现在敲git st看看效果。

    当然还有别的命令可以简写,很多人都用co表示checkoutci表示commitbr表示branch

    $ git config --global alias.co checkout
    $ git config --global alias.ci commit
    $ git config --global alias.br branch
    

    以后提交就可以简写成:

    $ git ci -m "bala bala bala..."
    

    --global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。

    在撤销修改一节中,我们知道,命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage别名:

    $ git config --global alias.unstage 'reset HEAD'
    

    当你敲入命令:

    $ git unstage test.py
    

    实际上Git执行的是:

    $ git reset HEAD test.py
    

    配置一个git last,让其显示最后一次提交信息:

    $ git config --global alias.last 'log -1'
    

    这样,用git last就能显示最近一次的提交:

    $ git last
    commit adca45d317e6d8a4b23f9811c3d7b7f0f180bfe2
    Merge: bd6ae48 291bea8
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Thu Aug 22 22:49:22 2013 +0800
    
        merge & fix hello.py
    

    甚至还有人丧心病狂地把lg配置成了:

    $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    
    效果图

    配置文件

    配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。

    配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:

    $ cat .git/config 
    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
    [remote "origin"]
        url = git@github.com:michaelliao/learngit.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    [alias]
        last = log -1
    

    别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。

    而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:

    $ cat .gitconfig
    [user]
            name = 9aoyang
            email = 9aoyang@gmail.com
    [color]
            ui = true
    [alias]
            st = status
            co = checkout
            ci = commit
            br = branch
            unstage = reset HEAD
            lg = log --color --graph --pretty=format:'%Cred%h%Creset -
    

    配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。

    小结

    给Git配置好别名,就可以输入命令时偷个懒。我们鼓励偷懒。

    搭建Git服务器

    搭建Git服务器

    期末总结

    终于到了期末总结的时刻了!

    经过几天的学习,相信你对Git已经初步掌握。一开始,可能觉得Git上手比较困难,尤其是已经熟悉SVN的童鞋,没关系,多操练几次,就会越用越顺手。

    Git虽然极其强大,命令繁多,但常用的就那么十来个,掌握好这十几个常用命令,你已经可以得心应手地使用Git了。
    友情附赠国外网友制作的Git Cheat Sheet,建议打印出来备用:
    Git Cheat Sheet

    现在告诉你Git的官方网站:http://git-scm.com,英文自我感觉不错的童鞋,可以经常去官网看看。什么,打不开网站?相信我,我给出的绝对是官网地址,而且,Git官网决没有那么容易宕机,可能是你的人品问题,赶紧面壁思过,好好想想原因。

    如果你学了Git后,工作效率大增,有更多的空闲时间健身看电影,那我的教学目标就达到了。

    谢谢观看!

    相关文章

      网友评论

        本文标题:使用GitHub

        本文链接:https://www.haomeiwen.com/subject/zzvoottx.html