【发布时间】:2014-11-25 21:44:17
【问题描述】:
我们需要将 Git 存储库从一个网络导入到另一个网络。出于安全原因,它必须作为文本文件传递,代表内部文件的可读版本(存储库的所有 blob,或至少两个 blob 之间的所有差异)。从.git 目录创建 tar 不好(安全扫描不可读),git bundle 格式也不好。
可能的候选者是补丁文件(安全扫描知道处理补丁的 base64 中的二进制文件)。它非常适合线性回购,但我们也需要合并提交。我们考虑了将在源代码中执行的脚本:git log -p -m --parents --first-parent > file,并且在 dest 将解析该文件并将:
- 使用
git am逐个提交应用它 - 在每个分支(一个父母的第二个孩子)将创建分支(名称为
branch<hash-of-first-commit>) - 对于每个合并都会做:
git merge <branch-name> --no-commit -s ours,比第一父差异的git apply,比git commit ...
之后,我们只需要将分支重命名为真实名称,就完成了。我没有看到缺陷,但它还没有实现。
问题:
- 是否存在用于此目的的有效解决方案(脚本、工具)?
- 如果不是 - 我描述的过程中是否存在任何缺陷,导致无法准确反映提交之间的正确连接(我们不必保留原始 提交哈希)?
【问题讨论】: