实现从Git远端仓库指定分支下载指定文件

实现从Git远端仓库指定分支下载指定文件

Git命令实现

git在1.7版本后增加了sparse checkout(稀疏检出)功能,使得git也能像svn那样下载项目指定文件。

#创建本地空仓库
cd git_repo
mkdir dev
cd dev
#连接远程仓库
git clone -n origin 
#开启sparsecheckout功能
git config core.sparsecheckout true
#设置要克隆的仓库的子目录路径,"*" 
echo "<指定路径>" >> .git/info/sparse-checkout
# git pull 拉取代码
git pull origin 
# git checkout 如需添加指定路径,先在sparse-checkout中增加指定路径,再checkout
echo "<指定路径>" >> .git/info/sparse-checkout
git checkout 

跟sparse checkout相关的两个文件

.git/config

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
	sparsecheckout = true
[remote "origin"]
	url = https://github.com/***/***.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

.git/info/sparse-checkout

src/main/java/com/csust/utils


JGit命令实现

使用JGIt实现从远端仓库拉取指定文件。

maven配置


<dependency>
    <groupId>org.eclipse.jgitgroupId>
    <artifactId>org.eclipse.jgitartifactId>
    <version>5.6.0.201912101111-rversion>
dependency>

核心代码

Stirng url = "gitUrl";
String hash = "origin/" + branchName;
String subPath = "<指定文件路径>";
//初始化本地仓库
Git gitRepo = Git.cloneRepository().setURI(url).setDirectory(localPath).setNoCheckout(true).call();
//checkout指定文件||文件夹  
gitRepo.checkout().setName(branchName).setStartpoint(hash).addPath(subPath).call();
gitRepo.getRepository().close();

存在的问题

还是会从远程仓库下载.git文件夹 ,比较耗时。

你可能感兴趣的:(实现从Git远端仓库指定分支下载指定文件)