在非空远程文件夹中创建存储库
Posted
技术标签:
【中文标题】在非空远程文件夹中创建存储库【英文标题】:Create repository in non-empty remote folder 【发布时间】:2020-10-09 01:52:58 【问题描述】:自从我上次使用 svn 已经 14 年了,我似乎忘记了一切......
我有一个现有的网络项目,由 V-Server 上的目录树中的一堆 php、html、js 和其他文件组成。现在我想将这些文件夹置于版本控制之下,并使用 svn 在我的本地机器上创建一个副本。所以我根据这些说明安装了颠覆:https://www.linuxcloudvps.com/blog/how-to-install-svn-server-on-debian-9/ 使用已经存在的 apache2。
但现在我遇到了障碍。如果我在现有文件夹上尝试svnadmin create
,它会告诉我它不是空的,实际上什么也没做。我在这里和其他地方找到的所有问题和答案都是
a) 关注本地机器上已经存在的文件夹
b)假设比我现在拥有更多的先验知识,也就是我不理解它们。
是否有针对任何地方的傻瓜的分步指南,说明如何执行此操作?或者任何人都可以用外行的方式告诉我如何做到这一点? 我不敢相信这个案子永远不会出现,或者它真的很复杂。
【问题讨论】:
您将repository 与working copy 混淆了。 嗯,工作副本应该是我本地机器上的文件吧?但要检查出来,我首先需要一个存储库来检查文件。现在,我想签出的文件和文件夹只是位于服务器上。那里没有 repo,没有 .svn 等。所以设置一个存储库以从非空的现有文件夹中签出,这就是我失败的地方。 您需要使用svnadmin create REPONAME
创建一个新的空存储库,然后将svn import
项目的数据添加到此存储库。
这将是标准程序,是的,但是我的文件将在另一个文件夹中,即 repo 文件夹中。我希望我现有的文件夹结构成为存储库。
抱歉,您完全混淆了存储库和工作副本。严重地。存储库只是一个数据库,您不使用它的文件。您签出一份工作副本,这些就是您使用的文件。这是没有商量余地的,Subversion 就是这样工作的。如果你想让它表现得像 git,也许你可以安装 git,它确实做同样的事情。
【参考方案1】:
冒着无法理解您的确切需求的风险,我认为您可以按照以下方式进行。我将使用以下术语:
代码:它是 V-Server 上的未版本化目录,您当前拥有一堆 php、html、js 和其他文件
存储库:它是您需要创建的第一个“特殊”目录,用于存储您的 Subversion 历史记录并可能与他人共享。必须有一个,也只能有一个。
工作副本:这是您需要创建的第二个“特殊”目录,以便在您的 php、html、js... 文件被版本化后使用它们,并且它将被链接到存储库的给定路径和修订。在给定的时间,可能有零个、一个或多个。
您的代码可以成为工作副本,这取决于您,但它永远不能成为存储库:
$ svnadmin create /path/to/code
svnadmin: E200011: Repository creation failed
svnadmin: E200011: Could not create top-level directory
svnadmin: E200011: '/path/to/code' exists and is non-empty
您的存储库需要一个空文件夹,但它可以位于您喜欢的任何位置,只要您可以从您将在日常工作中使用的机器访问它。访问意味着它位于您的 PC 中(因此您使用 file:
协议)或可通过您安装和配置的服务器(svn:
、http:
或 https:
)访问。
$ svnadmin create /path/to/repo
$ ?
您的工作副本可以在您需要使用 IDE 的任何地方创建。它可以是空目录(通常情况下)或非空目录。 checkout 命令从存储库中检索您的文件并将它们放入工作副本,因此,在稍后阶段,您可以运行提交命令将新文件和更改的文件提交到存储库。正如您所发现的,在随机目录中创建工作副本并不是一个好主意,因为传入的文件将与现有文件混合。然而,有一种特殊情况是有意义的:当存储库位置是新的并且仍然是空的时。在这种情况下,您可以选择两种方法:
如果您希望 代码 成为工作副本,您可以直接签入 in,然后进行初始提交以上传所有文件:
$ svn checkout file://path/to/repo /path/to/code
Checked out revision 0.
$ svn add /path/to/code --force
A code/index.php
$ svn commit /path/to/code -m "Import existing codebase"
$ Adding /path/to/code/index.php
$ Transmitting file data .done
$ Committing transaction...
$ Committed revision 1.
如果您不关心 code 将其存储在存储库中,或者您希望在其他地方使用您的工作副本,您可以从 code 导入您的文件并创建一个工作复制到新目录中:
$ svn import /path/to/code file://path/to/repo -m "Import existing codebase"
Adding code/index.php
Committing transaction...
Committed revision 1.
$ svn checkout file://path/to/repo fresh
A fresh/index.php
Checked out revision 1.
【讨论】:
以上是关于在非空远程文件夹中创建存储库的主要内容,如果未能解决你的问题,请参考以下文章
Qt Installer Framework - 防止安装在非空文件夹中
Directory.CreateDirectory() 不在 ZipFile 中创建文件夹