为什么学它?
16号那天我原计划打算学习Rmarkdown的使用技巧,在查看相关资料过程中,学习到了版本控制的概念。于是顺延下去,就弄出了这个branch。Git是一款目前相当流行的分布式版本控制系统,GitHub则主要提供基于Git的版本控制服务,但GitHub远不止于Git,它已经成为目前最大的开源社区。一切只因一时兴起,其实也是因为当时没有紧急的事情要处理,才允许我这么做。一个原打算学习R的结果报告的人最后去折腾了GitHub,醉。
现实生活中,GitHub这套东西对于我来说,使用场景略小。我的设想,利用GitHub私人仓库配合Markdown,搭建写作环境。若有人能够一块协作配合,可生成另外的分支进行修订。当然,在我目前所处的环境下,估计也只是自娱自乐纯属瞎倒腾,纯属个人乐趣。接触Markdown也是一两个月的事情,如此钟爱它的原因在于,Markdown能够以最低的排版成本迅速的发布到各个平台,譬如微信公众号,个人博客等等,这些都是Word之类无法媲美的。
GitHub能干什么?
1.建立个人博客 借助GitHub Pages,我搭建了第一个属于自己的小站-Adobe 相关的教程网上一大堆,有机会我简单汇总下。流程基本过一遍,半个小时搞定,也能对Git有个大概的了解。
以任务为导向的学习,在入门阶段,效率最高。
2.学习优秀开源项目 GitHub上面集结了一大批大神,一大批神包,很好的学习交流平台。
3.团队协作 这也是最吸引我的地方所在了。不害臊地讲,我有一种团队协作的情结。尽管,目前有基于Google Docs的协作平台,有基于Dropbox的共享平台,但不该满足于此。
4.写作 GitHub 上所有关于项目的详细介绍以及Wiki都是基于Markdown的,它完美支持Markdown。配合版本控制,你还在担心一份文档,几十个修订版摆在桌面么?Gitbook也是目前很火的开源书籍写作平台。
5….
GitHub 几个概念
- Repository:仓库,即项目
- Issue:项目问题
- Star: 点赞
- Fork:分叉?即,你可以fork其他人的项目,然后进行改进
- Pull Request:发起请求,若通过,能把改进合并到原有项目
- Wacth: 关注,接受项目更新提醒
Git
前面一直提到Git。那Git是什么?具体概念我也背不下来,有兴趣自行google。简而言之,版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。我举一个超级简单的例子。
你写了一份文档(版本A),第二天你打开文档,就在原有文档直接修改生成版本B,第三天,你说,妈蛋,昨天我改了什么?你问我?我问谁呢?
如果文档恰好就在云备份软件文件夹下,那么兴许你能通过历史纪录回溯;但即使让你恢复了,你还是得去一行一行比对,查看修改了哪里。
这个时候你需要一套能够帮助你进行版本控制的系统。计算机技术的发展,于我而言,就是解放生产力,你不需要去担心版本的问题。这就好比,你不用担心文件丢失,Dropbox自动帮你备份,这就是我所理解的“自由”。 还是不够形象?上图。 这张图显示的是关于某一个文档某个版本所做的修改,用不同颜色清晰地指出了增删填补。是不是一目了然?
这就是最最吸引我的地方了。
操作
怎么安装,自己去折腾。 以下是一份我认为写的比较不错的入门系列,跟着他过一遍,能有个基本的框架。
从 0 开始学习 GitHub 系列之「初识 GitHub」
从 0 开始学习 GitHub 系列之「加入 GitHub」
从 0 开始学习 GitHub 系列之「向 GitHub 提交代码」
从 0 开始学习 GitHub 系列之「团队合作利器 Branch」
基本操作
mkdir test (创建文件夹test)
cd test (切换到test目录)
touch a.md (新建a.md文件)
git status
git init
git add a.md
git rm --cached 移除缓存。
git commit -m 'first commit'
git log
git branch a 新建a分支
git checkout a 切换到a分支
git merge a 合并a分支
git branch -d a 删除a分支
git branch -D 强制删除a分支。
git tag
git tag v1.0
git checkout v1.0
以上为最基本的Git操作,而且全是在本地环境进行操作的,完全没有涉及到远程仓库
远程仓库操作
git clone git@github.com:stormzhang/test.git
git remote add origin git@github.com:stormzhang/test.git
git remote -v
git pull origin master
git push origin master
git进阶
使用alias简化操作
git config --global alias.st status
git config --global alias.as add
git config --global alias.co commit
git config --global alias.br branch
git config --global alias.ch checkout
git config --global alias.t tag
git config --global alias.psm 'push origin master'
git config --global alias.plm 'pull origin master'
git config --global alias.lg "log --graph
--pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
Git Flow
Git Flow是一套比较成熟的分支管理流程。
学习资料
以下都是很不错的学习资料。
git - the simple guide - no deep shit!