【发布时间】:2019-04-04 18:04:12
【问题描述】:
我有一个旧的私人存储库,其中包含我想放入 GitHub 中的文件,但是我只想包含某些文件,或者可能只包含具有某些文件扩展名的文件,以及它们的提交历史记录。
但是我不想在提交历史记录中包含任何排除的文件。
我想最好提供一个我想复制的文件列表的文件。
【问题讨论】:
标签: git github repository
我有一个旧的私人存储库,其中包含我想放入 GitHub 中的文件,但是我只想包含某些文件,或者可能只包含具有某些文件扩展名的文件,以及它们的提交历史记录。
但是我不想在提交历史记录中包含任何排除的文件。
我想最好提供一个我想复制的文件列表的文件。
【问题讨论】:
标签: git github repository
以下是您可以解决的方法。
git init 以将其初始化为 git 存储库。git clone -n [path to your old private git repo]。这将克隆但不会签出任何文件。您将只剩下旧私有仓库的 .git/ 文件夹。git checkout [file you want]。您可能可以在这里使用通配符(您提到了文件扩展名)。【讨论】:
文件没有提交历史。提交是历史,提交有文件。
您要么有这些提交(因此这些文件加上所有 其他 文件),或者您没有这些提交(因此没有这些文件)。
如果您想要一个仅这些文件存在的历史记录,而没有包含这些文件的提交中的任何其他文件,则必须构建一个新的历史记录 em> 只有那些文件存在。
具体如何执行此操作取决于您。您可以进行一次提交(没有额外的历史记录——新的历史记录只是一次提交,文件保持原样)。这或多或少与Mike Faber's answer 相同。或者,您可以使用git filter-branch 或The BFG 编辑存储库的克隆,生成一系列新的替换提交,其中包含您想要保留的文件,但避免您想要丢弃的文件。然后,您将获得新的虚构历史,其中仅提交了这些文件。
请注意,这一切都对原始存储库及其提交没有影响:您正在创建一个全新的存储库,其中包含仅这些文件出现在提交中的新历史。 如何实现这个结果并不重要。出现这些文件而不是其他文件的历史记录根据定义是新的不同历史记录,因此属于新的不同存储库。
(通常,只需文件的最新副本就足够了,在这种情况下,只需使用一种方法,通过一次提交创建存储库,保存文件的最新版本。这通常比编写花哨的过滤器分支过滤器更容易. 我没有真正使用过 BFG;也许这也使这项工作变得容易。)
【讨论】: