【发布时间】:2011-02-24 00:15:09
【问题描述】:
在 ClearCase 中,如果我正在处理某个文件 X 并且还想查看它的先前版本(比如版本 5),则可以使用 X@@/main/5。其他(最好是免费的)版本控制系统是否有类似的功能?
Mercurial 有 hg cat 和 hg co,但它们仍然无法接近 ClearCase 的上述功能。
【问题讨论】:
在 ClearCase 中,如果我正在处理某个文件 X 并且还想查看它的先前版本(比如版本 5),则可以使用 X@@/main/5。其他(最好是免费的)版本控制系统是否有类似的功能?
Mercurial 有 hg cat 和 hg co,但它们仍然无法接近 ClearCase 的上述功能。
【问题讨论】:
通过 Google 快速搜索发现 gitfs:
gitfs 是一个基于 FUSE 的文件系统,用于处理存储在 git 存储库。最终目标是提供一种便捷的工作方式 有很多分支和补丁。目前只有非常基本的功能 已实现——对现有标签和对象的只读访问。
可能还有其他(更活跃的)项目提供类似的功能(适用于 Git 和其他 VCS)。
【讨论】:
基本上,您想要处理任意修订的每个hg 命令都可以 - 在hg 中使用-r 就像一直在明文中使用@@ 一样。 hg "only" 需要 -r 因为文件的版本不是独立于存储库的,所以给定一个文件和一个 repo 版本,-r 是明确的。
如果您想编辑文件,管道hg cat 与读取file@@/branch/ver 完全相同 - 它们提供完全相同的(只读)数据访问权限。
如果您希望在 Mercurial 中通过 MVFS 获得动态视图的便利性,那是一个完全不同的问题,而且您无法真正做到(您可以通过 NFS 只读方式进行,但显然那里没有版本控制)。
【讨论】:
首先,X@@/main/5 是一个 extended pathname,您只能在 dynamic views 中真正探索它。
第二,可以快速access an older version of a file in Git:
git show REVISION:path/to/file
(文件的路径始终来自 git 存储库的根目录)
并且您可以将 git show 用于其他用途(例如see the file as it is in another branch)
请参阅"How to retrieve a single file from specific revision in Git?" 了解更多信息。
就基于修订的文件系统的动态探索而言,Git 的 hgfs 等价物是:
figfs(Git 文件系统的文件系统接口),它扩展了 gitfs。
存储库以文件系统的形式呈现,允许同时查看项目代码的多个版本和分支,而无需重新配置用户的工作区。
为了提供文件系统服务,figfs 使用Filesystem in User space (FUSE)
FUSE 应用程序允许将文件系统实现为用户空间进程。
应用程序的请求通过 VFS 层传递到 FUSE 驱动程序,该驱动程序
将请求发送到用户空间文件系统守护进程。
Figfs 然后通过普通文件系统访问 Git 存储库并将结果数据返回给应用程序。
【讨论】:
hg cat 和类似命令的原因是这些命令需要一个额外的步骤来提取必须在 IDE 之外完成的修订。例如如果我正在使用 xfig 绘制原理图并且想要加载具有文件系统接口的第 5 个修订版,则允许我执行直接文件->打开操作,而 hg cat 需要一个额外的步骤来在使用前转储修订版。