Linux & MacOS | Git | Github | 版本控制 | 多人协作
2022年08月22日
今年开始开发自己的R包了,iterbi,需要频繁用到GitHub。
我最常用的函数也都试图封装到iterbi里了,方便自己今后调用。
MacOS就用desktop版本的github,更新非常方便。
Linux就比较麻烦,最近GitHub改了安全验证方法,只能用token了,需要去setting - developer setting里自己generate
问题是需要每次都输出验证,非常麻烦,所以我有找到了可以保存token的方法:
conda install gh --channel conda-forge gh auth login
问题
devtools和remotes无法安装github上的包
Error: Failed to install 'unknown package' from GitHub: HTTP error 401. Bad credentials Rate limit remaining: 55/60 Rate limit reset at: 2021-08-25 08:50:24 UTC
这是因为没有设置,或者错误设置了/home/lizhixin/.Renviron里的GITHUB_PAT
只需改为
R_MAX_VSIZE=100Gb env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
2019年12月30日
关键词:
- 更新,就像人的生长一样,所有的一切都要更新,为了把控这个更新的进程,失败后随时回溯,我们创造出了git;
- 文本文件(代码、文稿),非文本文件git处理不了;
- 共享,GitHub共享天堂;
- 多人协作,大项目的高效协作;
- 版本控制,能有效的查看文件的所有版本,每次都修改了什么,修改前是什么状态;
什么情节下适合用git?
- 需要长期修改编辑的文本文件;
- 代码管理,最典型的添砖加瓦的写作;
- 论文/小说写作,也是需要不断polish的写作;
什么不适合用git?
- 大文件
- 非文本文件
- 一次性文件
- 无需共享的文件
几大主题:
- 项目设计,如果架构一直变来变去,那么git的意义就不大了;
- 共享,这个最简单,GitHub建一个仓库,来回pull、push就行;
- 版本控制,其次,了解和控制自己对文件的历史修改,能随时根据tag回忆起自己的历史记录,在有需要时回溯;
- 大型项目的多人协作,最难,需要构建branch,大部分小团队用不到,小项目一个人搞比较高效;
其他:
- git和word的写作比较,word主要是用的人多,方便,在两个版本之间很高效,版本多了就不行了,必须多文件;git则是入门门槛比较高,上手后非常高效
- 什么适合写博客?杂碎的、单独的随笔就放到博客;什么适合放到GitHub,只要是一个小项目,涉及到长期修改的就放GitHub;博客文章整理后可以放入GitHub
参考:
Two simple uses of Git for writing a thesis: reviewing & focussing
Git是干嘛的?
目前世界上最先进的分布式版本控制系统
版本控制,当你在搞编程这种文本编辑的工作时就必然会碰到版本问题,你很想知道你每一次都修改了哪些内容,有一天你发现你现在的代码写错了,想回到原来的地方,没有版本控制你会抓狂。当代码量多起来时,修改的次数多起来后,你会发现版本控制更为重要。
Github又是干嘛的?
代码托管,俗称开源圣地,免费用户的代码都是公开的,大家可以互相分享自己的代码,而且大项目可以协同合作。
如何控制版本?版本控制应该能做到什么?
如何将代码上传到Github?
配置
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
$ git config --global user.name "leezx"
创建仓库
$ git init Initialized empty Git repository in /Users/michael/learngit/.git/
添加文件到仓库
$ git add test.txt
提交文件到仓库
$ git commit -m "wrote a test file" [master (root-commit) 4373b19] wrote a test file 1 file changed, 2 insertions(+) create mode 100644 test.txt
注:-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
问:为什么要分add和commit两步?commit一次可以提交多个文件,是最终的提交过程
查看仓库当前状态
$ git status
查看修改内容
$ git diff test.txt diff --git a/test.txt b/test.txt index d8036c1..ec61677 100644 --- a/test.txt +++ b/test.txt @@ -1,2 +1,3 @@ Git is a version control system. -Git is free software. \ No newline at end of file +Git is free software. +hahaha! \ No newline at end of file
光diff的输出格式就得再开一片文章了:linux diff详解
查看修改后提交
$ git add test.txt
$ git commit -m "add hahaha!"
注:修改后必须做两步,add 和 commit
查看历史版本
$ git log
回退到指定版本
$ git reset --hard 420e77b
$ git reset --hard HEAD^
再回到前面的版本
$ git reflog
git工作原理?
工作区:写代码的地方
版本库:包含暂存区和分支master
理解你init、add、commit、log、reflog每一步都具体干了些什么?
怎么连接本地 Git 和 Github?
生成密码文件
$ ssh-keygen -t rsa -C "youremail@example.com"
去Github填写密码
复制 id_rsa.pub
连接远程的Github
$ git remote add MyScripts git@github.com:leezx/MyScripts.git
$ git push -u MyScripts master