从远程git存储库获取单个文件内容的最有效机制(关于传输的数据和使用的磁盘空间)是什么?
到目前为止,我已经设法提出:
git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
Run Code Online (Sandbox Code Playgroud)
这仍然有点矫枉过正.
如何从回购中获取多个文件?
如何从 git 存储库克隆、获取或稀疏检出单个文件或目录或文件或目录列表,以避免下载整个历史记录或至少保持历史记录下载最少?
为了登陆这里的人的利益,这些是对其他类似问题的参考:
很久以前就有人问过这些类似的问题,从那以后 git 不断发展,最终导致了大量不同的答案,有些更好,有些更糟,具体取决于所考虑的 git 版本。问题在于,上述问题中没有一个答案能满足所有这些问题的所有要求,这意味着您必须阅读所有答案并在头脑中编译自己的答案,最终才能满足所有要求。
这里的这个问题扩展了前面提到的问题,提出了比所有其他问题加起来更灵活和严格的要求。所以,再一次:
如何从 git 存储库克隆、获取或稀疏检出单个文件或目录或文件或目录列表,以避免下载整个历史记录或至少保持历史记录下载最少?
git git-fetch git-checkout revision-history git-sparse-checkout
假设我有一个git submodule并且我想在其上启用稀疏结帐。是否可以这样做并将该文件添加到存储库中以供其他克隆者使用?git 子模块被添加到,/.gitmodules但该子模块的稀疏签出文件位于.git/modules/foo/info/sparse-checkout? 如何配置 git 子模块,以便其他人克隆时--recursive只能获得白名单目录?如何将子模块上的稀疏结帐配置保存到存储库中?
当我尝试使用稀疏过滤器从 git 存储库克隆文件夹“banana”时,出现以下错误;
git clone --depth 1 --filter=blob:none --sparse https://github.com/gitexpert/testGithub.git
cd testGithub
git sparse-checkout set banana
Run Code Online (Sandbox Code Playgroud)
git版本:2.25.1
错误日志:
Cloning into 'testGithub'...
fatal: cannot change to '://github.com/gitexpert/testGithub.git': No such file or directory
error: failed to initialize sparse-checkout
Run Code Online (Sandbox Code Playgroud) 我正在尝试从 git 存储库中稀疏签出一个子目录。
该存储库包含多个 WordPress 插件,我想一一查看它们。通过下面发布的解决方案,我遇到了这样的问题:每次我检查子目录的父目录时也会检查并且插件无法工作。
我尝试过这样的事情是否可以在不先检查整个存储库的情况下进行稀疏结帐?以及用于简单 Web 部署的 Git 稀疏结帐之类的东西。
我真的希望有人可以帮助我,因为我只是觉得我错过了一些信息。
谢谢。
git subdirectory git-checkout sparse-checkout git-sparse-checkout
I have a git repository with a bunch of large csv in them, which I don't want to clone, so I came across git sparse-checkout and this post: https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/
From this post I took following:
git clone --no-checkout https://github.com/john_doe/repo-with-big-csv.git
cd repo-with-big-csv
git sparse-checkout init --cone
Run Code Online (Sandbox Code Playgroud)
Then I edit the .git/info/sparse-checkout and add the following (adapted from example in page above):
/*
!**/*.csv
Run Code Online (Sandbox Code Playgroud)
但它似乎不能正常工作。有些文件夹克隆后git pull,有些则没有。我还注意到一个警告,当我这样做时,git sparse-checkout list我得到:
warning: unrecognized pattern: '**/*.csv'
warning: disabling cone pattern matching
/* …Run Code Online (Sandbox Code Playgroud) 有很多关于稀疏结账的文章和问题。不幸的是我没有找到具体的例子。我想让以下示例工作:
cd ~
mkdir sub && cd $_
git init
mkdir foo && touch $_/foo
mkdir bar && touch $_/bar
git add .
git commit -am "Initial commit"
Run Code Online (Sandbox Code Playgroud)
cd ~
mkdir project && cd $_
git init
git submodule add ../sub sub
git config -f .gitmodules submodule.sub.shallow true
git config -f .gitmodules submodule.sub.sparsecheckout true
echo foo/* > .git/modules/sub/info/sparse-checkout
git commit -am "Initial commit"
git submodule update
cd sub
git checkout .
Run Code Online (Sandbox Code Playgroud)
在这一点上,我希望sub文件夹只包含foo/foonot bar。不幸的是它不起作用: …
我一直在寻找一种方法来仅克隆我的一个项目的子目录。显然我找到了这个答案。它设计精良,分步解决方案很好地解释了如何实现这一点。现在最后它引用了这样的文档:
“稀疏签出”允许稀疏地填充工作目录。它使用skip-worktree位(参见git-update-index(1))来告诉Git工作目录上的文件是否值得查看。
我的问题是我无法理解这意味着什么。我从 Git 中学到的一件事是,它是一个很棒的工具,但在实施某些操作之前,了解幕后发生的事情从长远来看确实可以帮助您。
所以,问题是:
稀疏结帐如何工作以及输出是什么?