Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换git中的主分支并防止快进_Git - Fatal编程技术网

替换git中的主分支并防止快进

替换git中的主分支并防止快进,git,Git,我在github上有一个库,大约一年前,我完全重写了不向后兼容的应用程序。它位于一个名为“结构化”的分支上。 现在,安装库的大多数人都在使用该分支,我希望将其作为主控,并将当前主控移到“遗留” 我不希望使用旧主机的用户能够快速前进到新主机,因为这肯定会破坏他们的应用程序。是否可以将他们转移到遗留分支,或者至少抛出一个异常并显示一条消息,告诉他们签出遗留分支?我认为这是不可能的,除非您实现一个钩子,但这可能不值得 我想我应该简单地在我的服务器上克隆repo,保留旧的repo,如果需要的话进行错误修

我在github上有一个库,大约一年前,我完全重写了不向后兼容的应用程序。它位于一个名为“结构化”的分支上。 现在,安装库的大多数人都在使用该分支,我希望将其作为主控,并将当前主控移到“遗留”


我不希望使用旧主机的用户能够快速前进到新主机,因为这肯定会破坏他们的应用程序。是否可以将他们转移到遗留分支,或者至少抛出一个异常并显示一条消息,告诉他们签出遗留分支?

我认为这是不可能的,除非您实现一个钩子,但这可能不值得


我想我应该简单地在我的服务器上克隆repo,保留旧的repo,如果需要的话进行错误修复,并为新的“结构化”库创建另一个repo。

没有办法转移它们,因为Git分支只是标签:没有办法判断新的
主分支与旧分支有什么不同

我认为如果客户不想让
master
分支破坏它们,那么从该分支克隆是个坏主意。您应该为此目的发布分支或标记,然后人们可以从中克隆,他们将知道他们有一个稳定的分支,该分支只能获得向后兼容的更新(对于分支),或者永远不会更改(对于标记)

至于警告,这也是不可能的,因为当有人从服务器获取数据时,您没有可以在服务器上运行的钩子(仅适用于推送)。你只需要在你的GitHub页面上写清楚就行了

另一个想法是修改
master
中的最后一次提交,使其不再是旧
master
的快进;并以引起冲突的方式进行。这样,每当有人使用旧主机时,他们都会发生冲突,必须检查发生了什么。

至于问题的“转移”部分,在新主机的第一次提交时,您可以始终执行以下操作:

#ifndef IMPLEMENTED_STRUCTURED
#error "The master branch of project x has been completely rewritten and will break legacy applications.  If you are unable to update your application, switch to the legacy branch of this project and your code should continue working as before.  If you want to use the new structured code, simply add a preprocessor definition for IMPLEMENTED_STRUCTURED to get rid of this error message."
#endif
这将阻止任何人的代码成功编译,直到他们阅读消息并决定要采取的行动


如果您不使用C/C++的话,希望您的语言具有可以实现类似行为的功能。

有一个重要的区别:那篇文章中的应用程序可以快速前进,而我的应用程序不能。好吧,项目开始时很小,并且随着时间的推移而增长。有一次,我决定该应用程序需要进行重大的设计更改,才能继续开发。到那时,我可能应该创建一个新的回购协议,而不仅仅是一个新的分支机构。因为我知道我永远无法将新分支合并到旧分支。@sbaechler:
那时我可能应该创建一个新的回购,而不仅仅是一个新分支
:正如我在回答中所说,没有什么能阻止你现在这样做,只需将存储库克隆到服务器中的一个新存储库,如果你愿意,删除旧分支,你完成了,谢谢你,丹尼尔。我想没有别的办法了。