设置
我有一个由 4 台机器(Dev1、Dev2、服务器和笔记本电脑)组成的本地网络。
服务器具有您可能称之为主存储库的内容。
2 台开发计算机是开发发生的地方。
dev..commit...dev..commit...dev..commit...dev..commit...dev..commit.
。然后最终...
push to **Server**.
到目前为止一切都很好。这个循环效果很好。
备份策略
笔记本电脑具有其他计算机使用的相同存储库的克隆。此克隆具有从服务器、Dev1 和 Dev2 到存储库的远程。
在笔记本电脑上运行的计划任务每天在 ~3pm 从所有其他存储库获取所有提交。
由于备份操作是获取,因此Laptop设法维护每个存储库所在的列表,而不允许其各种头脑相互影响。
我认为这是一个很好的异地备份,因为机器每天都和我一起离开。
我想要实现什么
我想将此责任从我的笔记本电脑转移到另一个可能基于云的服务器。云1
但是,Cloud1 将无法找到 Dev1、Dev2 或位于防火墙后面的任何其他计算机。
所以我认为看看我是否可以找到一种方法来安排从每台开发机器到 Cloud1 的推送(抱歉术语含糊不清)是合理的。
然而,现在我们到达了问题的症结。
问题所在
推送不是获取的对立面。
如果我的每个开发计算机都尝试推送到 Cloud1,则它们的每个主分支(至少)将尝试更新云计算机的主指针。
当您想与他人分享您一直在做的工作时,推送是件好事。
我需要一个命令,它适用于在远程机器上备份所有提交和磁头,而不会影响该机器自己的磁头。
我不相信这目前是可能的。我正在研究其他方法。这个问题纯粹与 git 在没有合并的情况下推送的能力有关。(不是严格准确的,但读到这里你明白我的意思 - 我希望)
您可以显式指定要更新的引用规范。所以,如果 Dev1 确实如此
git push cloud +refs/heads/master:refs/remotes/dev1/master
而 Dev2 确实如此
git push cloud +refs/heads/master:refs/remotes/dev2/master
他们不会发生冲突。
请注意,如果您不想在命令行上指定所有内容,则可以为每个开发人员配置不同的推送 refspec,但我认为无论如何都会编写脚本。