git与写作第三期:协作与同步

2018-12-25  本文已影响36人  九天学者

上期回顾

上一期详细介绍了如何在本地进行写作过程中的版本控制工具git,以及从零开始创建git管理仓库、提交修改、版本回退、版本差异对比以及冲突处理

本期的主要内容是详细讲解如何通过云端与其他人进行写作编辑以及如何同步多人写作内容

云端仓库平台

这里所说的远端仓库平台指的是一种专为git而生的代码托管平台(这里讲的代码是广义的代码,并不特指计算机编程代码。比如你写小说的文字也被视为代码,总之表示文本内容,一般为ascii编码—也就是明码).

目前主流的代码托管平台有:国际化的github、gitlab和国产的coding。他们的功能相似,值得一提的是gitlab本身就是个开源的系统。可以将gitlab系统部署在自己的服务器上,进一步定制个性化功能。

比如德国亥姆霍兹海洋研究所—GEOMAR就在自家服务器部署了gitlab,作者和导师协作编写程序代码以及写paper就是通过这个自己的gitlab平台,无限容量!毕竟自家的!

这三个平台操作类似,下面我只以github为例进行举例说明!

github

github于2018年已被微软收购,大家都在担心github是不是要完蛋。不过幸运的是微软并没有对github的运营理念插手,谁家的不重要,功能还是原来的味道就行!github是可以免费注册并免费使用的,但是免费使用的只有public仓库,也就是全世界都可以看到你这个仓库!如果想只对自己可见,就要创建private仓库,当然了享受隐私权是要付出代价的—购买VIP!

重点来了:学生可以申请免费的private权限,而且是无限容量的!大平台就是这么豪气!

将本地git仓库推送到github

推送的时候是需要权限验证的,有两种方式:(1)https+用户名+密码;(2)ssh密钥验证。前者略显繁琐,后者一劳永逸!这里我就不过多解释了,直接告诉一步一步怎么做,用命令说话更容易明白!

在github上创建仓库

浏览器中打开github xxxxx,创建的仓库最好是空的(如果非空的话需要其他操作),见下图

添加ssh公钥

  1. 查看本地系统中有没有配对的ssh公钥和密钥,查看 ~/.ssh目录看是否有 xxxxx:
  2. 如果没有则利用命令 dkjslajfkld 创建之。
  3. 上传公钥到github
    登陆你的github账户,在设置里面添加公钥,一个电脑添加一个就够了!添加方法就是拷贝刚才生成的公钥文件 dwarfs 里面的全部内容到github,如下图:

添加远程origin仓库地址

github仓库创建完毕,密钥添加也成功,接下来就是将此远程仓库与本地git仓库关联。命令就是:

git remote add origin 你的github仓库ssh地址

添加成功之后将无消息显示,在unix-based系统下无消息就是最好的消息!如果又错误,则会显示错误,根据错误信息解决即可!按我的步骤操作应该不会出错

设置上传至云端的branch并进行第一次push操作

提示:在涉及到与命令有关的英文我就不翻译为中文了,这样方便大家理解和记忆!

这一步的目的是设置将本地仓库的哪一个branch上传至github仓库。这一步的命令其实不需要记忆,直接输入git push命令,系统会自动提示你需要设置origin地址和upstream branch,然后复制这个命令填入你自己的branch名称即可,如下图

操作命令为:

至此,你就可以在你的本地仓库中写作、写作、写作,不断写作不断add和commit然后push,就会将你的本地仓库所有的版本信息同步到云端仓库中了,你可以打开云端仓库查看情况。如下图所示

与自己协作

纳尼...我没听错吧,与自己协作?没错就是与自己协作,这是与他人协作的基础!与自己协作的场景就是跨平台、跨设备写作。比如你有两台电脑,一台上办公室的台式机,另一台是自己的笔记本。平时在办公室喜欢用台式机工作,但是晚上回家或者周末不想去办公室了想在家用自己的笔记本工作。这时候git和github的强大功能就派上用场了!

建议在master分支以外再创建两个branch,比如一个命名为office,另一个命名为home。首先你需要做的就是在master分支上创建并checkout到这两个分支上,这个操作完了之后就会得到office和home两个与master完全相同的分支,命令为:

git branch office
git checkout office
branch home
checkout home 

目前你处在home分支下面,查看你当前在哪个分支下面,可以用命令 git branch 看出来的结果里面带星号的就是当前分支。根据自己的需要切换到相应的分支进行工作,比如从home切换到office,命令为 git checkout office

提醒:使用checkout命令切换分支的时候,当前分支下必须是clean的,也就是要将所有的修改全部提交了才能切换。这一点的逻辑也是很容易理解的:你在当前分支下把活作干净了,圆满完成了才能走人对不对!git不允许脚踏两只船🤣

下面就详细举例说明与自己的协作场景和过程

周一白天办公室工作:台式机

建议在办公室工作的时候就在office分支下。

拉取云端内容保持同步

假设你有每天下班前提交所有写作内容的习惯(commit 和 push),也就保证了下次写作的时候你的分支是clean的。首先从云端仓库pull所有内容,保证你现在所在分支在本地仓库与github仓库一样新,使用命令为git pull或者git fetch origin

写作+提交+push

更新完了就可以进行写作了,一天无话!反正就是不断写,不断commit和push你的更新就行。有人会问什么时候提交呢?这得看你的情况了,与传统word写作相比,你啥时候想备份你就啥时候commit和push。不过现在因为git对这个的操作太方便了,你可以比传统方式保存备份文件更频繁,建议至少每天下班前提交一次!这样可以保证在最坏的情况下你至多白费一天的工作时间!作者一般是写了重要内容或者中间离开了就提交一次,至少每天一次

周一晚上在家再工作一小时

尤其对于临近毕业的同学,肯定不愿意浪费晚上回家睡觉前的时间了!那就拿起你的心爱的本本再写一段啦!怎么接着白天在办公室的内容继续写呢?看下面的步骤

假设以上的操作都是在办公室台式机上完成的,你的笔记本没有参与任何写作内容!

从云端仓库clone到笔记本

在你的笔记本(假设你的笔记本是Mac或者linux或者至少是有subsystem的win 10系统)上找一个存放你写作内容的目录,然后打开终端,切换到此目录(作者喜欢用vscode,既可以方便的用终端也可以用vscode高亮显示你写作的代码内容) 。执行命令git clone 你的github仓库ssh地址 (注意:跟在台式机上的操作一样,在你的github账户里面也添加你的笔记本的ssh公钥)。完成后,你就会有一个以你仓库名称命名的文件夹,切换到此文件夹。这个文件夹下的内容与你台式机上的本地仓库是完全相同的了!

在笔记本上继续写作

在笔记本上写作,当然你需要切换到home分支下。home分支可能与office内容不同,那么需要将office分支合并到home分支,执行命令 git merge office 即可。

合并的时候有可能出现conflict:不同分支下对同一个文件的同一个位置都做了修改,这时需要手动处理,究竟要保留哪一个修改。推荐vscode的git插件,能很高效的助你处理合并冲突!

合并成功之后,就在home分支下得到了与你离开办公室前提交的完全相同的内容了。所以你现在就可以接着白天的写作进度继续工作一小时了!与白天在办公室的工作方式一样,不断写不断commit和push。 该睡觉了

周二在办公室继续写作

因为周一晚上在家用笔记本电脑在home分支下有新的写作内容并且推送到了github。所以你的第一件事就是在台式机上pull远程仓库并且在office分支下合并home分支:与周一晚上在笔记本上的合并操作一样一样的!

合并完成后,就得到了周一晚上在家的写作进度了。那么...就开始码字吧,记得时不时的commit一下再push一下!

周二晚上回家继续加班

与白天在办公室的工作方式一样,首先从远程仓库中pull,然后在home分支下合并office的更新,最后就在home分支下专注你的写作!

至此,与自己的协作已上正轨!简单的几个命令 git add —a, git commit -m”提交信息”, git push, git pull, git merge office就可以方便的在不同机器上同步写作!日复一日的不断循环,祝你早日出成果!

与他人协作

前面提到过,与自己协作是与他人协作的基础!操作步骤一样一样的,不同的人创建自己的分支,然后在自己的分支上工作。当然了每个人也可以像前面一样有自己不同的几个分支,方便在不同设备上工作!注意:对于一个写作项目,必然有一个manager的(比如写毕业论文,你当然就是这个负责人咯),manager负责将每人的分支更新合并到master分支上,得到阶段性的或者最终的写作成果!

与他人协作和与自己协作的不同之处有一下亮点

  1. 分支更多:建议每个项目成员都创建一个以自己名字命名的master分支(比如 zhangsan_master),表示此成员的主分支。如果有的成员为了自己工作方便,有好几个分支,那么manager只需要合并每个成员对应的master分支即可。对项目成员而言,只需要将自己的最新成果同步到自己的master分支上就可以了,协作是要有规则的,这样才科学,效率高而不出错!

  2. 合并冲突可能更多:不用怕,万变不离其宗,一样轻松处理!这个是很容易理解的,因为在与自己合作的过程中,因为你没有三头六臂,你只能一个人沿着时间线串行工作,只要你按照上面的步骤工作,不会出现merge conflict的!但是多人合作就不一样了,这是个并行的过程,很有可能几个成员同时修改了某个文件的同一个位置,比如你论文的title,你导师和你师兄都修改了自己觉得合理的题目。那么当你对每个人的master分支进行合并的时候就会发现,title出现了不同内容,合并冲突就出现了!那么你的这个manager必须要有主见了,保留哪一个你来定!冲突处理完了,就得到了阶段性的协作成果了,同步到项目master分支上。

协作同步

上面已经提到了,manager定期或者不定期将项目成员的写作进展进行拉取和合并,并且同步到项目master分支上!这就是协作同步!当然了,这里假设每个项目成员都是会基本的git使用,项目成员只需用要懂得和自己协作(当然也可以一条branch跑到黑)即可。而且也得假设每个项目成员都是听话的,每天将自己的写作更新push到项目的github仓库,这样你这个manager才能拉取他的更新!

基本的思路和命令都在这了,当然了你在操作过程中也会有新想法可以自己尝试!也可能遇到问题,那么欢迎留言讨论或者自行Google!师傅领进门,修行靠个人!希望世界变得更美好!

上一篇下一篇

猜你喜欢

热点阅读