对于Mercurial存储库中的给定文件,您如何查看修订历史记录?
你如何区分文件的两个修订版?
理想情况下使用可视化工具完成所有这些(我们使用ExamDiff来做其他差异).
我会说这是基本的源代码控制功能,但我似乎无法弄清楚如何使用Mercurial执行此操作.
TortoiseHg允许您将更改的补丁文件通过电子邮件发送给某人,但它是否支持应用补丁?
如果是这样,你如何使用TortoiseHg应用补丁?
解决方案 感谢@Will Bickford的帮助.我刚刚在TortoiseHg网站上发现这个功能被列为TODO.
我有一对应该只是一个提交.如果我使用git,我会使用:
git rebase -i <some-commit-before>
Run Code Online (Sandbox Code Playgroud)
然后压扁它们.
我可以用mercurial做到吗?如果是这样,怎么样?
我正在使用SourceTree(使用BitBucket)来管理我的代码.我已经分配了一个仓库,并且父仓库已经更新了.
如何使用SourceTree将上游代码合并到我的分叉回购中?
我一直在使用git作为源代码库开发一个java应用程序.我想与其他java开发人员共享该项目,而hg似乎最常被他们使用.
我的问题是如何将git存储库转换为hg?
如果我尝试使用谷歌搜索"将git转换为hg",并且每次搜索都是关于从hg转换为git.我也在使用TortoiseHg.
我将与其他人一起使用来自使用cvs的项目的代码.我们希望使用分布式vcs来完成我们的工作,当我们完成或者每隔一段时间我们想要将我们的代码和所有修订历史记录提交给cvs.我们没有对项目的cvs repo的写访问权限,所以我们不能经常提交.我们可以使用什么工具将修订历史导出到cvs?目前我们正在考虑使用git或mercurial但我们可以使用另一个分布式vcs,如果它可以使导出更容易.
Rsync包含一个漂亮的选项--cvs-exclude"以与CVS相同的方式忽略文件",但CVS已经过时多年.有没有办法让它也排除现代版本控制系统(Git,Mercurial,Subversion)会忽略的文件?
例如,我从GitHub检出了很多Maven项目.通常它们.gitignore至少包括一个列表target,默认的Maven构建目录(可能存在于顶层或子模块中).由于这些目录的内容完全是一次性的,并且它们可能远远大于源代码,因此我想在使用rsync进行备份时将它们排除在外.
当然我可以明确地--exclude=target/但是会意外地抑制恰好被命名target并且不应该被忽略的不相关目录.
我可以为我的磁盘上的任何.gitignore,.hgignore或svn:ignore属性中提到的所有文件名和模式提供完整的绝对路径列表,但这将是一个巨大的列表,必须由某种脚本生成.
由于rsync没有内置支持除CVS之外的VCS检出,是否有任何好的技巧可以为它们提供忽略模式?或者某种回调系统,可以询问用户脚本是否应该包含给定的文件/目录?
更新:--filter=':- .gitignore'正如LordJavac所建议的那样,Git和--filter=:CCVS 一样好,至少在我发现的例子中,尽管不清楚语法是否完全匹配.--filter=':- .hgignore'对Mercurial不起作用; 例如,rsync不能将.hgignore包含类似^target$(Git的Mercurial等价物/target/)的行视为正则表达式.对于Subversion来说似乎没什么用,因为你需要.svn/dir-prop-base为1.6或更早的工作副本解析,并且为1.7或更高版本的工作副本沮丧地举手.
当使用hg branch FeatureBranchName并将其发布到开发人员共享的中央仓库时,有没有办法最终关闭FeatureBranchName它的开发何时正式与默认分支合并?
如果FeatureBranchName在执行hg branches命令时不可见,也会有所帮助.
无意中,通过使用GUI而不是CLI,我删除了Mercurial项目中的每个文件.
我恢复了Revert确定并失去了一些工作,因为我有时间机器我可以很容易地回来.但有没有一种方法可以取消删除/取消删除这些文件?通过手册和谷歌搜索,但看不到任何东西.有插件吗?
我可能在这里回答我自己的问题,但文件已从目录中消失,并没有在垃圾桶中恢复所以我假设删除是不可撤销的?
ps我知道hg forget或hg remove -Af将删除而不删除目录,但我的问题与我做的错误有关,而不是冷静思考行动通过.
最近有几个关于在Mercurial中维护发布分支时跳过更改的问题.例如:
自从它在2.0中引入以来,我一直想知道如何graft避免这个问题.给定这样的修订树:
A---B---C---D---E---F---G---H---I---J
Run Code Online (Sandbox Code Playgroud)
假设我们需要创建一个跳过Evil更改的发布分支E.
hg update -r D
hg graft "F::J"
Run Code Online (Sandbox Code Playgroud)
给我们:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
Run Code Online (Sandbox Code Playgroud)
transplant会产生补丁F::J,然后将它们应用到D,但graft据说使用3路合并而不是补丁.那么......这是怎么回事?为什么更好?让我说我现在修复E,并将其合并到我的发布分支.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
Run Code Online (Sandbox Code Playgroud)
M1是直接合并; 没什么特别的.M2正在合并具有"相同"(或至少等同)变化的分支.
D,J'和M1?最后......