![](/img/trans.png)
[英]How to move some files from one git repo to another (not a clone), preserving history
[英]How to copy specific files from one git repo to another, preserving history
我有一个旧的私有存储库,其中包含要放入GitHub的文件,但是我只想包含某些文件,或者仅包含具有某些文件扩展名的文件,以及它们的提交历史记录。
但是我不想在提交历史记录中包括任何排除的文件。
我想提供一个我要复制的此类文件列表的文件是理想的。
这是您可能的处理方法。
git init
以将其初始化为git存储库。 git clone -n [path to your old private git repo]
。 这将克隆但不检出任何文件。 您将只剩下旧私有仓库的.git /文件夹。 git checkout [file you want]
。 您可能在此处使用通配符(您提到了文件扩展名)。 文件没有提交历史记录。 提交是历史记录,并且提交具有文件。
您要么拥有那些提交(因此得到那些文件加上所有其他文件),要么就没有那些提交(因此就没有那些文件)。
如果想要一个仅包含这些文件的历史记录,而没有包含这些文件的提交中的任何其他文件,则必须构造一个仅包含这些文件的新历史记录 。
具体如何操作取决于您自己。 您可以进行一次提交(没有其他历史记录-新的历史记录只是一次提交,并按原样保留文件)。 这差不多是Mike Faber的答案所能带来的 。 或者,您可以使用git filter-branch
或BFG编辑存储库的克隆,从而生成一系列新的替换提交,这些提交包含要保留的文件,但要避免丢弃想要的文件。 然后,您将拥有新的伪造历史记录,其中仅提交了那些文件。
请注意,所有这些操作均对原始存储库及其提交没有任何影响:您正在使用一个新的历史记录来构成一个全新的存储库,其中新历史记录中仅那些文件出现在提交中。 如何获得此结果无关紧要。 在这些文件中出现的历史记录,而不是其他的文件,是通过定义一个新的和不同的历史,因此,在新的和不同的资源库属于。
(通常,仅使用文件的最新副本就足够了,在这种情况下,只需使用一种使一次提交的存储库保存文件的最新版本的方法。通常比编写奇特的过滤器-分支过滤器要容易。我有未实际使用BFG;也许这也使这项工作变得容易。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.