github 是最大的开源项目托管平台,是一个网站。但是它不仅仅只能托管开源项目或代码,还能作为我们备份重要资料的平台,更重要的是我们可以通过这个平台来学习和获取别人的代码,避免重复造轮子,还可以多人协同工作。git 的命令行还在学习中,我使用的是 windows 系统,使用 github for windows 就能处理我们日常生活中的大部分备份需求和其它事务处理。
使用 github for windows
一、准备
step 1: 注册 github 账号
打开 github 官网 https://github.com,依次填写用户名、邮箱地址、密码
step 2: 下载和安装 github for windows 客户端
下载客户端 https://git-scm.com/downloads,会先下载一个可执行文件,然后选择可执行文件继续下载,可能下载多次都不成功,毕竟是国外的服务器,不稳定和速度慢是正常的,多试几次就好了。安装完成后在桌面有这样的图标:
二、备份
step 1: 创建新仓库
去 github 官网创建新仓库。github 上每一个人的项目都是一个仓库(repository)。每个人账号下的仓库名不重名就行,即便是和别人的仓库重名了也无所谓。下面以我跑步记录的数据为例说明接下来的步骤。
登录成功后,可以看到我们的用户名:
创建新仓库:
step 2: 启动客户端,登录账号
启动 github for windows 客户端,并登录账号:
保存后,就选择好了项目拥有者和项目提交者。接下来我们可以克隆项目到本地了,在本地借用我们熟悉的编辑工具干活,以便后面备份到 github 网站。
step 3: 克隆项目
将新创建的仓库到本地:
点击"Open in Desktop"将启动客户端,然后我们选择在本地保存的路径,选择好后,就开始克隆了:
克隆好后,在我们选择的路径下将会增加 readme 文件和 .git 文件夹:
step 4: 处理(增删改)本地文件
在本地新增一个文件----跑步详情.xlsx,填写跑步详情,完成后保存。这样一个过程就完成了本地文件的一次修改。
step 5: 将文件提交到暂存区
在工作区完成操作后,我们需要将文件提交到暂存区:
在 changes 栏目下,可以看到我们更改的文件,无论是新增、修改、删除都有痕迹可寻。选择需要的文件提交到暂存区。如果发现改错了,后悔提交了,可以执行"Undo"操作,此次提交作废,继续在本地更改文件到满意为止:
step 6: 将文件同步到 github
只有将文件同步到 github 上之后,别人才能看到这个文件,以便于加入修改,fork 仓库提供意见,pull request(拉取请求) 并且 merge(合并)等等。点击"Sync"进行同步。
至此,我们的文件备份工作完成。后面操作最多的便是重复修改和增加文件了,重复备份操作 step 4 - step 6 即可完成。
step 7: 重复备份工作
重复备份工作,为分支叙述做准备。在本地 running 文件夹下新增一个文本文档----跑步术语.txt,如下:
然后提交、同步到 github 上。
三、分支
1. 创建新分支
假设一个场景,上面的跑步术语我像积累英语单词一样每天都新增几条。但是后面我发现对于配速的解释不够明确,我想要加一些解释性的例子。现在我就可以新建一个分支来加解释说明。创建 example 分支:
在配速术语后增加例子说明:
2. 提交当前分支
提交当前分支,并且将其同步到 github 上。
3. 合并两个分支
合并两个分支有两个方法:
(1). 通过 github 网站来合并(推荐):
这种方法更简单些,也更容易理解。同步 example 分支到 github 网站上后,在网站上可以看到提示"有新增的分支可作比较和拉取需求":
点击"Compare & pull request"去选择 Compare 对象,然后 Create pull request:
如果 base 分支和 compare 分支选择错误了,可手动选择。选择 Create pull request 将 example 分支的内容"拉"到 master 分支中。然后合并分支:
至此我们的分支合并操作完成。可以从 github 网站上看到 master 分支里的内容:
说明合并成功了,那么 example 这个分支也就不需要了,它的任务完成了,可以删除了:
点击"2 branchs"可显示具体分支,并操作分支:
然后"2 branchs"就变成了"1 branch",删除分支成功。
(2). 通过 github for windows 客户端来合并
新建一个分支 example2 来演示通过github for windows 客户端来合并分支操作。新建分支,修改本地文件,提交,发布等操作同"通过网站操作"相同,客户端的分支将呈现如下:
需要改变当前分支,example2-->master,然后把用于比较的分支变成 example2,master-->example2:
然后点击"Update from example2",从历史记录里可以看到"merge"字样,说明已经合并了:
最后点击"Sync"将合并同步到 github 上。
删除 example2 分支,删除分支也可以在客户端完成:
四、fork
有这样一个场景,别人看到我的跑步术语某一条描述不正确,他想改一下。于是我可以把他加入到贡献者中,我们愉快的合作,但是这样太危险了吧,我们都不认识,他改错了怎么办?我觉得他改之前我们可以交流一下,我也可以检查一下他的更改,再决定要不要采用他的更改。现在就可以用到 fork 了,我的理解 fork = clone + update + sync(commit) + merge(pull request) 。
1. clone
同学 A(lixinjie1992) 登录他的账号,看到了我的跑步术语,觉得好奇,打开一看认为某处需要改一下。于是他 fork 一下,clone 到自己的账户中:
点击 fork,就 clone 了一份仓库到自己的账户下:
如果改动较小,就是纯文本编辑的话,就直接在 github 网站上编辑更快:
2. update
点击要修改的文件,进入文本编辑器修改,然后填写修改说明,再提交:
3. commit
4. pull request拉取一次请求:
与上一次改变前作比较:
Create pull request,等待仓库拥有者回复:
过了一段时间,同学 B 发现了 pull request 这里有一条消息:
点击查看,然后点击改变的文件,可选择合并且给同学 A 留言感谢他,或者不合并且给他留言指明不合并理由:
最后"confirm merge"确认合并。
如果是改动比较大的话,就需要将项目 clone 到自己的电脑里,在工作区修改好后 commit(提交),sync(同步),然后(pull request)。剩余步骤与上面类似。
五、多人协同工作
将其他人的账户添加进 collaborators,就可以进行协作了。以同学 B 的 running 为例,添加同学 A,用来多人协作工作:
running-->contributor-->settings-->collaborators:
添加进 collaborators 后,最大的区别就是,不用再经过同学 B 同意了,同学 A 就可以直接参与修改 running 和 merge 工作。