首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将不同路径下的多个文件夹从一个git存储库迁移到另一个?

如何将不同路径下的多个文件夹从一个git存储库迁移到另一个?
EN

Stack Overflow用户
提问于 2020-02-21 18:15:20
回答 1查看 84关注 0票数 0

假设我们有Repo-ARepo-B。我在Repo-A中有一个文件夹结构,如下所示:

代码语言:javascript
复制
Repo-A /Folder-1 
       /Folder-2
       /Folder-3

我想将Folder-1Folder-2迁移到Repo-B。我知道我可以使用这里给出的方法迁移单个目录- How to move files from one git repo to another (not a clone), preserving history,所以我使用Folder-1这样做,但是当我再次做同样的事情来迁移第二个文件夹时,我得到了重复的提交,一些提交在过去同时影响了Folder-1Folder-2。我该如何解决这个问题呢?

我还尝试将所有想要迁移的文件放在一个特定的文件夹中,但在迁移该文件夹时,我丢失了提交历史记录。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-21 19:45:18

这听起来像是您想要一个包含两个文件夹中所有文件更改的历史记录。你不能用--directory-filter做到这一点,但是你仍然可以在--index-filter中使用filter-branch

代码语言:javascript
复制
git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch -- :/:* :/!:Folder-1 :/!:Folder-2` --prune-empty -- --all

使用git rm作为index-filter通过将原始提交加载到索引、删除一些文件并提交新索引,从每个原始提交创建新的提交。

每个:/!:...选项都告诉git rm不要删除指定的文件夹及其内容,而:/:*则告诉它删除其他所有内容。

--prune-empty选项从新的历史记录中删除任何只更改了您保留的文件夹之外的文件的提交-因为这些文件看起来在新的历史记录中没有做任何事情。如果您希望保留这些提交,则可以忽略此选项。

上面的命令将文件保存在其原始目录中。如果您想要一些不同的东西,那么您可能需要使用--tree-filter而不是--index-filter。该选项相当慢(特别是当repo很大时),但更容易进行更复杂的更改(因为筛选器脚本只需对磁盘上的文件进行操作,而不是直接转换索引)。

也就是说,在最近的某个时候,文档建议不要使用filter-branch。我还不熟悉他们建议使用的工具。

因此,这里是filter-branch文档,您可以根据警告查找不同的工具,或者了解有关上述过程的更多信息:https://git-scm.com/docs/git-filter-branch

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60336441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档