SVN导入不会创建.svn文件夹?

18
我创建了一个代码库,然后运行了svn import . https://myrepo命令。看起来所有东西都已经很好地检入了,我可以在另一台机器上进行检出。但是,它似乎没有创建.svn文件夹,因此我以后不能运行任何svn ci命令。
这会给以后的同步带来巨大的麻烦,因为现在我的所有东西都已经在代码库中了,但它与我试图提交的更改冲突。
我做错了什么?

1
那么等一下,我是不是应该import它,cd ..,重命名它,然后再次检查它?这是标准/预期的工作流程吗? - mpen
1
请跟我重复:“代码仓库不是工作副本,我不应该把它当成一个工作副本来使用。” - Powerlord
4
@Powerlord: 仓库指的是哪个?当你导入时,本地目录并不是仓库,它只是作为仓库的初始版本被导入。 - F'x
7个回答

32

我从不使用import,因为它很不方便。导入不能创建 .svn 目录,你必须运行另一个checkout来导入新目录。

相反,我首先在仓库中创建一个空目录,并将其checkout到我想要“导入”的现有项目的目录中。然后你只需要运行commit命令,就会添加所有文件。


你可以检查一个已存在的文件夹,其中包含了你所有的项目文件,而且它不会出错吗? - mpen
准确返回翻译文本:您可以从存储库中检出一个空目录到现有的本地目录,该本地目录可能已经包含文件。它将只在本地目录中创建 .svn 文件夹。一旦存在 .svn 文件夹,您就可以运行提交以提交所有现有文件。 - stmax
2
这种方法还有一个我喜欢的优点——在提交之前,你可以定义你的svn:ignores来排除某些文件。我经常使用它。我认为你不能用import做到这一点,import总是导入所有的东西(包括二进制文件),所以你总是需要在导入之前清理你的目录,并且你需要在检出后再次设置svn:ignores并提交。 - stmax
一个注释 - 我不确定这是否在某些svn客户端中隐藏,但命令行svn要求您首先添加文件(例如svn add *),然后再进行提交。 - Mick
这是比 svn co --force 更好的解决方案,因为 --force 可能会更改文件权限,而这个解决方案则不会。 - Artem Russakovskii

6
只有工作副本才会有一个.svn文件夹。导入不会创建工作副本。(为什么?因为假设您试图从没有写权限的媒体中导入。在这种情况下,如果导入尝试创建工作副本,它将失败)。要创建工作副本,您必须使用checkout。
换句话说,导入将信息推送到存储库。这就是它的全部目的,它对原始文件没有影响。大多数子版本控制命令只在一个方向上起作用:checkout、export和update修改本地系统/工作副本上的文件,而导入和提交仅更新存储库。除了[解]锁操作外,我想不出同时影响存储库和工作副本的命令。

2
我想提供有关导入后使用TortoiseSVN的更新。现在,TortoiseSVN允许您将文件检出到非空文件夹中。因此,您可以直接将其检出到用于导入的同一文件夹中。TortoiseSVN对其中所有文件进行版本控制,检测它们都匹配,并且不会下载/覆盖任何文件。不再需要重命名源文件夹然后将其检出到新的空文件夹中。
这是在Windows 7上使用TortoiseSVN版本1.8.0、Build 24401-64位,2013-06-17T18: 15: 59(Subversion 1.8.0,-release)进行测试的。 示例:
文件夹C:\myfiles中有数据。
1.将该文件夹导入到http://example.com/svn/myfiles SVN中。
2.将http://example.com/svn/myfiles检出到C:\myfiles中。
3.TortoiseSVN警告目标文件夹不为空,请点击确定。
TortoiseSVN会将C:\myfiles及其内容(目前与仓库相匹配)放置在版本控制下,而无需修改/下载/替换任何文件。

不幸的是,文件的验证似乎需要和实际的检出一样长的时间 :( 下次我想试试 svn co --force,就像 Michael Hackner 建议的那样,看看会有什么结果。 - Jonathan Mee

1

当您使用Subversion设置项目时,在对项目进行初始导入后,应该检出项目并继续在检出的副本上工作。我认为问题在于您在检入的副本上继续工作。


1
看起来是这样。但这并不能解释为什么import不会创建.svn文件夹……难道你不想让你的导入保持最新状态吗? - mpen
这是一个好问题,我自己无法回答。也许人们并不总是希望导入的目录成为“工作副本”,尽管拥有这个选项仍然很好。我必须说,我从来没有真正思考过这个问题。 - rvdginste
手册明确提到导入操作不会将原始目录树转换为工作副本。但没有解释为什么这样做。http://svnbook.red-bean.com/en/1.4/svn.tour.importing.html - rvdginste
应该将其作为导入命令的选项。很荒谬,svn仍然没有提供一种清洁的方式来做到这一点。 - Artem Russakovskii

1

导入后,您可以运行svn checkout --force将导入的目录转换为工作副本。


问题是,它似乎会在Linux上更改许多权限。我通常会在我的服务器上导入/etc目录,并发现我需要在--force checkout之后修复很多权限。 - Artem Russakovskii

0

GAHHHHHHHHH...别用Tortoise-SVN来做这个 - 它会清空你的本地目录。
所以.........先在其他地方创建一个zip/复制文件!.. 唉...(至少我有一个之前的 - 虽然旧了一些 - zipfile)。


0

检查文件夹权限。在我的情况下,它起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接