我正在使用 SVN 进行开发任务,但仍然有许多使用 RCS 管理的文件,因为在我的私有 SVN 存储库工作副本中编辑它们似乎不合理(因为它们通常只是配置文件,最好就地测试)。在有文件置于 SVN 控制之下的地方拥有存储库的工作副本似乎也不合理,因此我只使用 RCS 来代替。

对于理想情况下不应移动/就地编辑和测试的文件,您的管理方法是什么?

更准确地说:我想要相当于

  • 有一个写保护的 file.txt
  • 像“co -l file.txt”(RCS)这样的命令使其可编辑
  • 能够就地编辑并立即测试
  • 像“ci -u file.txt”(RCS)这样的命令来记录更改,添加注释并再次使其只读
  • 其他用户也应该能够在同一个地方执行此操作
  • 但是,版本信息应该转移到另一个服务器上的安全位置(大概是 svn 代表)
有帮助吗?

解决方案

我使用写时复制文件系统 (CoW),例如 Ext3牛 (免责声明,我是其贡献者之一)管理很多东西。例如:

  • 使用快照回滚整个存储库,无论哪种存储库。例如,如果我完全搞砸了 git 树,我可以 cp -dpfR ./@123456789 ./ ,这会用文件替换我的工作存储库,就像它们在纪元 123456789 一样。
  • 使用版本控制/快照作为其自己的不可变 VCS,非常适合 /etc 和其他事物。由于过去的文件无法删除或修改,因此每个快照都是单个文件或整个树在时间上的不可变修订。

通常,我使用 Git 或 Mercurial 而不是 Subversion,因为我更喜欢分布式 VCS,但我现在坚持将我的存储库保留在本地版本控制 FS 上。

对于 Windows 用户,我相信有一些完全用 python 完成的相同的可移植实现......但不太确定。

其他提示

正如之前所说,您尝试使用 SVN 来完成应该使用 DVCS(如 git 或 Mercurial)的操作。

每个人都可以拥有自己的存储库,然后将其与mais中央存储库(如SVN存储库)同步。

这实际上是我在自己的项目中使用的。

我唯一不明白的是为什么你需要锁。文件不必是只读的。您可能会这样想,因为 SVN 进行合并的方式(您几乎总是必须手动完成)。Git 确实很神奇[1],并且大多数合并都无需人工干预。

[1] 好吧,这不是魔法。SVN 关心文件,而 Git 关心代码块。这样,只要您不更改完全相同的代码块,它就可以合并同时更改两次的文件。

现代分布式版本控制系统(如 Git、Mercurial 或 Bazaar)是这种情况下的最佳工具。不是因为分布式方面(这显然在这里并不重要),而是因为就地创建存储库非常容易。

在 Mercurial 中你只需要做:

cd ~/directory
hg init

与 Git 类似:

cd ~/directory
git init
git add .

每个工作副本都是一个完整的存储库,如果您愿意,您可以将其推送到远程服务器作为备份。此外,所有存储库数据都存储在一个隐藏目录中,因此您可以避免拥有大量数据的问题 .svn 到处都是目录。

我使用 Mercurial 来管理 /etc 在我的服务器上,我发现它非常方便。需要注意的一件事是,它不会将您的文件标记为只读(如 RCS),但我认为这是一个优势。

您需要意识到 SVN 存储库是免费的。您可以创建任意多个。

您还需要意识到您不必签出整个存储库。你说:

在有svn控制下的文件中,将存储库的工作副本的工作副本似乎也不合理。

我不确定你真正想要做什么,但我的印象是你以一种特殊的方式使用 SVN。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top