作者:Wenhu 博客:http:/// 本讲第一部分,介绍git的“足够你用”命令;本讲为第二部分,介绍github的主要用途以及如何在R中使用git,部分内容改编自廖雪峰的《Git教程》。
源代码:https://github.com/mckf111/mckf111.github.io/tree/master/_posts Github是啥这可绝对是个好东西啊,日前刚被微软收购,不知前景如何! 前面提到git的两大特点,版本控制相信大家看到这里,已经了然于胸了,而想要一窥分布式的威力,就不得不提到github这个“交友网站”啦! 分布式其实就是多个电脑上的版本库同时更新,都是最新版本,当有一处电脑上的版本库有改动时,通过推送,其他电脑都能接收到,这为下面讲的多人协作分支管理提供了基础,而github相当于一个始终处于开机状态的电脑,其他所有电脑可随时联网与它保持更新,获得最新版本。分布式与集中式有本质上的区别,具体解释请参考廖雪峰:集中式VS分布式。
配置你的github1. 注册账号:https://github.com/ 这个毫无难点,不用多说。 2. 创建SSH密钥。本地的git仓库和github上的仓库是通过SSH(secure shell)加密传输的,也就是你每次的版本同步更新,都要在验证密码正确的前提下进行: ssh-keygen -t rsa -C "your_own_email@example.com" 把email地址换成你自己常用的,执行完上述命令后,你主目录(~)中就会有.ssh 文件夹出现,里面包含两个文件:id_rsa 和id_rsa.pub ,前面是私钥,不可泄露,而后面的是公钥(public),这是要提交给github的。 3. 把id_rsa.pub 的内容提交给github进入.ssh 目录,提取公钥内容。 cd ~/.ssh
cat id_rsa.pub 将屏幕上的内容全部复制下来,再来到你的github主页:Settings - SSH and GPG keys - New SSH key - 取个title,”my_computer”之类的,然后把刚才复制的内容全部粘贴到下面的key 框框中 - Add SSH key ,至此,你的电脑本地仓库就和github配置好了安全连接。 远程库github最重要的作用就是为你的本地项目提供一个云端同步更新的仓库,让你走到哪都能随意撸代码,无需担心版本问题,同时,如果有多人参与你的项目,你的合作者也能随时看到最新的版本状态,和你电脑上的版本库保持同步更新。 创建远程库在你的github主页右上角可以看到一个+ ,点开后,点击New repository ,进入创建远程库的初始界面,在Repository name 里填上你的仓库名称,本例中应填上myapp ,其他的不用管,直接点击最下方的绿色按钮Create repository 。 当然,你可以使用网页中的按扭来添加代码和文件,但我们更多的是在本地进行编辑和添加操作。命令行模式编辑一个仓库,注意修改github的用户名为自己账号名称(非邮箱地址,每个github有一个用户名作为唯一地址,全球唯一),如下文中的YongXinliu : 此处将用户名赋与变量,只需修改一次即可 username=YongxinLiu
克隆远程库(git clone )如果你的同事对版本做了修改,并且推送到了远程库,但你还没有更新,或者对github上别人的开源项目感兴趣,想弄到本地来研究研究,这时你就需要把远程库先给克隆到本地上来。 也是一个命令全搞定: git clone git@github.com:${username}/myapp.git
其中,你所需要修改的就是:${username} 改为你想克隆的仓库的创建者,myapp 改为仓库名称,其他不用动,注意,其中的: 后面没有空格,不可习惯性的加上一个,否则报错!如果报错了,出了问题,请学会google和求助stackoverflow,这是必备技能,meta-knowledge! 编辑库# 进入工作目录
cd myapp
# 编辑文件
vim README.md
# 添加修改版本
git add .
git commit -m "modi readme" 推送修改至github(git push )我们要关注的是第二条:”…or push an existing repository from the command line”,把提示的命令输入到git bash中 (注意,此时你的工作目录必须在myapp/ 中): git push origin master
#Counting objects: 3, done.
#Writing objects: 100% (3/3), 279 bytes | 279.00 KiB/s, done.
#Total 3 (delta 0), reused 0 (delta 0)
#To github.com:YongxinLiu/myapp.git
# 3cdfcb3..9007fb7 master -> master
#Branch 'master' set up to track remote branch 'master' from 'origin'. 以后,在你想要把本地的commit 推送到远程库时,只需记住这一个命令:git push origin master ,其中origin 是远程库的名字,而master 则是主分支的名字。 这时,你再刷新一下github的myapp 页面,你会发现库中的内容和你本地一模一样了。 注意:第一次push的时候,会有警告出现,输入yes即可,不用害怕~
分支管理之前我们所有的操作都是在master 主分支中进行,但我们会经常有个新想法,想试验一下,写了几个文件,但又不想影响主分支,或者影响同伴的工作,怎么办?最好的就是,从master 上叉出一条次分支,与master 互不干扰,等到自己的开发成熟了,并且与同伴沟通好了,再把次分支合并到主分支上。这是git的最大特色了! 创建及查看分支(git branch )在本例中,我们创建一个开发分支dev elopment: git branch dev 我们再看下目前有哪些分支: git branch## dev## * master 结果提示我们目前有dev 和master 两个分支,前面带* 号的表明当前所处分支。 切换分支(git checkout )我们换到dev 分支去看看: git checkout dev## Switched to branch 'dev'git status## On branch dev## nothing to commit, working tree clean 切换成功,现在你可以在dev 分支上做各种改动,但都不会丝毫影响到master 分支。 合并分支(git merge )当你对新开发的特性很满意之后,想要把dev 的改动全部合并到master ,可以用git merge BRANCHNAME 命令,首先要先切换到master 分支: git checkout master## Switched to branch 'master'## Your branch is up-to-date with 'origin/master'.git merge dev## Already up-to-date. 删除分支(git branch -d )如果你不想要dev 分支了: git branch -d dev## Deleted branch dev (was 7dcb016). 玩点花样有木有觉得前面的指令打起来会经常敲错字母,比如我老是将git checkout 打成git chekout ,能否有简化一点的办法呢?必须有!别名(alias)! git config --global alias.co checkout 输入上面指令之后,你每次就不用输入git checkout 了,只需git co 即可,爽不爽?那就继续多改几个吧: git config --global alias.st status
git config --global alias.cm commit
git config --global alias.br branch 当然,你也可以指定你喜欢的别名,不一定要和我一样。最后,再来个猛的,从廖老师那里学到的: 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 lg 试试看,好了,git的基本常用指令和github的简要介绍就到这里了,下面稍微提一下在R中如何玩git。 Rstudio的git工具以上的知识,可以让你轻松管理你编辑的R代码,备份,版本管理。但Rstudio集成使用会有更直观的查看版本代码的修改。 相信很多Rer都是用Rstudio来写R和运行R的,Rstudio本身也集成了git的功能,并且做成了图形化界面,方便一些不习惯git bash的朋友,点点鼠标,就能完成版本控制!具体的用法,由于篇幅所限,就不展开说了,有兴趣的同学可以参考R packages: Git and Github http://r-pkgs./git.html ,里面的介绍非常简洁易懂,半小时就能搞定,自主学习吧~ 关注我的最新博文,请访问 http://
Reference廖雪峰的《Git教程》https://www./wiki/0013739516305929606dd18361248578c67b8067c8c017b000 学R学初阶-03-R-Git和Github-2 http:///2018/06/15/%E5%AD%A6R%E5%AD%A6%E5%88%9D%E9%98%B6-03-R-Git%E5%92%8CGithub2/
|