git只clone仓库中指定子目录和指定文件的实现

我的使用场景:

1、想用一颗repository树来保存相互之间没有关联、没有依赖的运维子项目,而每个子项目代码量都很少,每一个子项创建一个repository太没有必要了;

2、公司的所有内部api也想统一放置到一颗repository树上,几十个api不能都创建一个repository吧(我现在是这么认为的,这个需求也可能不太合理)。

如果非要只clone repository中的几个子目录的话,那就用sparse clone,git从1.7.0开始支持,sparse clone也只是一个变通的方法:先拿到整个repository的object等元数据信息,然后在本地加一个叫.git/info/sparse-checkout的文件(即黑名单、白名单,支持正则,参见下文具体操作命令)来控制pull那些目录和文件(类似.gitignore文件,都是本地的概念),变通的实现《git只clone仓库中指定子目录和文件》,如果非要完美的满足这个需求那就用svn吧。

引用stackoverflow上对sparse clone的描述:

Implementing something like this in Git would be a substantial effort and it would mean that the integrity of the clientside repository could no longer be guaranteed. If you are interested, search for discussions on “sparse clone” and “sparse fetch” on the git mailinglist.

In general, the consensus in the Git community is that if you have several directories that are always checked out independently, then these are really two different projects and should live in two different repositories. You can glue them back together using Git Submodules.

具体做法:

一、svn的实现:svn因为是基于文件的集中控制方式,所有“原生”就支持只checkout指定子目录,并且还能很好的对子目录进行权限控制

➜  svn-test  svn co http://xxx.xxxx.com/ops/内网服务器情况   test
A    test/内网机器硬件配置详细
A    test/内网机器硬件配置详细/192.168.1.147.txt
A    test/最新全公司网络拓扑图.png

二、git的实现:基于sparse clone变通方法

截图:

文章来源:http://blog.csdn.net/xuyaqun/article/details/49275477

关于稚子

你们眼中的草根
此条目发表在应用工具软件分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注