我想将一个充满二进制数据的目录 git-push 到远程服务器。
由于这可能需要几天时间,我在本地提交并一次推送一个文件(如果我一次提交所有内容并推送,如果传输中断,则必须从头开始重新启动,对吗?)。
当一切都被转移时,我想将所有这些提交压缩成一个。如果我在本地 squash 然后推送,所有数据都在重新传输!这违背了我的战略目的。
也许我可以登录到遥控器,然后远程重复壁球操作,但是有没有更好的方法来做我想做的事情。如何通知 git 所有敏感数据都已经在服务器上?
我想将一个充满二进制数据的目录 git-push 到远程服务器。
由于这可能需要几天时间,我在本地提交并一次推送一个文件(如果我一次提交所有内容并推送,如果传输中断,则必须从头开始重新启动,对吗?)。
当一切都被转移时,我想将所有这些提交压缩成一个。如果我在本地 squash 然后推送,所有数据都在重新传输!这违背了我的战略目的。
也许我可以登录到遥控器,然后远程重复壁球操作,但是有没有更好的方法来做我想做的事情。如何通知 git 所有敏感数据都已经在服务器上?
首先,二进制文件在 VCS 中不是最好的管理;)
其次,如果必须,您可以在远程 repo 上设置一个钩子,以便在接收到某个提交时执行压缩(比如只包含一个特殊文件的推送,验证所有以前的提交都可以被压缩)。
我不确定确切的实现,但似乎任何涉及 git squash 的解决方案都必须在本地和远程端进行,以确保类似的历史。
如果其他贡献者对所述远程存储库有其他提交,那将是非常安全的。那么历史将不可能在您的本地存储库和远程端已经完成的操作之间正确同步......
在这样一个特殊的推送之后,在远程端进行壁球之后唯一的其他行动方案是重命名您的当前分支,并拉出远程分支以将所述分支的本地版本重置为远程端的版本。
我不确定,但我认为如果 git 已经拥有这些对象,它就不会传输它们。从技术上讲,提交不包含您的二进制对象,而只是对包含对象引用的树的引用。每个对象都是唯一的 id(SHA),因此它应该知道它是否已经拥有它们。所以通常不需要第二次发送二进制对象。
只需尝试一下,它应该可以按您的意愿工作,而无需执行任何操作。