是否可以在不首先签出整个存储库的情况下执行稀疏签出?

是否可以在不首先签出整个存储库的情况下执行稀疏签出?

我正在使用一个存储库,其中包含大量的文件,需要花费几个小时的时间才能签出。由于Git支持稀疏签出,所以我正在研究Git是否能很好地与这种存储库一起工作的可能性,但我能找到的每个示例都做了以下工作:

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

这个命令序列的问题是原始的克隆也做了一个签出。如果将-n添加到原始克隆命令中,那么读树命令将导致以下错误:

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

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


阿晨1998
浏览 518回答 3
3回答

茅侃侃

请注意,此答案确实从存储库下载了数据的完整副本。这个git remote add -f命令将克隆整个存储库。从手册页git-remote:带着-f选项,git fetch <name>在设置远程信息后立即运行。试试这个:mkdir&nbsp;myrepo cd&nbsp;myrepo git&nbsp;init git&nbsp;config&nbsp;core.sparseCheckout&nbsp;true git&nbsp;remote&nbsp;add&nbsp;-f&nbsp;origin&nbsp;git://... echo&nbsp;"path/within_repo/to/desired_subdir/*"&nbsp;>&nbsp;.git/info/sparse-checkout git&nbsp;checkout&nbsp;[branchname]&nbsp;#&nbsp;ex:&nbsp;master现在,您将发现您有一个“剪枝”签出,其中只包含了PATH/INTERP_REPO/to/Equired_subdir(以及在该路径中)的文件。请注意,在windows命令行中,您不能引用路径,即必须用此命令更改第6个命令:echo&nbsp;path/within_repo/to/desired_subdir/*&nbsp;>&nbsp;.git/info/sparse-checkout如果不这样做,就会在稀疏签出文件中得到引号,它将无法工作。

慕虎7371278

Git克隆人有一个选项(--no-checkout或-n)做你想做的事。在命令列表中,只需更改:git&nbsp;clone&nbsp;<path>对此:git&nbsp;clone&nbsp;--no-checkout&nbsp;<path>然后,您可以使用稀疏签出,如问题中所述。

aluckdog

我有一个类似的用例,但我只想签出一个标签的提交并修剪目录。使用--depth 1使它变得非常稀疏,并能真正加快速度。mkdir&nbsp;myrepo cd&nbsp;myrepo git&nbsp;init git&nbsp;config&nbsp;core.sparseCheckout&nbsp;true git&nbsp;remote&nbsp;add&nbsp;origin&nbsp;<url>&nbsp;&nbsp;#&nbsp;Note:&nbsp;no&nbsp;-f&nbsp;option echo&nbsp;"path/within_repo/to/subdir/"&nbsp;>&nbsp;.git/info/sparse-checkout git&nbsp;fetch&nbsp;--depth&nbsp;1&nbsp;origin&nbsp;tag&nbsp;<tagname> git&nbsp;checkout&nbsp;<tagname>
打开App,查看更多内容
随时随地看视频慕课网APP