📅 2022-01-09
🔄 2024-01-09
⌚ Reading time: 1 min
https://learngitbranching.js.org/?locale=zh_CN
在本科参加比赛的时候,我和我的队友们一共3个人,每个比赛也都算是一个小项目,使用C语言开发单片机,当时还没有项目版本管理的概念。合作方式是基于压缩包与U盘的,分支靠文件夹重命名,合并就是复制替换。
在搞毕业设计的时候,也有一种类似的文档版本管理方式:
这大概就是版本管理的初级设想吧。
git就是这样一个工具,可以实现本地的、细致到字符级别的版本管理。
比如git记录了我对一个文档的第176行指令的修改。
Github是另一个东西,云端,和本地照片备份到云端是一个性质。也就是说如果写代码只是自己一个人写着玩玩,也不需要合作,也不想给别人看,只有个git就可以实现版本管理了。同步到云端Github会让所有人看到具体内容,有了更多的社交属性在里面。
一个软件的用法,我认为还是思路最重要,逐步操作放到最后面,理解了思路以后,再看的逐步教程也就知道自己是在干嘛了。看逐步教程容易被淹没在指令里😂😂,我觉得对一个纯新人不是很友好。
下面出现的一些措辞不严谨,只是为了更好理解,所以用了日常使用软件的一些说法。在文章最后会全部替换为准确说法,并与指令对应起来。
首先装软件,安装好git和gitahead,然后要有个Github的账号。可以认为gitahead是我们用来上传下载的工具。
先尝试从Github(云端)下载一些东西下来。比如说我在云端有个代码库叫learning
,首先打开gitahead,需要登录自己的GitHub账号。中间巨大的Add Github account,也可以点击左下角的“+”也有这个选项。
弹出窗口的Username就是Github的用户ID,但是密码不是登陆密码,这个类似于邮箱二次验证。去Github网页端进入设置页面,在Developer settings里,找到Personal access tokens,生成一个新的长密码就行,下面所有的框全选上,可以选择长期有效。用新生成的密码就可以登录gitahead了。
登陆后,要在tools-options里填上自己的邮箱地址。
这时候左列出现了云端的东西,可以直接下载。这就有网盘的感觉了,还挺好使。
现在要往learning
这个云端仓库上传一个文件试试,去刚下载下来的这个learning里面,新建一个新建文本文档.txt
,也可以打开随便写点东西保存后来上传。
上传稍稍有点不一样,要多操作几步(后面会拆开来说原因),左边选中Uncommitted changes,上边的框框点击Stage All,然后点击Commit,最后工具栏里会多出一个红色的1,鼠标移过去显示“Push”,点一下就完成上传了。
合理猜测Push左边的Pull是不是可以下载。
虽然这个东西上传有点麻烦,但是也不是很麻烦。
其实在上面上传的时候已经有点版本管理的感觉了。这个Push更准确的含义应该是向云端同步,那么pull的含义是云端向本地同步。
前面说过,git是本地版本管理软件,也就是说Push操作已经是在本地管理完了,要同步到云端公开鉴赏了。
那么显然Stage All,Commit就是在本地进行版本管理。Commit是提交文件修改到本地,Stage All是暂存修改。
可以随便改改提交试试,这种全新的版本管理还是很不错的。
左边有条线串起了每个版本,这根线串起来的就是一个分支。目前仅有一个分支。
回退也很简单,随便挑一个版本,右击,选reset-hard是最简单粗暴的方式。至于各个方式的区别,不同方式略有区别。可以多试试一些操作,软件这个东西,玩不坏的,不行就重启试试。再不济删掉重来。
一个分支够了。后面有时间再写吧。
其实熟悉本地版本管理和远程同步,一个分支操作熟悉了以后,用图形界面客户端跟着感觉按按,也能按出来。这也是使用gitGUI的一个优点吧。
很多时候,我们不止想单兵作战。还想邀请亲朋好友一起写代码,如果离得近还科技基于U盘进行代码分发,基于压缩包进行版本管理。
但是现在有git做版本管理了,也想用起来。一个思路是大家有一个公共仓库,每个人都可以向提交自己的仓库一样提交文件公共仓库。这就是Github里organization的作用。
对于一些大开源项目,这样不合适,不能随便一个人都随便提交,任意修改,总会有人想搞破坏。所以还要有一种需要审核的提交文件的方式。
比如说如果我最近看到一个挺不错的电气电子控制的课程资料项目https://github.com/Control-and-Engineering/course-materials-backup,正好手上有一份资料可以贡献一下,这个项目仓库属于一个叫 Control-and-Engineering的人。显然这不是属于我的仓库,不会在gitahead左侧出现,我无法直接上传到这个仓库里。
首先得让这个仓库属于我,Github给出的方法是Fork一份,就像用U盘复制一份一样,从 Control-and-Engineering的云端空间复制到我的云端空间。
这时候我的云端就有一个一模一样的备份了,这是属于我的,所以我可以任意修改。改好以后,同步到我的云端,这时候其实再从我的云端“复制”到 Control-and-Engineering的云端就好了。这就是页面上的Contribute,可以看到里面的按钮是Open pull request这是一种需要请求的贡献方式,也更广泛的使用。
安装git-lfs,然后点击githaead里的工具栏Submodule,Configure Submodules,选最后一个LFS。然后初始化。
git lfs install #安装大文件上传应用
git lfs track "*.pdf" #追踪要上传的大文件,*表示路径下的所有文件
git add .gitattributes #添加先上传的属性文件(要先上传属性文件,不然有可能失败)
git commit -m "pre" #添加属性文件上传的说明
git remote add origin https://github.com/Youpeng-Zhang/MOP.git #建立本地和Github仓库的链接
git push origin master #上传属性文件
git add * #添加要上传的大文件,*表示路径下的所有文件
git commit -m "Git LFS commit" #添加大文件上传的说明
git push origin master #上传大文件