问题背景
问题是这样的,我本地有多个项目,每个项目包含多个工程,一个工程是一个git仓库,所以现状是
- A项目:A1仓库、A2仓库、A3仓库
- B项目:B1仓库、B2仓库、B3仓库
- C项目:C1仓库、C2仓库、C3仓库
(是不是突然有点似曾相识的感觉,别说话,继续看)
现在我想把这些仓库都推到Github,推上去有个几个目的
- 方便日后在线查看代码,只看不写
- 希望是按照项目分类收纳,方便查找
- 可能会看
commit log
,需要保留相关信息 - 因为仓库比较多,所以希望操作便捷,避免逐个上传
尝试方案
仓库套仓库
这是最符合直觉的思路。直接一个项目一个仓库,把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的收藏夹功能实现类似的功能。操作如下:
- 我们新建一个收藏夹
- star自己需要归拢的仓库,并且选择放入的收藏夹
- 点击对应的收藏夹就可以看到自己归拢的仓库
这样相当于我们用收藏夹创建了一个分类,替代了原来的文件夹功能。
只不过这个方案有一个缺点,就是这个收藏夹是所有人可见的(只是收藏夹所有人可见,私有的仓库还是看不到的),所以在文件夹起名以及添加描述的时候需要留意。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。