我正在使用一个存储库,其中有大量的文件,需要几个小时才能签出。我正在研究Git是否能很好地使用这种存储库的可能性,因为它支持稀疏签出,但我能找到的每个例子都是这样的:

git clone <path>
git config core.sparsecheckout true
echo <dir> > .git/info/sparse-checkout
git read-tree -m -u HEAD

这个命令序列的问题是原来的克隆也做一个签出。如果在原来的clone命令中添加了-n,则read-tree命令将导致以下错误:

错误:稀疏签出在工作目录上没有留下条目

如何在不先签出所有文件的情况下进行稀疏签出?


当前回答

不幸的是,上面没有一个对我有用,所以我花了很长时间尝试不同的稀疏签出文件组合。

在我的情况下,我想跳过IntelliJ IDEA配置的文件夹。

以下是我所做的:


运行git clone https://github.com/myaccount/myrepo.git——no-checkout

执行git config core命令。sparsecheckout真实

创建了.git\info\稀疏签出,包含以下内容

!.idea/*
!.idea_modules/*
/*

运行'git checkout——'获取所有文件。


让它正常工作的关键是在文件夹名称后添加/*。

我有1.9

其他回答

痛苦的奥罗拉

git clone --filter=blob:none --no-checkout --depth 1 --sparse <project-url>
cd <project>

指定要克隆的文件夹

git sparse-checkout add <folder1> <folder2>
git checkout

请注意,这个答案确实从存储库下载了数据的完整副本。git remote add -f命令将克隆整个存储库。从git-remote的手册页:

使用-f选项,在远程信息设置完成后立即运行git fetch <name>。


试试这个:

mkdir myrepo
cd myrepo
git init
git config core.sparseCheckout true
git remote add -f origin git://...
echo "path/within_repo/to/desired_subdir/*" > .git/info/sparse-checkout
git checkout [branchname] # ex: master

现在你会发现你有一个“修剪”签出,只有从路径/within_repo/到/desired_subdir的文件存在(并且在该路径中)。

注意,在windows命令行中,你不能引用路径,也就是说,你必须用这个命令来改变第6个命令:

echo path/within_repo/to/desired_subdir/* > .git/info/sparse-checkout

如果您不这样做,您将在稀疏签出文件中获得引号,并且它将不起作用

我有一个类似的用例,除了我只想签出一个标记的提交和修剪目录。使用——depth 1可以使它非常稀疏,并且可以加快速度。

mkdir myrepo
cd myrepo
git init
git config core.sparseCheckout true
git remote add origin <url>  # Note: no -f option
echo "path/within_repo/to/subdir/" > .git/info/sparse-checkout
git fetch --depth 1 origin tag <tagname>
git checkout <tagname>

在git 2.27中,看起来git稀疏签出已经进化了。 这个答案中的解决方案并不完全相同(与git 2.25相比)

git克隆<URL>—no-checkout <目录> cd <目录> Git稀疏签出init——cone #只获取根文件 Git稀疏签出设置apps/my_app libs/my_lib # etc,列出要签出的子文件夹 #它们在这个命令后立即被签出,不需要运行git pull

下面这些命令效果更好:

git clone --sparse <URL> <directory>
cd <directory>
git sparse-checkout init --cone # to fetch only root files
git sparse-checkout add apps/my_app
git sparse-checkout add libs/my_lib

参见:git-clone—sparse和git-sparse-checkout add

不幸的是,上面没有一个对我有用,所以我花了很长时间尝试不同的稀疏签出文件组合。

在我的情况下,我想跳过IntelliJ IDEA配置的文件夹。

以下是我所做的:


运行git clone https://github.com/myaccount/myrepo.git——no-checkout

执行git config core命令。sparsecheckout真实

创建了.git\info\稀疏签出,包含以下内容

!.idea/*
!.idea_modules/*
/*

运行'git checkout——'获取所有文件。


让它正常工作的关键是在文件夹名称后添加/*。

我有1.9