镜像git repo时排除某些文件



在使用mirror命令镜像git repo时,我正在寻找排除一些文件夹的方法。特别是.github文件夹。

我按照以下步骤镜像

1. git clone --mirror mirror repo
2. cd repo
3. git push --mirror localrepo

在步骤2之后,我可以删除.github文件夹&推动本地回购?

通常情况下,可以删除文件和文件夹,但这对后续的git push没有影响。此外,对于git clone --mirror,您不会得到签出,因为--mirror意味着--bare,这意味着没有工作树。

这里的问题很简单:Git不会推送(或获取/克隆(文件。Git推送提交。(通常,克隆操作也不复制分支——只复制提交——但--mirror选项会改变这种行为,随后的git push --mirror会推送所有两个或更多级别的引用。(

委员会确实包含文件。但是,您在非裸存储库中看到和使用的文件不在存储库中。它们是从存储库中复制出来的副本。修改或删除这些文件对存储库没有影响,该存储库主要由提交组成。所有提交都是只读的:任何提交都不能更改,甚至Git本身也不能更改。因此,只要这些提交继续存在,那么具有现有快照的现有提交就会继续具有这些快照。

相反,您可以做的是获得一个克隆(任何克隆都可以这样做(,并将其所有提交复制到新克隆中的新的、改进的但不同的提交克隆的提交将包含它们所包含的任何内容,因为您刚刚制作了它们,这完全在您的控制之下。这个过程,过滤来自某个现有存储库的每个提交,以生成一个新的、不同的(不兼容的(存储库,应该只做一次,因为每次都会造成极大的破坏:每个人都必须完全放弃旧的存储库,克隆并使用新的存储库。

Git发行版中有一个程序可以做到这一点:git filter-branch。它很难正确使用,并且被官方弃用(一个意思是"不要使用这个"的花哨单词(。新的替换git filter-repo还没有包含在Git发行版中,但它肯定更容易正确使用。还有一种东西叫做BFG(与书/电影无关(;请参阅如何从Git存储库中的提交历史记录中删除大文件?

为了尽可能清楚,过程将是:

  • git clone --mirror(如您现在所做(,或者不带--mirrorgit clone,然后为每个远程跟踪名称创建本地分支(如果您拥有的筛选工具拒绝在裸存储库上工作(
  • 使用其中一种筛选方法来创建一个全新的存储库
  • git push新的存储库,在您对新的存储库看起来正确感到满意之后,也许也可以像现在这样使用--mirror

最新更新