如何将不同路径中的多个文件夹从一个git存储库迁移到另一个git存储库?
假设我们有如何将不同路径中的多个文件夹从一个git存储库迁移到另一个git存储库?,git,Git,假设我们有Repo-A和Repo-B。我在Repo-a中有一个文件夹结构,如下所示: Repo-A /Folder-1 /Folder-2 /Folder-3 我想将Folder-1和Folder-2迁移到Repo-B。我知道我可以使用这里给出的方法迁移单个目录-因此我使用Folder-1进行迁移,但是当我再次迁移第二个文件夹时,我会得到重复的提交,一些提交在过去影响了文件夹1和文件夹2。我怎样才能解决这个问题 我还尝试将所有要迁移的文件放在一个特定的文件夹中,但
Repo-A
和Repo-B
。我在Repo-a
中有一个文件夹结构,如下所示:
Repo-A /Folder-1
/Folder-2
/Folder-3
我想将Folder-1
和Folder-2
迁移到Repo-B。我知道我可以使用这里给出的方法迁移单个目录-因此我使用Folder-1
进行迁移,但是当我再次迁移第二个文件夹时,我会得到重复的提交,一些提交在过去影响了文件夹1
和文件夹2
。我怎样才能解决这个问题
我还尝试将所有要迁移的文件放在一个特定的文件夹中,但在迁移该文件夹时,我丢失了提交历史记录。听起来您需要一个包含对两个文件夹中的文件所做的所有更改的历史记录。您不能使用
--目录过滤器
,但仍然可以使用过滤器分支
和--索引过滤器
git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch -- :/:* :/!:Folder-1 :/!:Folder-2` --prune-empty -- --all
使用git rm
作为索引过滤器
通过将原始提交加载到索引、删除一些文件并提交新索引,从每个原始提交创建一个新提交
每个:/!:
options告诉git-rm
不要删除命名文件夹及其内容,:/:*
告诉它删除所有其他内容
--prune empty
选项将从新历史记录中删除仅在您保留的文件夹外更改文件的任何提交,因为这些文件看起来好像在新历史记录中没有做任何事情。如果仍要保留这些提交,可以忽略此选项
以上内容将文件保留在其原始目录中。如果您需要不同的内容,则可能需要使用--树过滤器
而不是--索引过滤器
。该选项的速度要慢得多(特别是在回购协议很大的情况下),但更容易进行更复杂的更改(因为筛选脚本只需对磁盘上的文件进行操作,而不是直接转换索引)
也就是说,在最近的某个时候,文档建议不要使用过滤器分支
。我还不熟悉他们建议使用的工具
因此,这里是过滤器分支
文档,您可以根据警告查找其他工具,或者了解有关上述过程的更多信息: