您的位置:首页 > 其它

Git如何检出指定目录或文件

2017-03-09 15:25 204 查看
来源:http://xueliang.org/article/detail/20160819001000543

对于大型 Git 仓库,每次执行 Git 命令,都需要经过漫长的等待,特别是要经常执行的 
git status
 命令。下面是一个例子…



从 1.7.0 开始,Git 引入 
sparse checkout(稀疏检出)
 机制,稀疏检出机制允许只检出指定目录或者文件,这在大型
Git 仓库中,将大幅度缩短 Git 执行命令的时间。

要想只检出指定的目录或文件,需要在 
.git/info/sparse-checkout
 文件中指定目录或文件的路径,下面将以一个具体例子介绍
如何使用 Git 的 
sparse checkout
 。


准备远程仓库

初始化一个仓库,目录结构如下图所示:



根目录下有 2 个子目录,以及一个 
LICENSE
 文件和 
README.md
 文件,每个子目录中各有
3 个。 

将其推送到Github上新建的一个仓库,地址是 
git@github.com:liangzai-cool/git-sparse-checkout-study.git
 。


为Git配置稀疏检出

换一个目录,再初始化一个 Git 仓库,以便用稀疏检出的方式,检出刚才在 Github 上新建的 
git-sparse-checkout-study
 仓库:



使用 
git config core.sparseCheckout true
 命令开启 Git 稀疏检出模式。然后编辑该仓库目录下的 
.git/info/sparse-checkout
 文件,指定检出规则。这里只检出 
git-sparse-checkout-study
 仓库中的 
dir1
 目录下的所有文件和
根目录下的 
README.md
 文件:




检出

添加远程仓库地址,并检出:



可以看到,Git 只检出了根目录下的 
README.md
 文件和 
dir1
 目录。

如果此时需要再检出,根目录下的 
dir2
 目录,则需要将其加入到 
.git/info/sparse-checkout
 文件中。参照下图中的方案:




关闭稀疏检出

和上面检出 
dir2
 时类似:



可以看到所有文件都已显示出来了。 

注意这里的 
echo
 命令:

复制
echo "/*" > .git/info/sparse-checkout


最后不要忘了配置 Git 的 
core.sparseCheckout
 为 
false
 以及移除 
.git/info/sparse-checkout
 文件。

.git/info/sparse-checkout
 中使用和 
.gitignore
 相同的匹配模式,例如
非匹配 
!/dir2/*
 以及 
/*.java
 等。

其他参考文章:http://blog.csdn.net/xuyaqun/article/details/49275477
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息