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