Chapter 3 Git

本部分主要介绍Git。英文Git教程参见Get started with GitHub | Happy Git and GitHub for the useR

3.1 介绍:Project

创建Project是在使用R时基本功(想不通为啥各大教材和课都不先教create new project,以至于常年找不到文件在哪儿)。

NewProjectCreating

在Rtudio的右上角,点击后选择New Project可以创建新的Project。一般来说,在创建本地新项目时选择new directory就行(相当于创建一个新文件夹)你应该将同一个项目的数据、图片、代码等一系列文件都置于一个Project下。这样能减少数据和代码丢失的可能性,同时在导入数据和图片时,路径也能变短(Project下,默认路径为working directory)。

3.2 如何Clone他人公开的Github(读)

我们能在有读取权限的repo中找到对应的https链接。

Githttps

在创建New Project时选择Version ControlGit并复制Https以克隆其他人的repo。

3.3 如何创建一个自己的repo,并保持本地与Github的联动(单人版:写)

(假设你已经有了自己的Github账号,R和Rstudio)

我们需要完成自己的Rstudio与Github账号的联动工作,才能写入Github上的repo。这只需要设置一次,别担心。(英文教程

3.3.1 设置部分

3.3.1.1 得到Token

首先,在github中创建一个token以表明身份,按照步骤操作即可。Token类似于密码,需要小心保管。

3.3.1.2 在Rtudio中储存账号信息

现在,利用credentials包在R中储存Github账号信息。你需要将得到的Token输入到set_github_pat()

install.packages("credentials")

library(credentials)

set_github_pat("Your Token Here")

3.3.1.3 在Rstudio中查看账号信息

你可以利用gitcreds包查看储存的Github账号信息。

library(gitcreds)

gitcreds_set()

3.3.2 实现联动:Pull, Commit和Push

建议读者首先在Github中创建一个新repo,并利用3.2的方法将其克隆到本地文件中,然后再进行操作。(这相当于Git中的New Project, Github First。其他两种方式(将电脑中存在的project上传到Github中,将Github中已经存在的Project下载到电脑中)在happygitwithr有介绍。

本章节讲Pull(同步云端数据),Commit(确认本地更改),Push(更改云端数据)三个部分。

3.3.2.1 Pull:将Github中的repo读取并储存到本地

利用3.2中的方法,将自己的repo下载到本地。

3.3.2.2 Commit

git

在Rstudio的Git部分有Commit栏,点进去,它会显示本地数据与云端数据(Github上)的区别(图片左栏)。左上显示有变化的文件,下方逐栏说明区别。

你可以使用stage确认变化(打勾),或使用unstage撤销更改。

commit

在确认完更改后,你需要输入commit信息(一般而言是对更新的简要说明),并点击commit按钮确认更改

3.3.2.3 Push

点击绿色向上箭头按钮,将本地更改上传到Github

3.4 Git Family:如何实现与他人联动

上部分的单人Github使用相当于一个大型网盘,主要用来备份数据,部分时候可以给其他人文件读取权限以方便分享。本部分在单人Github基础上,说明如何多人在同一个repo上工作。

3.4.1 权限赋予:Github中的工作

在Github的settings–Manage access部分,邀请你的朋友作为collaborator,和你一起工作(注意,Collaborator才有写权限)。

3.4.2 Pull:养成习惯

在每次开始工作时,你需要先知道其他人对repo做了什么。一定要在每次工作前先将Github上的最新版本文件pull到本地中。

pull

3.4.3 Branch:避免Override

你可以和朋友们各自创建自己的Branch(详细原理可见happygitwithr)。这相当于各自在不同的工作线上工作(因此不会将文件更改上传到master上)。我们仅需要将自己Branch中完全确定需要同他人共享的部分上传到master上。

branch

3.4.4 Commit and Push

这与之前没有什么两样。