《数据保护指南-下》——使用Git保护代码

Git介绍

  • Git是一个分布式版本控制系统,很多高级功能,团队协作中更是不可缺少它。实际上我们在这里使用Git的目的就是作为代码备份,操作是比较简单的,具体教程可以看廖雪峰的免费Git教程

  • 初始化完毕之后,一般都是三部曲:

# 从工作区添加到stage暂存区
git add .

# 从暂存区提交到当前分支
git commit -m "备注"

# 推送到远程仓库
git push
  • Git分为工作区和版本库两个区域,版本库里面又划分了一个暂存区的区域。

在这里插入图片描述

  • 每个Git的项目文件夹下,除了隐藏的.git文件夹,这个文件夹之外的其他区域都属于工作区。一般的工作流程:工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit)。

  • 首次新建的文件都是untracked状态(未跟踪),此时需要git add到暂存区,Git便会在暂存区中生成一个该文件的索引,文件此时处于uncommited状态,需要git commit生成版本库。添加到了版本库之后,再对文件进行修改,那么文件的状态会变为unstaged状态。

  • “所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。”

  • R语言中的数据RData也是二进制文件,所以也无法使用版本控制系统进行追踪。所以Rstudio生成的.gitignore文件默认也是忽略.RData文件的。

基本配置

下面演示一下如何在Rstudio中使用Git

1. 新建R项目

在R Studio里面新建一个项目,新建项目时记得勾选Create a git repository。

在这里插入图片描述

2. 配置版本控制

如果第1步勾选了“Create a git repository”,则可以跳过这一步。已有项目引入Git,也可以按照这个方法操作。

版本控制系统设置为Git并初始化仓库。(配置这个需要重启Session,请保存好自己的数据)

在这里插入图片描述

在这里插入图片描述

3. 新建仓库

如果没有账号则注册账号:

Gitee(国内的仓库,中文界面,速度较快):https://gitee.com/

GitHub(国外的仓库,英文界面),https://github.com/(注册教程

在这里插入图片描述

在这里插入图片描述

4. 关联远程仓库

在这里插入图片描述

5. 配置用户名和邮箱(配置一次就行)

告诉git你是谁,只需要配置一次即可

git config --global user.email "[email protected]"
git config --global user.name "Your Name"

在这里插入图片描述

6. SSH配置(配置一次就行)

你推送代码到仓库的凭证

  • 生成密钥,复制到粘贴板备用
# 先看看是否已有密钥
cat ~/.ssh/id_rsa.pub

ssh-keygen -t rsa -C "[email protected]"

# 确认一下,然后复制到粘贴板
cat ~/.ssh/id_rsa.pub

在这里插入图片描述

在这里插入图片描述

  • github配置SSH公钥

在这里插入图片描述

7. 配置忽略的文件❗❗❗❗❗

Github免费用户单个仓库只有500MB的空间,所以只能用来保存一些关键的数据或者代码,我们在推送的时候,需要在.gitignore文件指出需要忽略哪些文件或者目录。

  • 如果你是将原有的项目上传到Git上面,需要新建data/input,data/ouput目录,分别作为输入输出目录,便于统一管理。

在这里插入图片描述

8. Add、Commit

  • 界面方式

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 命令行方式
git add .

git commit -m "test1"

9. 推送

  • 命令行方式
git push --set-upstream origin master

在这里插入图片描述

  • 第一次命令行推送完毕后,后续也可以界面操作
    在这里插入图片描述

  • 此时代码已经推送到远程仓库~

在这里插入图片描述

  • 如果此时你误删了数据,可以git checkout .恢复,或者界面操作

在这里插入图片描述

常见问题

使用账号密码推送远程仓库时报错

这是因为Github不支持账号+密码的验证方式了,请使用SSH作为登录凭证。

在这里插入图片描述

误操作把大文件add、commit、push了怎么办

在这里插入图片描述

下面的操作需要分为几种情况

只是add了

  • 当你add的时候有一个大块头文件时,add命令执行完毕也要花很长时间,这时候你就要意识到不对劲了。

在这里插入图片描述

  • add后,使用git status查看一下状态,看看哪些文件被添加了。

在这里插入图片描述

拿上面的例子来说:首先,我们需要编辑.gitignore文件,加上忽略iso文件的规则
然后执行命令
git rm -r --cached 你要忽略的文件
# 清理垃圾
git gc --prune=now
git add .
git commit -m "xxx"
# 推送到远程仓库
git push origin main

在这里插入图片描述

  • 如果你没有运行git gc --prune=now你会发现,虽然文件没有被推送到远程仓库,但是还在本地仓库里面

在这里插入图片描述

在这里插入图片描述

add且commit了,但是没有push上去

  • 实验场景

在这里插入图片描述

在这里插入图片描述

  • 回到add之前的版本

在这里插入图片描述

  • 新增.gitignore配置,重新add、commit

在这里插入图片描述

  • 清理
git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "$@"

在这里插入图片描述

add且commit了,且push到远程仓库了

  • 可以使用BFG工具清理文件,官网,此处不展开
wget https://maven.aliyun.com/repository/public/com/madgag/bfg/1.14.0/bfg-1.14.0.jar

在这里插入图片描述

三部曲都有点烦,可以再简化吗?

可以使用脚本来简化一下,将下面的push.sh文件放到项目的根目录下即可

git add .

if [ "$1" ]; then
	msg=$1
else    
	msg="update code at `date`"
fi

git commit -m "$msg"

git push origin master
# 使用
sh push.sh "XX修改"

# 不包含commit信息,那么脚本会自动添加commit信息
sh push.sh 

附录

https://juejin.cn/post/7024922528514572302

https://www.cnblogs.com/cposture/p/git.html

猜你喜欢

转载自blog.csdn.net/weixin_64316191/article/details/127897952