如何按文件类型筛选回购的拉取



是否可以提取一个git repo,但只包括一些文件类型?例如:我可以只提取repo的.py文件吗?

我已经尝试过过滤和稀疏,但没有太多成功。。。

我的目标是运行一个命令,将所有以.py结尾的文件复制/克隆/拉入我的硬盘。文件的来源是一个git-reo

正如评论中所指出的,Git不处理文件,而是处理commit。当您使用git clone时,您将获得一个新的Git存储库。Git会将其他现有存储库中的每个提交复制到该存储库中。所以你得到了他们所有的承诺。

有趣的是,git clone不复制它们的任何分支。Git在您自己的存储库中将它们的每个分支名称转换为远程跟踪名称。然后Git在您的存储库中创建一个分支,使用它们的一个分支来设置所有细节。所以看起来你有他们的一个分支——但事实上,你只是有了自己的分支,与他们的分支同名

关于";过滤";(这是一个棘手的术语,对不同的人有多种不同的含义):

  • 虽然每次提交都有每个文件的完整副本,但这些文件存储在压缩的、仅限Git的只读、消除重复的格式中。因此,即使hugefile.py存在于一百万次提交中,如果hugefile.py只有七个不同的版本,那么hugefile.py也只有七个副本(每个都略有不同)。百万提交所有共享

  • 提交中的文件对您来说是完全不可用的。它们是只使用Git的形式。Git不会向您显示这些文件,因为它们是无用的压缩形式。相反,当您git checkout某些提交或出于相同目的使用git switch(Git 2.23中的新内容)时,1Git会将文件复制到可用的形式中

您看到和使用的文件是这些复制的("已签出")文件。他们住在一个我们称之为工作树的地区。

当你谈到过滤时,你会想到以下几点:

  • Git提供了制作浅层克隆的能力。浅克隆是指我们故意省略一些较旧的提交。这里的大多数东西仍然有效,您可以根据需要加深浅层克隆。

  • Git提供了制作单个分支克隆的能力。这通常比浅层克隆的好处小得多,但默认情况下,如果使用浅层选项,则也会获得单个分支选项。

    这两者结合在一起可以避免获得最多的提交,因此,如果您的目标是通过只在一个分支上获得最后两到三次提交来节省空间,那么这种默认的浅层单分支模式就是您想要的。然而,在许多存储库中,节省的成本是最低的,因为Git所做的压缩非常好。它只会在大的二进制文件中崩溃。如果您正在克隆的存储库没有很多大的二进制文件,那么这里的节省往往是最小的。

  • 有一个新功能还没有得到很好的支持,称为部分克隆。这里的想法是,如果你有一个一直在线(或几乎一直在线)的网络,Git将所有复制到本地机器的事实对你来说可能不那么重要。这种克隆在真正需要之前不会麻烦将东西复制到你的机器上。

    因为它太新了,所以这里的工具很难使用。除非你真的需要或想深入Git,否则不要尝试这样做。

  • 今天,有一个旧功能正在获得新的生命,称为稀疏结账。使用稀疏签出,您的工作树不会被提交后的每个文件填满。你仍然每个文件,只是你没有看到它们。相反,您的工作树只获取文件的某个子集。

    这几乎不节省任何空间,除非工作树比Git存储库大。它的主要用途是清理你的工作区域。然而,当与部分克隆技巧相结合时,它具有的潜力,可以节省巨大的空间和时间。这就是为什么它今天有了新的生命。不幸的是,这种组合还没有准备好用于一般用途。

还有一件事浮现在脑海中,但你几乎肯定应该避免它:过滤器让人想起git filter-branchgit filter-repo。这些可以让您接受一些现有的提交,并将它们复制到新的、据称改进的提交中。当您这样做时,您的磁盘使用量最初会变得更大,因为您有旧的提交和新的提交。千万不要这样做来节省空间!相反,如果且仅当提交在某种程度上很可怕,或被有毒物质污染,或其他什么情况下,才执行。当你完成过滤后,你就有了一个全新的存储库,有了全新的提交:你让每个人都完全抛弃他们的旧存储库,切换到你闪亮的新存储库。(或者,如果他们认为那些古老的"被污染"的承诺仍然是蜜蜂的膝盖,那么他们完全无视你。😀)

TL;DR:这种";过滤";可能是个坏主意。在开始之前,请确保您真的想这样做。


1git checkout命令的操作模式太多,边缘太锋利。这就像一把有故障防护装置的电锯。因此,Git人员制作了一个更好、功能较弱的工具git switch,它不会错误地切断你的拇指。因为Git用户都是脾气暴躁的老家伙,他们讨厌改变😀现有的CCD_ 12仍然存在并且仍然以相同的方式工作。用你喜欢的。(旧的checkout经过了改进,不再像以前那样经常把你的拇指从上切下来。但如果你喜欢使用更安全的工具集,请记住,git checkout更危险的模式现在在新型的git restore中;安全部分复制到git switch中。)

最新更新