基础设施:我有两台主机(A和B),我无法从A连接到B,反之亦然。没有主机C可以从主机A和主机b到达。我可以两个方向发送邮件。允许文本附件。不允许其他附件。可能还有其他问题……
我想从主机a克隆一个git存储库到主机b。我希望能够在两个主机上工作。我想把我的提交从A推到B,反之亦然。
问题:是否有一种简单的方法来传输提交(可用于我的基础设施)?我已经试过了:我可以使用git format-patch
来制作我提交的文本版本。但是在生成的文件中只有作者日期。提交者日期缺失。父提交丢失了。我可以看另一个宿主,所以我知道这两个信息。然后,我可以使用git commit
与GIT_AUTHOR_DATE
和GIT_COMMITER_DATE
来生成具有正确提交哈希值的提交。
它工作:)但是我必须输入一些命令。如果我想传递更多的提交,我必须输入更多的命令。
您可以使用git bundle
来创建ref的存档。从手册页:
创建、解包和操作"bundle"文件。bundle用于"脱机"在没有活动"服务器"的情况下传输Git对象;坐在网络连接的另一边。
它们可用于创建存储库的增量备份和完整备份,并将一个存储库中的引用状态中继到另一个存储库。
由于需求是"仅文本",因此您可以对包进行十六进制或base64
编码,以获得可以在接收主机上还原的文本表示。
另一个快速而肮脏的解决方案是tar
您的repo和编码为文本。使用这种方法不能进行增量更新,原因很明显。
两种解决方案都避免了混淆提交者和作者信息的问题。如果原始存储库(在主机A上)包含具有不同作者和提交者信息的提交,则设置author == committer会丢失信息。