开源许可证有上百种,这里说说最流行的六种:GPL、BSD、MIT、Mozilla、Apache和LGPL如何做选择,阮一峰在如何选择开源许可证一文中给出了一张图,直观精确,就是下图:
那么如何给自己的仓库加上LICENSE呢?很简单,点击仓库中的creat new file,然后写LICENSE.md,选择choose a license template
然后选择MIT License,再点击Review and Submit,最后点击commit change就可以了。
我们就可以在自己仓库中看到MIT协议了
6. 分支的使用
有人称分支是git的必杀技,正是因为这一特性,git从众多版本管理系统中脱颖而出。git鼓励多次使用分支和合并。精通分支,将对你的版本管理十分便捷和高效。进行分支之前,先讲git是如何保存数据的。
Note: 为了节省工作量,分支中有的图是截的书上的图,图中的校验和会与实际的校验和不同,这点注意一下就好。
6.1 git保存数据方式与分支简介与一些版本控制软件不同,Git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。如下图所示
在进行提交操作时,Git 会保存一个提交对象(commit object)。知道了 Git 保存数据的方式,我们可以很自然的想到,该提交对象会包含一个指向暂存内容快照的指针。但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。
首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象。
为了更加形象地说明,我们假设现在有一个工作目录,里面包含了三个将要被暂存和提交的文件(文件需要自己动手在playground目录新建)。暂存操作会为每一个文件计算校验和,然后会把当前版本的文件快照保存到Git仓库中(Git使用blob对象来保存它们),最终将校验和加入到暂存区域等待提交:
$ git add README test.rb LICENSE $ git commit -m 'branch note begin'现在,Git仓库中有五个对象(忽略dd文件夹):三个blob对象(保存着文件快照)、一个树对象(记录着目录结构和blob对象索引)以及一个提交对象(包含着指向前述树对象的指针和所有提交信息)。具体结构如下图:
做些修改后再次提交(两次): $ echo "print("1")" >> README $ git commit -am "add print("1") into README" warning: LF will be replaced by CRLF in README. The file will have its original line endings in your working directory. [master 326dd0b] add print(1) into README 1 file changed, 1 insertion(+) $ echo "print("2")" >> README $ git commit -am "add print("2") into README" warning: LF will be replaced by CRLF in README. The file will have its original line endings in your working directory. [master ebc9b45] add print(2) into README 1 file changed, 1 insertion(+)
两次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。见下图:
Git的分支,其实本质上仅仅是指向提交对象的可变指针。Git的默认分支名字是master。在多次提交操作之后,你其实已经有一个指向最后那个提交对象的master分支。它会在每次的提交操作中自动向前移动。