Wenhu Next Generation Bioinformatician

03-R,Git和Github(下)

2018-06-15
Wenhu

本讲为第二部分,介绍github的主要用途以及如何在R中使用git,部分内容改编自廖雪峰的《Git教程》欢迎转载,但请注明出处!

Github是啥

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

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

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

配置你的github

1. 注册账号:

这个毫无难点,不用多说。

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

然后,你会看到如下界面:

…or create a new repository on the command line
echo "# myapp" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:mckf111/myapp.git
git push -u origin master

…or push an existing repository from the command line
git remote add origin git@github.com:mckf111/myapp.git
git push -u origin master

…or import code from another repository
You can initialize this repository with code from a Subversion, Mercurial, or TFS project.

推送远程库(git push)

我们要关注的是第二条:”…or push an existing repository from the command line”,把提示的命令输入到git bash中 (注意,此时你的工作目录必须在myapp/):

git remote add origin git@github.com:mckf111/myapp.git

git push -u origin master
## Counting objects: 12, done.
## Delta compression using up to 4 threads.
## Compressing objects: 100% (6/6), done.
## Writing objects: 100% (12/12), 1017 bytes | 0 bytes/s, done.
## Total 12 (delta 1), reused 0 (delta 0)
## remote: Resolving deltas: 100% (1/1), done.
## To github.com:mckf111/myapp.git
##  * [new branch]      master -> master
## Branch master set up to track remote branch master from origin.

以后,在你想要把本地的commit推送到远程库时,只需记住这一个命令:git push origin master,其中origin是远程库的名字,而master则是主分支的名字。

这时,你再刷新一下github的myapp页面,你会发现库中的内容和你本地一模一样了。

注意:第一次push的时候,会有警告出现,输入yes即可,不用害怕~

克隆远程库(git clone

如果你的同事对版本做了修改,并且推送到了远程库,但你还没有更新,或者对github上别人的开源项目感兴趣,想弄到本地来研究研究,这时你就需要把远程库先给克隆到本地上来。

也是一个命令全搞定: git clone git@github.com:USERNAME/REPO_NAME.git!

其中,你所需要修改的就是:USERNAME改为你想克隆的仓库的创建者,REPO_NAME改为仓库名称,其他不用动,注意,其中的:后面没有空格,不可习惯性的加上一个,否则报错!如果报错了,出了问题,请学会google和求助stackoverflow,这是必备技能,meta-knowledge!

分支管理

之前我们所有的操作都是在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工具

相信很多Rer都是用Rstudio来写R和运行R的,Rstudio本身也集成了git的功能,并且做成了图形化界面,方便一些不习惯git bash的朋友,点点鼠标,就能完成版本控制!具体的用法,由于篇幅所限,就不展开说了,有兴趣的同学可以参考R packages: Git and Github,里面的介绍非常简洁易懂,半小时就能搞定,自主学习吧~

关注我的最新博文,请订阅my RSS ~~


Similar Posts

评论 / Comments