从Git仓库克隆单个文件

7
我想要克隆一个子目录 https://github.com/CoreyMSchafer/code_snippets/tree/master/Django_Blog/12-Password-Reset/django_project,从父目录中。

https://github.com/CoreyMSchafer/code_snippets.git

我阅读了一些 Stack Overflow 的答案,它们说 Git 没有设计用于从根文件夹下载特定文件。我在命令提示符中尝试了以下命令:git clone https://github.com/CoreyMSchafer/code_snippets.git -b code_snippets/tree/master/Django_Blog/12-Password-Reset/django_project,但没有成功。如果这可能是一个重复的问题。

1
请仅稀疏地从Git存储库中检出一个单独的文件,而不是整个存储库。 - blami
这个回答解决了你的问题吗? 如何从 git 存储库中稀疏地仅检出一个文件? - phd
2个回答

11
克隆整个存储库和下载之间存在区别。当您说克隆时,这意味着您对所有历史记录感兴趣,也就是存储库发展过程中文件所经历的变化。我认为使用git不可能做到这一点,但如果有相反的证据,我会很高兴证明自己错了。
然而,如果您只想“下载”该文件的最后一个“快照”(我认为这才是您真正想要的),那么您有几个选择:
1. 使用"git archive"命令:
git archive --remote=ssh://<address>/repo.git <BranchName|HEAD> /some/path/file.txt | tar -xO /some/path/file.txt > /tmp/file.txt
  1. 有可能您可以通过HTTP访问git仓库并使用wget下载文件。

阅读此SO主题线获取更多信息/思路。


0

如果您的 Git 代码库远程托管服务使用 Git 2.38+(2022年第三季度),它将实现“获取”功能:

请参见 commit 65da938(2022年8月23日),以及 commit e21e663commit 59c1752commit 5556891commit 53a5089commit b5624a4(2022年8月9日),作者为 Derrick Stolee (derrickstolee)
(由 Junio C Hamano -- gitster -- 合并于 commit 68ef042,2022年9月1日)

remote-curl:添加“get”功能

审核人员:Josh Steadmon
签署者:Derrick Stolee

未来的更改将需要使用最简单的下载机制通过HTTP(S)下载文件。
我们不希望假设另一侧的服务器了解有关Git协议的任何内容,而可以是简单的静态Web服务器。

为远程助手创建新的“get”功能,宣传“get”命令已经可用。
调用者可以发送包含“get <url> <path>”的行,以将位于<url>上的文件下载到<path>中。

gitremote-helpers现在在其手册页面中包含:

'get'

可以使用“get”命令从给定的URI下载文件。

gitremote-helpers现在在其手册页面中包含:

'get' <uri> <path>

从给定的 <uri> 下载文件到给定的 <path>

如果 <path>.temp 存在,则 Git 假定 .temp 文件是上一次尝试的部分下载,并将从该位置恢复下载。


我无法使它工作,你有get命令的可用示例吗? - EngineerAkki
1
@EngineerAkki 您需要一个支持该“get”调用的远程服务,但目前还没有这样的服务。正如此线程中所解释的那样,添加“get”是为了支持git clone --bundle-uri=<X>,而我在这里详细说明的“bundle-uri”仍然是“正在进行中”的工作。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接