1

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

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

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

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

4 回答 4

3

我使用写文件系统 (CoW) 上的副本,例如Ext3cow(免责声明,我是它的贡献者之一)来管理很多东西。例如:

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

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

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

于 2009-01-02T06:16:29.880 回答
3

如前所述,您尝试将 SVN 用于应该使用 DVCS(如 git 或 Mercurial)的东西。

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

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

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

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

于 2009-01-03T14:06:54.243 回答
2

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

在 Mercurial 中,您只需要做:

cd ~/directory
hg init

与 Git 类似:

cd ~/directory
git init
git add .

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

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

于 2009-01-03T13:26:25.197 回答
0

您需要意识到 SVN 存储库是免费的。您可以根据需要创建任意数量。

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

在有文件置于 SVN 控制之下的地方拥有存储库的工作副本似乎也不合理

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

于 2009-01-02T15:27:55.310 回答