版本控制(hg):一个目录可以与不同的存储库“同步”吗?

版本控制(hg):一个目录可以与不同的存储库“同步”吗?

我有一个用于存放工作文件的目录,该目录受版本控制(Mercurial):

〜/我的文件

在子路径中,我有一个包含用于我的 org-mode 设置的 Emacs 包的目录:

〜/ myfiles / org-mode

正如我所说,整个路径都处于版本控制之下,因此与 Hg 存储库“同步”。org-mode子目录的原始来源也是互联网上的 (git) 存储库(http://orgmode.org/cgit.cgi/org-mode.git/)。

因此,如果能够直接从官方 org-mode 存储库中提取该目录的新版本,然后将其提交到我的个人存储库中,以便始终拥有适合我的 Emacs 配置的版本,那就太好了。

对于一名程序员来说,这可能是一个非常简单的问题——因为我不是程序员,我不确定如何处理这个问题,但我认为这一定是一个常见的问题。

当然,我可以将 org-mode 目录保存在本地的另一个路径中,并将其置于我的版本控制之外,但这样我就无法轻松地在某个时间点恢复完整的工作设置。

答案1

同时使用git,在同一棵树上,不存在固有冲突;由于这些程序是独立开发的,因此它们不会互相干扰。

然而,在这种情况下,叠加于git(另一种看法是git存储库依赖于底层目录结构)。因此,请考虑以下示例,其中您已经拥有组织模式已克隆,并且有一个补丁等待从在线存储库中提取。

这是什么在你提取更改之前可能看起来像git

c:\myfiles> hg log -l 1
changeset:   123:da5f372c3901
tag:         tip
user:        John Doe <[email protected]>
date:        Fri Jun 13 12:00:00 2014 -0500
summary:     Some change in the work files

然后你将更改拉到组织模式git。然而,这里最重要的是,拉动动作不会立即地反映到存储库。

您可以测试较新的组织模式补丁可以正常工作。如果补丁不能立即工作,则应运行hg revert --all,这将恢复存储库在最新提交时的样子。如果补丁确实有效或者您没有发现任何问题,则应该提交变更反映出你拉取了一组更改到组织模式

c:\myfiles> hg com -m "Pulling changes in org-mode"

c:\myfiles> hg log -l 1
changeset:   124:da5f372c3901
tag:         tip
user:        John Doe <[email protected]>
date:        Fri Jun 13 12:01:00 2014 -0500
summary:     Pulling changes in org-mode

如果git将其与存储库相关的元数据存储在组织模式文件夹(即与存储库根目录中的 .hg 文件夹一样),回滚下面的提交应该没有问题(如果你在提交后发现组织模式):

c:\myfiles> hg rollback
rolling back last transaction

c:\myfiles> hg log -l 1
changeset:   123:da5f372c3901
tag:         tip
user:        John Doe <[email protected]>
date:        Fri Jun 13 12:01:00 2014 -0500
summary:     Some change in the work files

此外,正如我在评论中所述,无论您运行什么 VCS 软件,都可以执行此操作。如果您有:

c:\my_repo
c:\my_repo\2nd_repo

不会有问题,因为为了处理每个存储库,您必须在工作的目录内进行工作。

1- 我改编了这里一些代码,因为如上所述,我在这方面没有太多经验

答案2

听起来你希望 Org-mode 成为一个子回购. 看起来支持 git作为子仓库。文档清楚地说明了下一步该做什么:

echo "http://orgmode.org/cgit.cgi/org-mode.git" >> .hgsub
hg add .hgsub
git clone http://orgmode.org/cgit.cgi/org-mode.git org-mode

这样就可以在本地跟踪您的内容,并在可用时从 orgmode 中提取更改。

答案3

您的代码依赖于“供应商分支”。每个分支都有自己的存储库。没问题。大多数版本控制系统允许“导出”最新代码,即不带元数据的代码。如果您将其提交到自己的存储库中,则不会发生冲突。您不太可能需要提交到两个存储库。但如果您需要,您可能可以解决这个问题。搜索词:“供应商分支”

相关内容