- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经使用 Git 一段时间了,我想将我常用的工作流程转换为 Mercurial。特别是,我对转换用于为 Git 项目做出贡献的工作流感兴趣,以便能够为 Mercurial 项目做出贡献。
通常,对于 GitHub 上的项目,我会从原始项目中 fork GibHub 上的项目,然后使用两个不同的远程名称在本地获取这两个项目:
# Clone the initial repository and call the remote repository 'github-origin'
git clone -o github-origin git://github.com/orig_author/project.git
# Add the forked GitHub repo as an additional remote repo ('github-mine')
cd project
git remote add github-mine git://github.com/me/project.git
git fetch github-mine
当我用 git branch -a
列出分支时,我得到如下信息:
* master
remotes/github-mine/some_feature
remotes/github-mine/master
remotes/github-origin/HEAD -> github-origin/master
remotes/github-origin/some_feature
remotes/github-origin/master
我可以使用 git checkout -b new_feature
创建自己的本地分支,然后将其推送回我的 GitHub 存储库,从而添加两个引用:
* my_feature
remotes/github-mine/my_feature
然后我可以联系原作者讨论这个功能,提交 pull 请求等等。所有这些工作流程实际上完全独立于原作者的工作时间线。这使得在不污染主项目存储库的情况下讨论实验性功能变得非常容易。
如果原作者提交了更多更改,我可以跟上 git fetch github-orig
并可能相应地 merge 或 rebase 我的本地更改。作为快速测试(假设当前分支是 my_feature
):
git fetch github-origin
git checkout -b temp
git rebase github-origin/master
此工作流的一个 Gist 是能够知道每个存储库的分支与我自己的分支相比位于何处。特别是,重要的是要知道我的分支与同名的远程分支不同(即使在两个 GitHub 存储库之间,两个 master
分支也不需要相同,例如)。使用 gitk --all
可以很容易地看到这一切。
我不确定如何在 Mercurial 项目上(例如在 BitBucket 上)做同样的事情。
这是我尝试做的,基于这个 Command Equivalence Table :
hg clone https://bitbucket.org/orig_author/project
# Edit .hg/hgrc and add 'bb-mine=https://bitbucket.org/.../project' to [paths]
# Apparently equivalent to git fetch.
hg pull bb-mine
这似乎有效,并且它 pull 了远程提交(事实上,我已经在我已经推送了我的分支之一的存储库上尝试过这个)。我可以看到所有使用 hg branches
的分支,但没有迹象表明它们来自哪里。 hg view
并没有真正显示任何东西。更重要的是,我的 tip
现在是我的最新提交,但我没有我会拥有的与 github-origin/master
标签等效的标签(无论是在我自己提交之前,或者在其他作者做出更多更改之后)。
我希望能够在未来的任何时间点执行一个hg pull
(相当于git fetch
),看看我的本地有什么区别副本和其他作者所做的新更改不一定会更改我的本地存储库或我的 BitBucket 存储库中的任何内容(至少在我解决了由于这些更改引起的潜在冲突之前)。
除此之外,当我使用 Git 时,我还倾向于拥有自己的备份
存储库(这是一个 SSH 服务器,我可以在其中推送所有分支,甚至是正在进行的工作,这并不意味着尚未发布)。
我意识到 Mercurial 的分支方式与 Git 的方式并不完全相同。但是,是否有适用于 Mercurial 的等效工作流程,或者我只需要改变我的方法?我如何查看我正在使用的每个存储库与其各自分支(其中一些可能有共同点)的最新情况?
最佳答案
这是一个很大的问题,所以我要挑几个 Gist 。我觉得你应该来IRC channel或 mailinglist寻求更多建议 — 我预计您的(进一步的)问题将属于讨论性质,最好在那里讨论。
[...] More importantly, my
tip
is now the latest of my commits, but I don't have an equivalent of the github-origin/master label that I would have (whether it's before my own commits or it's after if another author has made more changes).
不要太强调tip
标签。这是一个已弃用的概念,当您拥有多个分支时,它意味着越来越少。主要问题是它只是您存储库中的最新变更集,因此当您 pull 时它会从(命名)分支跳到(命名)分支。我们更愿意谈论 default
而不是其他命名的分支/书签,因为这些标识符以更受控的方式移动。
How can I see where each of the repositories I'm using are up to with their respective branches (some of which they may have in common)?
remotebranches extension可能会帮助您在这里获得更像 Git 的工作流程。
但总的来说,你应该看看bookmarks如果你想在 Mercurial 中使用类似 Git 的分支。 named branches您使用 hg branch
创建的分支与您使用 git branch
创建的分支几乎没有相似之处(Git 缺少 Mercurial 的命名分支概念)。
使用 hg incoming
和 hg outgoing
查看存储库之间的差异。这就是我通常如何看待需要从另一个克隆中提取或推送到另一个克隆的内容。
关于git - 将 Git 工作流程转换为 Mercurial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9151158/
如果你做一个 hg pull然后是 hg update (或 hg merge ),有没有办法解决这个问题?即:将您的存储库恢复到执行 hg pull 之前的状态? 我相信你可以做到hg update
我有一台带有 ssh 的服务器,我想将其用作中央存储库。但是我不能在上面安装 mercurial。因此,客户端如何在服务器上没有安装 mercurial 的情况下通过 ssh 推送到服务器。 谢谢 最
我们有一个专门的问题跟踪 (Redmine) 机器,它有一个 Mercurial 存储库(称为“Redmine 存储库”)。 Redmine 设置为使用该存储库,据我了解,Redmine 从未对该存储
一个 hg 存储库可以存在于我的本地文件系统上的另一个 hg 存储库中吗? 我正在拉取“sandbox”的 bitbucket wiki,我想知道是否应该将其放置在 repos/sandbox/wik
我有一个项目,我使用 Bitbucket 作为我的 HG 服务器,但我最近发现,作为一个单独的开发人员,我可以免费使用 Fogbugz/Kiln。我想将我的文件移至 Kiln,但我不想丢失我的历史记录
Mercurial 如何判断文件已被修改? 我问的原因是因为当我运行时 hg status它告诉我有几个文件被修改了。 但是,当我运行 hg diff 时没有变化要报告。 我有一个关于为什么会发生这种
我需要获取本地存储库中文件的特定版本/节点的内容,并将其写入临时文件。 我知道可以通过内部Mercurial API进行操作。 有内置命令或扩展名吗? 最佳答案 您可以使用 hg cat : hg c
这两个命令有什么区别(我想回滚到修订版 1): hg update -r 1 hg backout -r 1 --merge (在示例中提示修订为 3) 最佳答案 首先, update -r 1 将撤
我看到 mercurial 有效地压缩了存储库中的文件 (repo/.hg/store/data) 有人知道存储库文件使用哪种压缩吗? 谢谢。 最佳答案 Mercurial 存储库中有两个压缩级别:增
如果 Mercurial does not track file permissions默认情况下,它如何决定它创建的任何文件/目录的权限? 是否使用umask ?如果不是,它有什么用? 我有 rea
我已经阅读了很多关于 Mercurial 及其分支的信息,但是,我仍然是一个版本控制新手。 我目前正在做一个项目,我的任务是开发一个新模块。 我有一个“主”存储库,其中包含项目其余部分的最新代码,以及
尝试运行 hg update 时出现以下错误: abort: Operation not permitted: /var/www/simira/web/public/images/nomination
mercurial 如何处理拆分的文件?如果我创建一个分支并拆分一个文件会发生什么。我可以轻松地从修改原始未拆分文件的另一个分支中提取更改吗? 最佳答案 我只是做了一个小实验。我用一个大文件创建了一个
我想使用hg graft将变更集从一个分支复制到另一个分支。 但是,在变更集中修改的文件已在源分支中重命名(使用hg rename)-在要移植的变更集之前。 当我尝试时,我得到: scanning f
Annotate可以使您看到该行的最新更改,如果该更改是合并,那么我别无选择,只能浏览修订历史记录并查找下一次对其进行修改的情况。 我也尝试过hg grep -l '[contents of line
我有一个小项目,我从集市开始,作为练习bzr的练习。从那以后,我决定选择 Mercurial 。我如何将这个项目迁移到Hg? 最佳答案 我相信您的答案可以在here中找到。 本质上,您只需要运行 $
什么决定分支是否处于非事件状态?是否有客户使用的特定时间段? 我们有很多不活跃的分支。值得我们花时间关闭它们吗? 该文档似乎没有指定如何确定非事件分支: https://www.mercurial-s
假设我创建了一个存储库,添加 x 文件并提交。说大小是 初始提交后的 Mb。 有什么方法可以估计存储库在一年内会有多大? 如果代码行数增加了 10%,存储库会相应增长吗? 提交、分支、标签等的数量如何
我正在使用 Mercurial(特别是 Windows 上的 TortoiseHg)对 VBA 代码进行版本控制。任何尝试过这个的人都知道,只要在项目中的任何地方更改了该变量的任何声明(无论范围如何)
不幸的是,我已经清理了我的 Mercurial 货架,忘记了我需要进行一些更改。我有定期的文件系统备份,但不知道 Mercurial 在哪里存储搁置文件。有人可以告诉我在哪里看吗? Mercurial
我是一名优秀的程序员,十分优秀!