使用Mercurial(hg),您是否可以“hg backout”您为不想推送的文件所做的所有提交,然后进行推送?
因为Mercurial(或Git)不允许我们将单个文件或单个文件夹推送到另一个存储库,所以我在想:
1)怎么样,我们只看看我们做的提交,hg backout
我们不想推动的提交。
2)hg out -v
查看将被推送的文件列表
3)现在按hg push
这是一个好方法吗?
这是因为我得到了以下建议:
1)如果你不希望它被推送,不要提交该文件(但有时甚至只是为了实验,我确实想保留中间版本)( - 也许我可以hg commit
和hg backout
立即阻止它被推动。)
2)有些人告诉我只想从hg clone tmp
我想要推送到该存储库,然后将本地文件复制到此tmp工作目录,hg commit
到此tmp
存储库,然后执行推送。但是我发现hg clone tmp
将占用400MB的新数据和文件,并使硬盘工作非常努力,只需推送1个文件?所以我宁愿不使用这种方法。
答案 0 :(得分:3)
如果您执行hg backout
,则仍会推送文件,但在提示修订版中会被省略。远程存储库将接收更改集以添加文件,然后接收退出更改集以删除它们。因此,它将包含您不想推送的文件的历史记录。
提交文件后,将该文件触及另一个存储库的任何更改集移动都将包含该文件的更改。如果你想要做的就是阻止远程存储库的提示检查包含文件,那么你描述的内容将起作用。如果没有,那么就没有历史保留的方法来完成你想要的东西,除了从不推动任何变换集触及相关文件。您可以使用convert
删除它来创建一个新的存储库,而不会记录任何不需要的文件,但会生成一个包含新历史记录的新存储库。
答案 1 :(得分:1)
你对“非常努力工作”的衡量标准是有缺陷的 - 克隆许多千兆字节,成千上万的提交回购的工作对于任何现代硬盘都是微不足道的,更不用说你的了,特别是对于临时存储库来说,空间要求是完全无关紧要。
执行您要执行的操作的最简单方法是将repo克隆到要推送的修订,推送该克隆并删除。虽然您正在寻找的解决方案可以节省一些磁盘空间,但它们的价值要远远超过它们的价值。
Mozilla和Python *都使用Mercurial,我保证他们的回购比你正在处理的更大更复杂。如果他们能够毫无问题地使用它们,你当然也可以。尝试一下,不要强调你使用的几个字节,这是值得的。
* Python正在切换到Mercurial
修改强> 解决你对adymitruk的评论,你误解了Joel的观点。尽早提交,经常提交,不要害怕浪费提交,但这并不意味着每当你犯错误时都应该退出 - 这会打败版本化所有内容的全部要点。如果您提交了一些您不喜欢的东西,请修复它并再次提交。回滚是一个功能,因为它可能很有用,而不是因为你应该一直这样做。
答案 2 :(得分:0)
如果您提交了更改,我不确定为什么您不想推送某些文件。
我会在GIT的master上创建另一个分支和rebase -i来删除它们。当你准备推送其他文件时,你可以在另一个分支上重新定义-i以选择那些文件,并在准备就绪时选择掌握。