我试图在git中有两个带有二进制文件的分支 - 一个"开发"和一个"稳定".在我想要将它们"释放"到稳定分支之前,开发分支可以对这些文件进行多次更改(并且如果相关,则稳定分支重命名这些文件).
我可以做一个正常的合并,这很好,但保留了太多的历史 - 当拉动"稳定"分支时,所有来自"开发"分支的中间提交也被拉出(因为它们是父提交).但是我们讨论的是没有任何合理的合并策略的二进制文件(除了他们/我们的),因此开发分支上的文件的实际历史是无用的.当我拉"稳定"分支时,我得到了这个:
X-------------------G stable
/ /
a---b---c---d---e---f---g development
因为G在开发分支中有一个父项,所以我在我的存储库中得到了开发分支的全部历史记录(c,d,e,f和g的数据对象),我对此并不感兴趣(X与b,应用了一些文件重命名).
所以我尝试git merge --squash从开发分支更改为稳定分支.第一次这样的合并和提交就行了,结果如预期的那样(提交消息中的改变日志很好,与开发分支无关):
X-------------------G stable
/
a---b---c---d---e---f---g development
拉完这个压扁的稳定分支后,我在我的存储库中得到了这个,这就是我想要的:
a---b---X---G
但是第二次合并失败了(因为git无法知道我已经合并了多少并且感到困惑).
--squash总是试图将整个历史合并到普通的父母,只解决我问题的一半.更新:变基
如果我理解正确的变形,我会最终得到这个:
X stable
/
a---b---c---d---e---f---g development
这让我得到了我不感兴趣的所有数据(c,d,e,f),作为奖励,我将丢失b是分支中稳定版本的信息.
每个开发版本都会增加大约5MB的存储库大小(并且重新打包整个repo只会缩小大约10%),"稳定"分支几乎是免费的(数据已经存在).我想从稳定分支中拉出一个新的版本,只拉新的5MB,而是从X更新到G下载25MB,因为我不知道我不知道我不关心c,d的内容,e和f.
这是我最近遇到的一个问题 - 在webhost上配置错误的apache.这意味着所有依赖$_SERVER['DOCUMENT_ROOT']break的脚本.我发现最简单的解决方法是在一些共享的全局包含文件中设置变量,但不要忘记它是一种痛苦.我的问题是,如何以编程方式确定正确的文档根?
例如,在一台主机上,设置如下:
$_SERVER['DOCUMENT_ROOT'] == '/htdocs'
Run Code Online (Sandbox Code Playgroud)
真正的文件根源是:
test.example.com -> /data/htdocs/example.com/test
www.example.com -> /data/htdocs/example.com/www
Run Code Online (Sandbox Code Playgroud)
我想要一个从www.example.com/blog/(在路径上/data/htdocs/example.com/www/blog)运行的脚本来获取正确的值/data/htdocs/example.com/www.
在另一台主机上,设置有点不同:
$_SERVER['DOCUMENT_ROOT'] == '/srv'
test.example.com -> /home/virtual_web/example.com/public_html/test
www.example.com -> /home/virtual_web/example.com/public_html/www
Run Code Online (Sandbox Code Playgroud)
这有什么解决方案吗?或者是唯一的方法是不依赖$_SERVER['DOCUMENT_ROOT']并修复我在我的网站上运行的所有软件?在托管方面修复这个似乎不是一个选项,我还没有遇到一个正确配置的主机.我得到的最好的是一个指向www.example.com的文档根,至少在open_basedir中 - 他们使用了另一个命名方案,www.example.com指出/u2/www/example_com/data/www/.
我在C中有一个循环的,静态分配的缓冲区,我将其用作深度广度优先搜索的队列.我想排队队列中的前N个元素.使用常规qsort()会很容易 - 除了它是一个循环缓冲区,并且前N个元素可能会环绕.当然,我可以编写自己的排序实现,它使用模块化算法并知道如何包装数组,但我一直认为编写排序函数是一个很好的练习,但最好留给库.
我想到了几种方法:
另一方面,花一个小时考虑如何优雅地避免编写我自己的快速排序,而不是添加那些25(左右)线可能也不是最有效率...
更正:切换DFS和BFS时犯了一个愚蠢的错误(我更喜欢编写DFS,但在这种特殊情况下我必须使用BFS),对不起存在困惑.
进一步描述原始问题:
我正在实施广度优先搜索(对于与十五个难题不同的东西,只是更复杂,在每个状态中有大约O(n ^ 2)个可能的扩展,而不是4).完成了"强力"算法,但它是"愚蠢的" - 在每个点上,它以硬编码的顺序扩展所有有效状态.队列实现为循环缓冲区(unsigned queue [MAXLENGTH]),并将整数索引存储到状态表中.除了两个简单的函数来排队和出列索引之外,它没有封装 - 它只是一个简单的,静态分配的无符号数组.
现在我想添加一些启发式方法.我想要尝试的第一件事是在扩展后对扩展的子状态进行排序("以更好的顺序扩展它们") - 就像我编写一个简单的最好的第一个DFS一样.为此,我想参与队列(代表最近的扩展状态),并使用某种启发式对它们进行排序.我也可以按不同的顺序扩展状态(所以在这种情况下,如果我打破队列的FIFO属性,这并不重要).
我的目标不是实现A*,或者是基于深度优先搜索的算法(我不能扩展所有状态,但如果我不这样做,我将开始在状态空间中出现无限循环问题,所以我'必须使用迭代加深之类的东西).