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

Repo-A /Folder-1 
       /Folder-2
       /Folder-3

我想将Folder-1Folder-2迁移到 Repo-B。 我知道我可以使用此处给出的方法迁移单个目录 - 如何将文件从一个 git repo 移动到另一个(不是克隆),保留历史所以我用Folder-1这样做,但是当我再次做同样的事情时迁移第二个文件夹我得到了重复的提交,一些提交在过去影响了Folder-1Folder-2 我该如何解决这个问题?

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

#1楼 票数:0 已采纳

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

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

  ask by user3481478 translate from so

未解决问题?本站智能推荐:

2回复

如何将文件夹从一个Git存储库共享到另一个?

我有两个共享数据库架构的项目 [git repos],但只有一个项目实际包含 DDL SQL 文件。 我知道我可以将包含 SQL 的那个添加为子树,但这将接管所有代码和所有内容 - 我所需要的只是包含 SQL 文件的目录,因此我可以在第二个项目中创建模式以使用 H2 进行测试. 我真的不想尝试手动保
1回复

如何将文件从一个文件夹移动到同一个git存储库中的另一个文件夹,保留历史记录[重复]

这个问题在这里已有答案: 是否可以在Git中移动/重命名文件并保留其历史记录? 9个答案 我正在使用git-bash-1.8.4 Git结构:Master -folder1 / file1,file2,file3 .. -folder2 / -folder3 / 所以
1回复

如何仅将一个Git存储库的一部分(子集,文件夹)迁移到另一个

我有一个用于开发的bitbucket存储库A。 生产代码只是bitbucket存储库中代码的子集。 我想继续使用仓库A进行开发,仅将生产代码子集迁移到仓库B。这可能吗? 即 源库A (到位桶) 新资料库B (GitHub的) (回购B没有b.py)。
1回复

在Linux中将git存储库从一个文件夹克隆到另一个文件夹

我将网站上传到共享服务器,并且由于要跟踪更改,我在共享服务器根文件夹中的所有站点文件上运行了git init 。 这创建了一个新的子文件夹.git 。 现在,我想在一个单独的文件夹中创建网站副本以进行开发,并认为最简单的方法是将现有存储库克隆到新文件夹中。 我的git存储库位于/www/
2回复

如何从一个Git存储库迁移到另一个Git存储库?

我需要从一个 Git 存储库迁移到另一个 Git 存储库。 目的地不为空。 以前显然已经有人做了这个工作,但现在所有的分支都已经过时了。 情况是这样的: 源远程存储库: repo_source 分支机构: 分支_A 分支_B 分支_C 分支_D 目标远程仓库: repo_dest分支: 分
1回复

如何使用git子树将子文件夹的多个分支迁移到另一个仓库

我喜欢从存储库1迁移具有完整历史记录的子文件夹: 到存储库2中相同的目标文件夹: 用*表示对子文件夹的限制。 到目前为止,我已经使用 然后我在存储库2中的b *创建了分支2,但是 不起作用,因为 有解决问题的建议吗? 后来,如何将分支2与存储库2中的master合并?
1回复

如何将一个git存储库添加到另一个git存储库的子文件夹中?

我在一个名为AA的文件夹中有一个GIT存储库,我有第二个名为BB的 GIT存储库。 我想将AA存储库作为子文件夹导入BB存储库。 之前: 后: 我怎样才能做到这一点?
1回复

如何将文件夹从一个存储库传输到另一个存储库?

我错误地创建了第二个 repo( Repo-2 )。 我可以轻松地删除它并再次在现有的 repo( Repo-1 ) 中添加文件。 但我想知道我是否可以将文件夹( folder-xyz )从Repo-2转移到Repo-1 此外,如果重要的话, Repo-1 的默认分支是“master”,而Repo-