|
|
1
155
我给出了一个解决方案 here :
这个过程的一个好处是它会离开 无版本 文件和目录就位。 希望这有帮助。
不过,只有一个警告:如果你的
程序完成后,添加最后一步:
当然,如果
|
|
|
2
78
|
|
|
3
20
也许,简单地(与前面的答案类似,但使用更简单的命令)在每个单独的旧存储库中进行提交,将内容移动到适当命名的子目录中,例如:
然后通过类似smth的方式,将三个独立的回购协议合并为一个新的回购协议:
然后你会保存你的历史记录,但会继续进行一次回购。 |
|
|
4
20
你可以试试
subtree merge strategy
它将使你把回购协议B合并到回购协议A中
|
|
|
5
9
git filter branch解决方案运行良好,但请注意,如果git repo来自SVN导入,它可能会失败,并显示如下消息:
在这种情况下,您需要从过滤器分支中排除初始修订,即更改
http://www.git.code-experiments.com/blog/2010/03/merging-git-repositories.html |
|
|
6
6
git stitch回购自 Aristotle Pagaltzis' answer 仅适用于具有简单线性历史的存储库。 MiniQuark's answer 适用于所有存储库,但它不处理标记和分支。 我创建了一个程序,其工作方式与MiniQuark描述的相同,但它使用一个合并提交(有N个父级),并重新创建所有标记和分支以指向这些合并提交。 看到了吗 git-merge-repos repository 例如如何使用它。 |
|
|
7
5
@MiniQuark解决方案对我帮助很大,但不幸的是,它没有考虑源存储库中的标记(至少在我的情况下)。下面是我对@MiniQuark答案的改进。
这只是另一个解决方案。希望它能帮助别人,帮助我:) |
|
|
8
3
我创建了一个工具来完成这项任务。所使用的方法类似(内部生成一些东西,比如--filter branch),但更友好。是GPL2.0吗 |
|
|
9
3
实际上,git stitch repo现在支持分支和标记,包括带注释的标记(我发现我报告了一个bug,它得到了修复)。我发现标签很有用。因为标签附在提交上,而一些解决方案(比如Eric Lee的方法)无法处理标签。您尝试从导入的标记创建一个分支,它将撤消任何git合并/移动,并将您发回,就像合并存储库与标记来自的存储库几乎相同一样。此外,如果在“合并/合并”的多个存储库中使用相同的标记,也会出现问题。例如,如果你有回购A和B,两者都有标签rel_1.0。您将repo A和repo B合并到repo AB中。由于rel_1.0标记位于两个不同的提交上(一个用于A,一个用于B),哪个标记在AB中可见?从导入的回购A或导入的回购B中选择标签,但不能同时选择两者。 git stitch repo通过创建rel_1.0-A和rel_1.0-B标记来帮助解决这个问题。您可能无法签出rel_1.0标记,但至少可以同时看到这两个标记,理论上,您可以将它们合并到一个公共的本地分支中,然后在合并的分支上创建rel_1.0标记(假设您只是合并而不更改源代码)。最好使用分支机构,因为您可以将每个回购协议中类似的分支机构合并到本地分支机构中。(dev-a和dev-b可以合并到本地dev分支中,然后可以推送到源代码)。 |
|
|
10
2
你建议的顺序
会有用,但你会失去你的提交历史记录。 |
|
|
11
1
要在主项目中合并第二个项目,请执行以下操作: A) 在第二个项目中
B) 在主要项目中:
在这个分支中,完成所有需要进行的重大转换,并提交它们。 C) 然后回到主控和两个分支之间的经典合并:
|
|
|
12
0
我也会把我的解决方案放在这里。它基本上是一个相当简单的bash脚本包装器
|
|
|
13
0
这个bash脚本围绕 sed tab character 问题(例如在MacOS上)和丢失文件的问题。
这是 miniquark , marius-butuc 和 ryan 我的帖子。为他们干杯! |
|
Harry · 如何在编译时获取克隆的git仓库的标签 1 年前 |
|
Ooker · 如何从blob中删除秘密? 1 年前 |
|
|
hasdrubal · git日志图智能分支过滤器 1 年前 |
|
|
J. Doe · 为什么git中没有跟踪git文件? 1 年前 |