# 花草虫鱼 **Repository Path**: guyuming76/plant ## Basic Information - **Project Name**: 花草虫鱼 - **Description**: 记录分享一下自己养的花花草草,小鱼小虾 - **Primary Language**: 其他 - **License**: CC-BY-4.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-01-08 - **Last Updated**: 2023-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 用gitee来记录养的花草虫鱼的状态,主要是用手机拍照,在手机上用QuickEdit编辑文本文件,或用Markdown编辑器编辑MD文件,然后用手机 mgit 提交图文。也可以手机上只是用 mgit 提交图片,然后在电脑上下一个commit 提交说明文字,毕竟我觉得电脑编辑文字比手机方便。 用户可以通过 Commits 视图来查看图文,就像看一篇篇博客一样。 我在考虑如何像在论坛里那样和别人交互?用户虽然可以直接在commit页面上评论,但这样内容就只能在gitee网站了。是否可以实现我自己每次在master分支发内容,但开放gitee登录用户在我的仓库内的branch权限,如想评论我的一个commit,就直接在这个commit上建个新分支,提交用户自己的内容,我回复就可以直接在那个分支上进行,对于我喜欢的用户内容,我也可以直接cherry-pick到master分支上。 我对 git,gitee 权限管理不太了解,这也只是个想法,还不知是否可行。 但我也不会只集中在master分支上,我可能会为每盆,或每种植物建一个branch, 初次在手机上提交的时候就提交到master分支,然后有空可以在电脑上rebase 这些commit 刚才试了一下,gitee 里添加开发者需要指明开发者用户名,我如何才能添加“所有gitee登录用户”为这个仓库的开发者权限呢?如果可以的话,我再把自己的几个分支给保护起来,让开发者无法修改是不是就可以满足最基本的让别人通过git commit在我仓库里评论的功能? 20230125:尝试了一阵这个仓库,基本都是我一个人唱独角戏,还未涉及协同内容创作。 发现使用git而不是普通文件系统目录如百度网盘,一个比较好的地方就是我可以在master分支用新的commit介绍新的植物,然后在介绍同一类植物,特别是首次更新这棵植物最新状态的时候,checkout 当初的commit, 然后 “git switch -c 新的分支名” 为此类别创建单独的分支,更新在次新分支而不是master上。这样,当将来由于频繁更新某一盆植物导致图片数量巨大的时候,git 分支这个用来表示植物类别或特定个体的维度会大大减少照片浏览的量。 我现在能想到的用来细分内容的维度,一是刚提到的植物分类及个体,还有一个就是种植位置,前者目前计划用git分支表示,后者可以使用文件系统子目录。一张,一组照片里面经常会包含多种植物,可以用git cherry-pick 把一次commit复制到多各分支上(但事实上我比较懒,可以预见以后理论上可以这么做,事实上也不一定会维护得整洁,往往省事为主)。同时git merge, rebase 等可以维护git commit 序列及分支为一个有向无环图结构(DAG)。而如果要用文件系统子目录来维护一个有向无环图结构,需要用到硬或软链接,而我前段时间发现 git 对于文件软硬链接的支持似乎还不完善,而是种植位置这个维度,似乎树形结构就够用了。 严格地说,植物分类,乃至细化到个体,也是一个树形结构,而不是一个有向无环图,但根本的原因是一张图片,或是一个commit,会包含多个个体和类别,若不借助软硬链接的文件目录,只能复制一份,数据重复,维护不方便。另一方面,一张照片,通常不会跨多个具体位置,如果跨多个位置,可以放到上一级位置,而一次commit多张照片,多个位置,可以放入多个目录完全没问题。 20230510: 在这个仓库里使用多个分支带来的一个不便就是我用 locate 找文件时,只能找到一个分支的内容,当然,我可以创建一个叫“all”的分支,但每次在别的分支commit后需要更新all分支,有没有自动更新的方法呢?或者git有没有一个内置隐含的all分支?如果分支的好处仅仅是提供了一个过滤的提交历史,那么在git log里面加上文件夹路径也可以起到过滤的效果,分支的必要性在哪里? 20230606: 刚才想到了一个分支的必要性:假如有一个团队去采集植物图片,大家有分工,比如按地域分,按种类分,如果有一个”权威“,先建立好按类别的”分支“,比如按门纲目科属种建立好分支结构,然后各个成员只需同步自己负责的那个分支就可以了,如果没有分支,大家同步的内容就会比较多。也就是说,可以考虑把物种分类树直接映射到git分支。 20230512: 我总是在“叶公好龙”地盘算我的户外植物识别旅行,其中一个部分就是野外拍照识别。手机通常存储有限,我也希望从功耗角度考虑尽量弱化"手机"性能。所以目前的一个疑问就是能否通过分支(假如不同分支的本地可以占用不同数量的存储得话)。后来我觉得我其实需要的是在手机上实现push-only的功能,我在手机上不pull, 只管push,保证push的都是新图片和文本文件,这样不可能有冲突,可我这会儿还不知道怎么做(当然,我知道可以专为手机开一个仓库,回家后从这个仓库把所有的commit 同步到另一个大仓库里面,但操作上就比有个push-only的客户端麻烦些了)。或者(可能比较麻烦)某个文本文件只在一个branch commit,push,假如这个branch可以占用空间较小得话,让后回家后再去merge。想象下来,还是push-only这种总的操作最方便,只要本地能有完整仓库的所有branch名称(guid?),然后可以随意在手机上往后台仓库push,完了回家后也不用另外的合并操作啥的,最多考虑事先在仓库级别设置一个容许push-only的标志,打开标志后就不容需做某些可能导致冲突的操作。push-only完了以后,再把标志位设回去. 我刚才搜了一下,[说是可以partial clone](https://www.gitfaqs.com/question/clients-only-push-to-git-without-pulling)但是提到建一个自己的目录,这个应该不是必须得话,如果必须,那么会影响目录分类,完了我还得目录间复制。更重要的是 问题是我现在手机是用MGit使用git的,mgit里面貌似没有partialclone功能吧,只能先电脑上试,觉得可用,再去给看mgit能不能加功能,mgit我印象中是java的壳但是用一个啥so库。 忘了还有git shallow 浅克隆这回事,试了一下,本plant仓库现在1.1个G,depth=1下来也652M,显然存储上不满足我对手机push-only 的要求。这个shallow clone印象中说的是每个文件的最新版本,不是我想想中的仅仅每个Branch头指针位置。不过我这个仓库基本都是图片,基本没有文件修改,剩下的文本文件也都非常小,我想象depth=1的结果应该和完整的大小很接近才对啊,现在差了近一半,为啥?哎,我对git底层细节还是不懂,靠猜不行,还要学习 20230525: 目前,我在手机上拍照片后,描述性文字基本上都写在提交备注里,在电脑端,我用rfm浏览提交备注很方便。刚开始的时候,我喜欢在手机上用一个文本文件,记录照片的描述信息,比如有“圆叶匙唇兰.txt”这个文件,我可以用如下命令获取所有和此文件改动同时提交的图片: git show --name-only $(git log --all --oneline 圆叶匙唇兰.txt |awk '{print $1}')|grep .jpg|imv 但在IMV看图工具里,我只能看到少数几张图,原来我虽然在 git log 里用 --all 参数表明所有分支范围,但最后只有当前分支的图片出现在文件系统目录里,我还是得搞一个包含所有提交的all分支才能解决不用切换分支查看所有图片的问题。