如何在保持与这些文件关联的提交的同时将文件从RepoA导入RepoB?

时间:2016-12-26 04:36:21

标签: git github version-control repository commit

RepoA内,有一个目录(directoryA)包含一些文件(file1file2file3),我想从这些文件中移动这些文件RepoARepoB

这是RepoA

RepoA
    directoryA
        file1
        file2
        file3
    directoryB
        file1
        file2
        file3

在我想要做的之后,RepoB看起来像是:

RepoB
    directoryA
        file1
        file2
        file3

我可以从directoryA下载RepoA并将其上传到RepoB,但我会丢失与file1file2和{{ 1}}。

我也无法将整个file3转移到RepoA(如合并中),因为来自RepoB的提交在directoryB中无关紧要。

修改:我尝试使用RepoA

它对我不起作用,每次我在执行该命令后尝试拉动时都会收到错误:

git filter-branch --subdirectory-filter directoryName -- --all

1 个答案:

答案 0 :(得分:2)

首先,请创建一个新分支并检查此过程,因为以下操作将修改本地RepoA的历史记录并删除一些文件:

在本地RepoA

(1) git filter-branch --subdirectory-filter directoryA <branch>
(2) mkdir directoryA
(3) mv * directoryA
(4) git add .
(5) git commit -am 'message'

在本地RepoB

(6) git remote add repoA <local RepoA’s path>
(7) git pull RepoA <branch>

如果您在步骤fatal: refusing to merge unrelated histories中收到错误:(7),则可以通过执行git pull RepoA <branch> --allow-unrelated-histories

来忽略不相关的历史记录

然后,file1file2file3的提交历史记录将显示在RepoB中。您可以使用gitk --all更清晰地查看。

有关详细信息,请参阅here。 (前两个评论(thisthis)可能会进一步澄清)。