woodcorpse的个人博客分享 http://blog.sciencenet.cn/u/woodcorpse

博文

R,Git和Github(下)

已有 4193 次阅读 2018-6-18 12:15 |个人分类:Linux|系统分类:科研笔记

作者:Wenhu

博客:http://bioinfostar.com/

本讲第一部分,介绍git的“足够你用”命令;本讲为第二部分,介绍github的主要用途,包括版本管理、分枝管理等,以及推荐的在Rstudio中使用git的教程,部分内容改编自廖雪峰的《Git教程》欢迎转载,但请注明出处!

源代码:https://github.com/mckf111/mckf111.github.io/tree/master/_posts

Github是啥

这可绝对是个好东西啊,日前刚被微软收购,不知前景如何!

前面提到git的两大特点,版本控制相信大家看到这里,已经了然于胸了,而想要一窥分布式的威力,就不得不提到github这个“交友网站”啦!

分布式其实就是多个电脑上的版本库同时更新,都是最新版本,当有一处电脑上的版本库有改动时,通过推送,其他电脑都能接收到,这为下面讲的多人协作分支管理提供了基础,而github相当于一个始终处于开机状态的电脑,其他所有电脑可随时联网与它保持更新,获得最新版本。分布式集中式有本质上的区别,具体解释请参考廖雪峰:集中式VS分布式

配置你的github

1. 注册账号:

https://github.com/ 这个毫无难点,不用多说。

2. 创建SSH密钥。

本地的git仓库和github上的仓库是通过SSH(secure shell)加密传输的,也就是你每次的版本同步更新,都要在验证密码正确的前提下进行:

ssh-keygen -t rsa -C "your_own_email@example.com"

把email地址换成你自己常用的,执行完上述命令后,你主目录(~)中就会有.ssh文件夹出现,里面包含两个文件:id_rsaid_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

在本例中,我们创建一个开发分支development:

git branch dev

我们再看下目前有哪些分支:

git branch##   dev## * master

结果提示我们目前有devmaster两个分支,前面带*号的表明当前所处分支。

切换分支(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.had.co.nz/git.html ,里面的介绍非常简洁易懂,半小时就能搞定,自主学习吧~

关注我的最新博文,请访问 http://bioinfostar.com

Reference

  1. 廖雪峰的《Git教程》https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
  2. 学R学初阶-03-R-Git和Github-2 http://bioinfostar.com/2018/06/15/%E5%AD%A6R%E5%AD%A6%E5%88%9D%E9%98%B6-03-R-Git%E5%92%8CGithub2/

猜你喜欢

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外1700+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。
image

学习扩增子、宏基因组科研思路和分析实战,关注“宏基因组”
image
点击阅读原文,跳转最新文章目录阅读
https://mp.weixin.qq.com/s/5jQspEvH5_4Xmart22gjMA



https://blog.sciencenet.cn/blog-3334560-1119538.html

上一篇:R,Git和Github(上)
下一篇:易生信-扩增子教程01-背景介绍
收藏 IP: 124.166.232.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-23 22:06

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部