如何将单个文件的历史记录从旧的Git存储库复制到新的存储库?

时间:2018-12-17 16:40:54

标签: git

我想简化my original complicated question

我在存储库中有以下文件:

E:\\a\b\FooOld\foo.java

几周前,我使用新的存储库将文件复制到另一个目录:

E:\\c\d\FooNew\foo.java

是否可以将foo.java的文件历史记录从旧存储库复制到新存储库?

2 个答案:

答案 0 :(得分:2)

这实际上是不可能的,原因很简单,因为Git中没有“文件历史记录”之类的东西。在Git中,历史记录只是所有提交的集合。如果添加提交,则添加历史记录。无论有什么承诺,这些都是历史。而且,每个提交代表文件全部的完整快照(嗯,该提交中的所有文件,但这有点多余)。

可以要求class Room { string id; string room3dmodellink; List<Mediaboards> mediaboards; } class Mediaboard{ string id; string mediaboard3dModleLink; List<Slide> slides; } class Slide{ string id; string imageLink; } 显示修改某些特定文件的提交。这种工作方式是git log遍历历史-向后,一次提交,换句话说,一次遍历-并且比较提交中的所有文件< / em>来上一个提交中的所有文件。如果您好奇的一个特定文件已更改,git log现在显示< / em>这个提交。然后,它继续(或更确切地说,返回)到上一个提交,无论它是否显示此提交,并使用相同的规则显示或不显示那个提交,依此类推。

答案 1 :(得分:1)

可以通过两个大步骤来完成。假设您有一个仓库A,其中包含要添加到其他仓库B上的文件:

  1. 使用git filter-branch创建仓库A的克隆,其中仅包含您要保留的文件的历史记录。

要实现此目的,如果您需要保留移动和重命名的历史记录,可以查看this answer,否则在Stack Overflow上还有很多其他答案可以使用{{1 }}。或者,您可以使用filter-repo,这似乎是重写历史记录的一种更快,更简单的方法。

重要:请记住在您的存储库的克隆上运行git filter-branch。我还建议在克隆上运行git filter-branch,这样就没有机会无意间将此剥离的版本推到原始版本。

  1. 合并将git remote rm origin剥离为A。在仓库B中,执行以下操作:

    2.1。创建从BB的远程连接:

      

    A;

    2.2。使用选项git remote add repo-A <git repository stripped A directory>拉动。如果两个仓库都使用--allow-unrelated-histories分支,则以下命令会将一个仓库合并到另一个仓库中:

      

    master

    2.3。删除远程连接:

      

    git pull repo-A master --allow-unrelated-histories