查看原文
其他

数据治理 | 科研团队协同工作新神器!Git远程仓库的使用

完全有用的 数据Seminar 2022-12-31

目录

一、Git 的分布式特性

1.  “老的”集中式版本管理

2. 分布式版本管理

二、搭建和使用远程仓库服务器

第一步:注册 GitHub

第二步:创建 SSH key

第三步:创建远程仓库

三、将文档提交到远程仓库

四、总结

本文共4653个字,阅读大约需要15分钟,欢迎指正!

往期推文(传送门👉:数据治理 | 随心所欲切换文档版本!误删什么的再也不怕啦~),我们学习了如何使用 Git 在本地电脑上管理文档。我们回顾一下工作步骤:
  1. 创建一个项目文件夹(空文件夹),放入需要被Git管理的文档
  2. 在项目文件夹中,用 git init 创建版本库,会生成 .git 隐藏文件夹,其中有各种配置文件
  3. 在项目文件夹中,用 git config 命令设置用户信息和添加防中文乱码的配置参数
  4. 使用 git add . 和 git commit -m "注释" 将文档提交到版本库
  5. 使用 git reflog 查看 提交ID(前7位)
  6. 使用 git reset --hard 提交ID(前7位) 将文档切换到指定的版本
相信大家经过一段时间的学习已经熟练掌握了以上命令。

💡关于Git的更多知识,请看:

数据治理 | 还在手动保存副本?那你一定还不知道这个小工具!

数据治理 | 一文看懂GIT的基本原理!

到目前为止,我们已经基本掌握了如何在本地个人电脑上使用Git进行版本控制,即:创建Git仓库,并对其进行管理,并且可以回退到任意一个提交点。如下图所示:
图源:https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
但到目前为止我们学习的只是 Git 庞大功能中的一小部分,还有很多功能需要拓展学习。在给出本期的学习内容之前,大家不妨考虑以下问题如何解决
  1. 如果个人电脑损毁或者硬盘坏了,那么存放在本地电脑上的版本库中的所有历史版本都可能丢失,如何找回?
  2. 团队需要协作。目前的版本库在个人本地电脑上,难道要通过U盘拷贝给其他合作者吗?太麻烦了!
现实中,我们解决以上问题,需要找一台电脑充当服务器,并且24小时开机,并做好数据备份工作。团队只需要把文档推送到服务器上,或者从服务器上拉取文档,即可实现协同工作。本期推文我们就来介绍,Git 的 "分布式" 特性以及远程仓库的使用。

Part1Git 的分布式特性

1“老的”集中式版本管理

要了解Git的分布式特性,首先要对集中式版本管理有所了解。在集中式的版本控制系统中,所有的版本库是放在中央服务器中的,也就是说我们每一次的修改上传都是保存在中央服务器中的。如下图所示:
图源:https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
中央服务器就是个大仓库,大家把产品都堆里面,每一次需要改进和完善的时候,需要去仓库里面把文件给提出来,然后再操作。集中式的版本控制系统有三大特点,即同步、追溯、以及文档备份等三大特点。它具备版本控制的重要功能,流行了很长一段时间。

💡补充知识

从集中式版本控制系统的设计观点来看,它主要是维持团队成员之间保持同步的状态。若是根据保持同步的手段再细分,又能衍生出两种模式:一种是锁定模式,另一种是合并模式[1]
  • 在锁定模式下,当团队成员想要修改某文档、签出该文档后,该文档便会进入锁定状态,其他成员便无法加以修改,直到签出者将该文档签回为止。对于维持同步来说,这当然是一个十分保险的作法,因为永远不会有两个或以上的成员同时修改同一个文档。只是这种方法造成了团队成员对于文档修改的互斥效应,大大降低了协同办公效率。

  • 在合并模式下,允许多位团队成员同时针对同一文档进行修改,当他们分别将文档提交仓库时,若发生冲突的情况,便会自动进行合并,而若自动合并失败,再要求人工合并。不过即使如此,最终目的还是要维持多个成员间的同步。毕竟,版本控制的结果在集中式文档库中是唯一的,也是每位团队成员都需与此结果保持一致的。

但是,集中式版本控制系统有一些的缺点:首先,团队成员想要拉取文档或提交到仓库,或是对文档库做一些其他的操作,都必须在能够连网的环境下进行。其次,由于每个团队成员的修改,时常是反复持续进行,在修改的过程中,总会遇到未能稳定、完备到足以提供给其他成员使用的程度,若是在此时提交到仓库,便有可能让仓库的代码处于不稳定、不成熟的状态。

2分布式版本管理

由于集中式版本控制系统有一些致命的缺点,分布式版本控制系统应运而生,甚至慢慢成为主流。分布式版本控制系统的重点在于分布,即每台计算机上都有一个完整的版本库。如下图所示:
图源:https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
在实际工作中,上图中 Computer A 和 Computer B 之间的连接线往往不存在,它们都只和服务器( Server Computer) 进行连接。这里的Server Computer 就是团队中的远程仓库服务器。每个用户都可以从远程仓库服务器中拉取完整的文档,或者把自己的修改推送到远程仓库,通常情况下,Git 会对提交进行合并(当出现冲突时,需要人为介入,解决冲突问题)。这些具体的细节我们在后面的推文中学习。由于每个用户都有完整的版本库,就可以在本地进行工作,所有对版本控制系统的操作,都可以直接在本机端的版本库中进行,包括提交、分支、合并、回退等。同时,用户不需要将自己的修改持续送至集中的版本库上,造成其他用户必须套用这些修改,引起可能的不稳定情况。因为分散式版本控制系统本质的关系,使得此类系统更重视对分支(branch)的支持,它们通常有较好的分支及合并的能力。git 非常提倡我们利用分支来辅助日常工作流程。我们将在后期的推文中,学习 Git 的分支管理。

Part2搭建和使用远程仓库服务器

我们可以自己搭建一个远程仓库服务器,也可以使用互联网上的Git仓库托管服务(例如GitHub https://github.com 、Gitee https://gitee.com )等。对广大的社科读者而言,自行搭建远程仓库服务器并进行数据安全备份,成本过高。若无数据敏感性问题,我们更推荐选择互联网大厂提供的Git仓库托管服务 。

💡小贴士

据笔者了解,在一定的限额内,GitHub 是免费的。

具体额度见:https://docs.github.com/en/enterprise-cloud@latest/get-started/learning-about-github/githubs-products

目前的学习阶段,我们使用 GitHub(https://github.com)创建远程仓库进行团队协同工作。

第一步注册 GitHub

第一步:访问 GitHub 注册并登录,这一步非常简单,我们跳过。

第二步创建 SSH key

版本库需要设置用户认证,保证数据安全。我们可以用账号密码登录,也可以使用 SSH key 验证登录。我们这里选择  SSH key 验证登录,因为只需配置一次,就可以免密访问一个账户下的所有版本库。创建 SSH key步骤如下:首先,在用户主目录下( 例如:C:\Users\chen 或者 C:\Users\Administrator ),看看有没有 .ssh 目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,右击运行 Git Bash Here,创建SSH Key:

注意

Git 默认读取用户主目录下, .ssh 目录中的密钥文件。因此,创建密钥文件时,我们设置了对应的目录,读者请自行修改为自己的用户主目录。
# 创建用户保存密钥文件的文件夹
# 注意:git的命令行,对 Windows 的盘符做了处理
# /d/ssh 等价于 D:\ssh
# /c/user/ 等价于 C:\users
# 这里需要填写自己的用户主目录,不要照抄
mkdir /c/users/自己的用户名/.ssh

# 生成密钥 
ssh-keygen -t rsa -P '' -f /c/users/自己的用户名/.ssh/id_rsa  -C 'test'

# 命令说明:
# -t  rsa    表示指定要创建的密钥类型
# -P  ''     表示不添加额外密码
# -C 'test'  表示注释
# -f /d/ssh/id_rsa  表示密钥文件保存位置及其名称
成功后的效果如下图所示:
  • id_rsa 文件,是私钥,相当于 "钥匙", 请保存妥当
  • id_rsa.pub 文件,是公钥,相当于 "门锁"
我们要把 "门锁" 安装到远程仓库上,就可以用自定义的钥匙(私钥)打开了。(即,把 id_rsa.pub 文件上传到远程服务器的指定位置),步骤如下:登录到 GitHub ,点击头像,然后点击设置。
在左侧导航栏中,点击 SSH and GPG keys。
点击 New SSH Key,添加  "门锁" 。
点击 Add SSH key 后,即创建成功。

第三步创建远程仓库

第一步,点击头像右边的 "+" ,然后点击 New repository 。
第二步,安装如图所示说明,创建仓库。
出现如下画面则创建成功。

Part3将文档提交到远程仓库

将本地版本库中的文件提交到远程仓库需要做如下配置:首先,在自己的本地的版本库中,运行 Git Bash Here,输入如下内容:# 这两步不是必须的
git add .
git commit -m "提交到远程仓库"

# 这个链接是自己的仓库链接 !
git remote add origin git@github.com:hangzhou-qiyan/test.git
然后,我们就可以提交文档到远程仓库啦。输入以下命令:# 第一次,使用如下命令
git push --set-upstream origin master

# 后续使用如下命令
git push

# 注意,git 默认读取 用户主目录下,.ssh 目录中的密钥文件
# 前面的创建密钥过程中,目录的设置是有讲究的 !
效果如下图所示:
登录到GitHub的仓库中,发现数据已经提交。当本地的数据丢失,就可以从远程的服务器中找回数据啦。至此为止,我们已经可以解决前文提出的第一个问题:数据安全性问题。至于,第二个协同工作问题,我们将在下一篇推文中介绍。

Part4总结

随着学习地深入,我们掌握了更多版本控制相关知识,我们的文档管理工作逐渐从个人文档管理迈向团队文档管理。本期的推文,版本控制和Git相关概念较多,希望大家好好理解。然后,注册一个远程仓库服务,敲一敲上面的命令。下期推文,我们将具体介绍多人团队如何使用远程仓库进行协同工作,敬请期待!



参考资料

[1]

《從集中版本控制到分散式版本控制》https://www.ithome.com.tw/node/77088

[2]

https://www.liaoxuefeng.com/wiki/896043488029600

[3]

https://git-scm.com/book/en/v2

我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块(点击标题即可跳转至相应合集):
  1. 计算机基础知识
  2. 编程基础
  3. 数据采集
  4. 数据存储
  5. 数据清洗
  6. 数据实验室搭建
  7. 数据治理特别篇



星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧

往期推荐


基本无害 | 第三章第一节(全)—— 回归的基本原理

数据治理 | 地址数据可视化—教你如何绘制地理散点图和热力图

基本无害 | 使回归有意义——基本原理(3)

数据治理 | 根据地址获取经纬度及行政区划——API的妙用

基本无害 | 使回归有意义——基本原理(2)

数据治理 | 工企地址清洗——Python的妙用





数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


文 | 大杰


    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存