为什么我可以两次创建同一个 SVN 分支?

发布于 2024-07-09 19:54:58 字数 62 浏览 5 评论 0原文

我可以创建同一个 SVN 分支两次。 我希望 SVN 不会允许我再次创建相同的分支。 请帮我解决这个问题。

I am able to create the same SVN branch twice. I would hope that SVN would not allow me to create same branch again. Please help me to fix this issue.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ゝ杯具 2024-07-16 19:54:58

来自 SVN 红皮书

Subversion 没有分支的内部概念——它只知道如何制作副本。 当您复制目录时,生成的目录只是一个“分支”,因为您附加了该含义。 您可能会以不同的方式看待该目录,或者以不同的方式对待它,但对于 Subversion 来说,它只是一个普通的目录,恰好携带了一些额外的历史信息。

由于这种复制机制,Subversion 的分支作为存储库中的普通文件系统目录存在。

因此,当您创建分支“补丁”时,您的存储库中可以有多个目录“补丁”。

可能会让您感到困惑的是,当您在区分大小写的操作系统中使用不同的大小写(Patch 与 patch)在同一父目录“patch”中创建两次时。


为了更好地回答您的问题:

我希望 SVN 不会允许我再次创建相同的分支。

如果您确实想防止任何“与案例相关的路径冲突”,您可以设置一个预提交挂钩(这也是由 svn 副本触发),就像这个,来自 svn 工具 contrib

case-insensitive.py

  • 检测与“冲突”的新路径现有的或其他新的路径。
  • 忽略已经“冲突”的现有路径,
  • 如果检测到“冲突”,则退出并显示错误代码,并在 stderr 上进行诊断。

使用该钩子,您仍然可以创建多个具有相同名称的分支,但至少不能在同一父目录中,但大小写不同。

From SVN RedBook:

Subversion has no internal concept of a branch—it knows only how to make copies. When you copy a directory, the resultant directory is only a “branch” because you attach that meaning to it. You may think of the directory differently, or treat it differently, but to Subversion it's just an ordinary directory that happens to carry some extra historical information.

Because of this copy mechanism, Subversion's branches exist as normal filesystem directories in the repository.

So when you create a branch 'patch', you can have several directories 'patch' within your repository.

What may confuse you is when you create in the same parent directory 'patch' twice, with a different case (Patch vs. patch), in a case-sensitive OS.


To better answer your question:

I would hope that SVN would not allow me to create same branch again.

If you really want to prevent any "case-related path clash", you can set a pre-commit hook (which is also triggered by a svn copy), like this one, from svn tools contrib

case-insensitive.py:

  • Detects new paths that 'clash' with existing, or other new, paths.
  • Ignores existing paths that already 'clash'
  • Exits with an error code, and a diagnostic on stderr, if 'clashes' are detected.

With that hook, you can still create several branches with the same name, but at least not in the same parent directory, with a different case.

绅刃 2024-07-16 19:54:58

在 SVN 中,分支(以及标签)只是副本。

SVN 不知道分支是什么,它只知道副本。 SVN用户赋予这些副本以分支的含义,但这只是人们遵循的约定,而不是SVN遵循的约定。

In SVN, branches (and tags too) are only copies.

SVN has no idea of what a branch is, it only knows about copies. SVN users give to those copies the meaning of branches, but it's only a convention followed by the people, not by SVN.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文