繁体   English   中英

如何将特定文件从一个git存储库复制到另一个,从而保留历史记录

[英]How to copy specific files from one git repo to another, preserving history

我有一个旧的私有存储库,其中包含要放入GitHub的文件,但是我只想包含某些文件,或者仅包含具有某些文件扩展名的文件,以及它们的提交历史记录。

但是我不想在提交历史记录中包括任何排除的文件。

我想提供一个我要复制的此类文件列表的文件是理想的。

这是您可能的处理方法。

  1. 为新存储库创建一个新文件夹。
  2. 在新文件夹中运行git init以将其初始化为git存储库。
  3. 运行git clone -n [path to your old private git repo] 这将克隆但不检出任何文件。 您将只剩下旧私有仓库的.git /文件夹。
  4. 对所需的每个文件运行git checkout [file you want] 您可能在此处使用通配符(您提到了文件扩展名)。
  5. 拥有所需的所有文件后,请删除clone命令添加的远程源,然后添加一个远程命名的origin,以及到新存储库位置的路径。

文件没有提交历史记录。 提交历史记录,并且提交具有文件。

您要么拥有那些提交(因此得到那些文件加上所有其他文件),要么就没有那些提交(因此就没有那些文件)。

如果想要一个仅包含这些文件的历史记录,而没有包含这些文件的提交中的任何其他文件,则必须构造一个仅包含这些文件的新历史记录

具体如何操作取决于您自己。 您可以进行一次提交(没有其他历史记录-新的历史记录只是一次提交,并按原样保留文件)。 这差不多是Mike Faber的答案所能带来的 或者,您可以使用git filter-branchBFG编辑存储库的克隆,从而生成一系列新的替换提交,这些提交包含要保留的文件,但要避免丢弃想要的文件。 然后,您将拥有新的伪造历史记录,其中仅提交了那些文件。

请注意,所有这些操作均对原始存储库及其提交没有任何影响:您正在使用一个新的历史记录来构成一个全新的存储库,其中新历史记录中仅那些文件出现在提交中。 如何获得此结果无关紧要。 在这些文件中出现的历史记录,而不是其他的文件,是通过定义一个新的和不同的历史,因此,在新的和不同的资源库属于。

(通常,仅使用文件的最新副本就足够了,在这种情况下,只需使用一种使一次提交的存储库保存文件的最新版本的方法。通常比编写奇特的过滤器-分支过滤器要容易。我有未实际使用BFG;也许这也使这项工作变得容易。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM