如何在维护与这些文件关联的提交的同时将文件从 RepoA 导入到 RepoB?
Posted
技术标签:
【中文标题】如何在维护与这些文件关联的提交的同时将文件从 RepoA 导入到 RepoB?【英文标题】:How to import files from RepoA to RepoB whilst maintaining the commits associated to these files? 【发布时间】:2017-05-10 15:17:10 【问题描述】:在RepoA
内部,有一个目录(directoryA
),其中包含一些文件(file1
、file2
、file3
),我想将这些文件从RepoA
移动到RepoB
。
这是RepoA
:
RepoA
directoryA
file1
file2
file3
directoryB
file1
file2
file3
在我想做的事情之后,RepoB
看起来像:
RepoB
directoryA
file1
file2
file3
我可以从RepoA
下载directoryA
并将其上传到RepoB
,但我会丢失与file1
、file2
和file3
相关的提交。
我也无法将整个 RepoA
转移到 RepoB
(如在合并中),因为来自 directoryB
的提交与 RepoA
无关。
编辑:我尝试使用git filter-branch --subdirectory-filter directoryName -- --all
这对我不起作用,每次我在执行该命令后尝试拉动时都会收到错误:
fatal: refusing to merge unrelated histories
【问题讨论】:
你的意思是你希望保留来自回购 A 的历史记录?全部还是只针对与目录相关的文件? 我只想要我正在移动的文件的历史记录,而不是整个 Repo A 的历史记录。 【参考方案1】:首先,请新建一个分支并检查一下这个过程,因为下面的操作会修改本地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>
如果您在步骤(7)
期间收到错误:fatal: refusing to merge unrelated histories
,您可以通过执行git pull RepoA <branch> --allow-unrelated-histories
来忽略不相关的历史记录
然后file1
、file2
和file3
的提交历史将显示在 RepoB 中。可以使用gitk --all
查看更清晰。
更多详情请参考here。 (前两个 cmets(this 和 this)可能会进一步澄清)。
【讨论】:
不起作用。 repo-a 中的其他目录消失了。此外,我无法从本地 repo-a 拉到 repo-b:我收到错误 >> 致命:拒绝合并不相关的历史 我刚读完你提到的参考资料,也读了 cmets。所有这些总是导致相同的错误并且它总是发生在同一个步骤(拉步骤)$致命:拒绝合并不相关的历史 是的,在第一个命令之后,你会发现 RepoA 只有包含在子文件夹中的文件现在位于 RepoA 的根目录中。这就是第二条和第三条命令的原因:再次将文件放入子文件夹中。对于 git pull 步骤,你可以试试git pull RepoA master --allow-unrelated-histories
。
这可能意味着什么?您知道我是否应该担心此存储库中将来可能发生的事情吗?任何历史冲突之类的。
这是因为您的 RepoA 和 RepoB 没有相关的提交、文件或历史记录。当你真正想拉取或合并时,获取fatal: refusing to merge unrelated histories
的信息并不重要,只需添加--allow-unrelated-histories
即可。以上是关于如何在维护与这些文件关联的提交的同时将文件从 RepoA 导入到 RepoB?的主要内容,如果未能解决你的问题,请参考以下文章
应用商店提交“请使用与团队 ID 关联的配置文件......” [关闭]