git学习笔记3

git学习笔记3


  1. GitHub的使用

    • 我们一直用GitHub作为免费的远程仓库,其实GitHub还是一个开源协作社区。
    • 如何开源一个项目呢?这里一bootstrap项目为例,可以先访问它的项目主页https://github.com/twbs/bootstrap,点Fork 就在自己账号下克隆了一个bootstrap仓库,然后从自己的账号下clone
      git clone [email protected]:michaelliao/bootstrap.git
    • 一定要从自己的账号下clone仓库,这样才能推送修改,如果从bootstrap的作者的仓库地址[email protected]:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。
    • 如果你修复了bootstrap的一个BUG,或者新增了一个功能,并且希望bootstrap的官方库能接收你的修改,你就可以在GitHub上发起一个 pull request.
    • 小结
      • 在GitHub上,可以任意Fork开原仓库
      • 自己拥有Fork后的仓库的读写权限
      • 可以推送 pull request给官方仓库来贡献代码
  2. 码云的使用

    • 由于GitHub是国外的网站,我们会遇到访问速度慢甚至无法访问的情况,所以我们可以使用国内的Git托管服务–码云
    • 码云也提供了免费的Git仓库,此外,还集成了代码质量检测,项目演示等功能,对于团队协作开发,码云还提供了项目管理,代码托管,文档管理的服务,5人以下小团队免费。
    • 码云的使用和GitHub类似,在码云上注册并登陆后。需要先上传自己的SSH公钥。选择右上角用户头像 -> 菜单“修改资料”,然后选择“SSH公钥”,填写一个标题,然后把用户主目录下的.ssh/id_rsa.pub文件的内容粘贴进去。添加完成后点击确定即可完成并看到刚才添加的KEY:
      git学习笔记3
    • 如果我们已经有了一个本地的git仓库(例如一我们之前的learngit的本地库),如何把它关联到码云的远程库上呢
      • 首先,在码云上创建一个新项目,选择右上角用户头像 -> 菜单“控制面板”,然后点击“创建项目”(项目名称最好与本地库保持一致)
      • 然后,我们在本地库上使用命令 git remote add 把它和码云的远程库关联:
        git remote add origin [email protected]:hzq137cjh/learngit.git
      • 之后,就可以正常地用git pushgit pull推送了!
      • 如果在使用命令git remote add时报错:
        git remote add origin [email protected]:hzq137cjh/learngit.git
        fatal: remote origin already exists.
        这说明本地库已经关联了一个名叫origin的远程库,此时,可以先用 git remote -v 查看远程库信息:
        git remote -v
        origin [email protected]:hzq137cjh/learngit.git (push)
        可以看到,本地库已经关联了origin的远程库,并且,该远程库指向GitHub。
      • 我们可以删除已有的GitHub远程库:
        git remote rm origin
        再关联码云的远程库(注意路径中需要填写正确的用户名):
        git remote add origin [email protected]:hzq137cjh/learngit.git
        此时,我们再查看远程库信息:
        git remote -v
        origin [email protected]:liaoxuefeng/learngit.git (push)
        现在可以看到,origin已经被关联到码云的远程库了。通过 git push 命令就可以把本地库推送到Gitee(码云)上。
    • 那么一个本地库能不能既关联GitHub,又关联码云呢?答案是可以的,因为Git本身是一个分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。
      使用多个远程库时,git给远程库起默认名称室origin,如果有多个库,我们需要用不同的名称来标识不同的远程库。
    • 仍然以learngit 本地库为例,先删除已关联的名称origin远程库:
      git remote rm origin
      然后,先关联GitHub的远程库:
      git remote add github [email protected]:hou137cjh/learngit.git
      注意,远程库的名称叫github,不再叫origin
      接着,再关联码云的远程库:
      git remote add gitee [email protected]:hzq137cjh/learngit.git
      同样的,远程库的名称叫gitee,而不是origin
      现在,我们用 git remote -v 查看远程库的信息可以看到两个远程库:
      git学习笔记3
    • 如果要推送到GitHub,使用命令:
      git push giuhub master
    • 如果要推送到码云,使用命令:
      git push gitee master
    • 这样一来,我们的本地库就可以同时与多个远程库互相同步
    • 码云同样也提供了PULL request功能,可以让其他小伙伴参与到开源项目中来。
  3. 自定义Git

    • 让Git 显示颜色,会让命令输出看起来更新慕:
      git config --global color.ui true
      这样Git会适当地显示不同的颜色
  4. 忽略特殊文件

    • 有些时候,必须要把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件。针对这个问题,Git提供的解决办法是在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件,不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有的配置文件可直接在线浏览:https://github.com/github/gitignore
    • 忽略文件的原则是:

      • 忽略操作系统自动生成的文件,比如缩略图等;
      • 忽略编译生成的中间文件,可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如java文件编译后产生的.class文件;
      • 忽略自己的带有敏感信息的文件,比如存放口令的配置文件。
    • 配置好忽略的文件类型后,把.gitignore 也提交到Git,就完成了,当然检验.gitignore的标准是git status 命令是不是说 working directiry clean

    • 有时候,想添加一个文件到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
      上述情况就是.gitignore的第三行规则忽略了该文件,于是我们就可以知道应该修订哪个规则
    • 小结
      • 忽略某些文件时,需要编写.gitignore
      • .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理
  5. 配置别名

    • 经常敲错命令怎么办,比如 git status,这个status这个单词不好记,如果敲git st 就表示 git status就简单多了。为了达到这种目的,我们只需要敲一行命令,告诉Git,以后 st就表示 status:
      git config --global alias.st ststus ,看看效果:
      git学习笔记3
    • 当然还有很多别的命令可以简写,很多人都用co 表示 checkout,ci表示commit,br表示branch:
      git config --global alias.co checkout
      git config --global alisa.ci commit
      git config --global alisa.br branch
    • --global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用
    • 在撤销修改那一部分中,我们学习到了命令 git reset HEAD file 可以吧暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage别名:
      git config --global alisa.unstage 'reset HEAD'
      当敲入命令
      git unstage test.py
      实际上执行的是:
      git reset HEAD test.py
    • 配置文件,配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
    • 配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中