头图

问题背景

问题是这样的,我本地有多个项目,每个项目包含多个工程,一个工程是一个git仓库,所以现状是

  • A项目:A1仓库、A2仓库、A3仓库
  • B项目:B1仓库、B2仓库、B3仓库
  • C项目:C1仓库、C2仓库、C3仓库

(是不是突然有点似曾相识的感觉,别说话,继续看)

现在我想把这些仓库都推到Github,推上去有个几个目的

  1. 方便日后在线查看代码,只看不写
  2. 希望是按照项目分类收纳,方便查找
  3. 可能会commit log,需要保留相关信息
  4. 因为仓库比较多,所以希望操作便捷,避免逐个上传

尝试方案

仓库套仓库

这是最符合直觉的思路。直接一个项目一个仓库,把A1、A2、A3这些仓库直接放在A仓库里上传。

项目A仓库
├── A1仓库
├── A2仓库
└── A3仓库

但是上传之后我发现A1、A2、A3在Github上显示为一个链接(见下图),且点击之后没有反应,看来这种方式行不通啊。
图片

sub module

继续嵌套的思路,我也尝试sub module的办法,但不能满足需求,这里就不展开尝试的过程了。

问题解决

解决思路

其实仓库套仓库的办法是可行的,但是需要做些改进,改进的核心就一句话:给子仓库的.git文件夹改名

思路分析

为啥改名就能行呢?你听我给你分析下:

上面我们使用仓库套仓库的办法时候发现子仓库都显示成链接,那为啥显示成链接了呢?

那肯定是他识别到了这是一个子仓库了(废话吗不是),那我们不让他是一个子仓库是不是就可以是不显示成链接了?

哎,这题我会,我把.git目录删了他就不是仓库了。但是这样一来我们的commit log也没了。

那有什么办法可以让他既不是一个仓库,但是还保留commit log呢?

这就有点强人所难了,但是也不是没有办法。我们可以给.git文件夹改个名字,然后把这个文件夹里面的内容当普通文件提交,等需要看commit log的时候把代码拉下来,把文件夹再改回.git就行了。

至此,问题解决,美中不足是不能在线看commit log

要注意的是,默认情况.git文件夹是不显示的,得在命令行改。

mv .git git

其他情况

上面讨论的是项目还在本地的情况,如果你的A1、A2、A3仓库都已经提交到远端了,只是想有个归拢入口的话,那么我们可以用Github的收藏夹功能实现类似的功能。操作如下:

  1. 我们新建一个收藏夹
    image.png
  2. star自己需要归拢的仓库,并且选择放入的收藏夹
    image.png
  3. 点击对应的收藏夹就可以看到自己归拢的仓库
    image.pngimage.png
    这样相当于我们用收藏夹创建了一个分类,替代了原来的文件夹功能。
    只不过这个方案有一个缺点,就是这个收藏夹是所有人可见的(只是收藏夹所有人可见,私有的仓库还是看不到的),所以在文件夹起名以及添加描述的时候需要留意。

aqiongbei
2k 声望283 粉丝

人生路上,你走的每一步都算数