Subclipse SVN首先提交忽略某些目录

时间:2013-04-08 13:23:44

标签: eclipse svn subclipse

决定从CVS跳到SVN。

我在subclipse中为我的项目设置了一个新的存储库。当我进入“完成”设置时,它想要进行初始提交,并向我提供一个平面文件列表,以选择用于控制版本的文件。

问题是我有数千个生成的二进制文件,我不想提交。

所以我点击取消,因为它需要我整天通过并取消选择所有不需要的文件。令我恼火的是当我点击我要忽略的文件的父类别时,它不是递归的!

所以我点击取消然后转到项目的eclipse目录结构,并在我想忽略的所有目录上手动设置svn:ignore。然后我尝试再次提交并再次提交所有文件 - 忽略似乎什么也没做。

有人可以指出我可能做错了吗?

2 个答案:

答案 0 :(得分:1)

对于第一次提交,我建议编写一个小脚本来删除(当然你将备份)所有不打算提交的文件。

之后,如果您发现意外提交了文件,则可以

svn delete file

第一次结账时,复制(或更好地,重新生成)所有二进制文件。这将触发svn注意到您的本地存储库与远程存储库不同步。

cd <Root of local repository>
svn status 

你会看到很多“待添加”的物品。转到父目录并为每个生成的项添加svn:ignore属性。

cd build
svn propedit svn:ignore .

将打开一个编辑器(如果没有,则需要将环境变量SVN_EDITOR设置为合适的编辑器)。然后,您可以添加svn将知道未被跟踪的条目。

(in the ignore property editor)

target
build
image*
*.o

(and so on)

保存文件,它将暂存以进行下一次提交。后续运行svn status将不再将这些文件显示为“需要添加”,但它们会将目录显示为“需要提交(它是目录上的修订)”

答案 1 :(得分:0)

速战速决

所以我不能完全确定您要使用Subclipse的哪个功能来创建存储库并共享项目,我假设您通过Eclipse SVN存储库视图创建了基于文件的存储库,并尝试了分享,然后致力于。看来您的问题已解决,但我确实想在此处添加答案,因为我遍历此帖子,以寻找解决与处理初次提交相同的问题的答案,即使只是在SVN中也是如此,并且想为其他任何人提供帮助寻求帮助。

简介

首先,我建议不要像这样为初始提交而使用IDE扩展,因为他们可能会错过很多处理在SVN中打开回购协议的选项。我个人真的很喜欢SVN的命令行形式,但是TortoiseSVN是GUI的不错选择。

是创建本地基于文件的存储库还是连接到SVN服务器,并且希望更好地控制先前未版本控制的项目中的第一次提交,这就是我发现的最佳常规工作流程。< / p>

创建要保存到的远程文件夹。

在命令行上,它将是:

$> svn mkdir your-url-scheme://your-site-address.domain/path/to/repo/example-directory

或者在TortoiseSVN上打开您的存储库进行浏览,右键单击并选择“创建新文件夹”

这将为您提供SVN存储库中的位置,以便从中进行结帐。

检入已启动的项目

确保使用回购中的新创建的空文件夹进行结帐。 SVN实际上不需要将签出的文件夹为空,这是使文件夹变得非常灵活的重要组成部分,并且如果使用正确,它可以很容易地将目录的一部分包含在其中。

现在,您将把这个空文件夹检出到已经启动的项目的根文件夹中。这会将您的项目添加到此文件夹的工作副本中,而无需进行任何提交。命令是:

$> svn co your-url-scheme://your-site-address.domain/path/to/repo/example-directory /your/projects/root/

“ co”代表结帐。在Tortoise svn中,您可以右键单击或在空的repo文件夹中,然后选择“ checkout ...”,然后选择项目根目录。

设置忽略并提交

最后,您可以使用以下命令轻松地对某些文件设置忽略,然后将其他文件添加到树中:

$> svn propset svn:ignore file-or-directory-to-ignore

并添加所有不可忽略的目录和文件:

$> svn add * --force

在这种情况下,从技术上讲不需要强制,但可以确保完全递归。现在,如果使用TortoiseSVN,您现在也可以在文件资源管理器中完成所有这些操作,或者甚至可以使用IDE扩展来执行此操作(确保在批量添加文件以提交之前忽略所有需要的文件),所有这些剩下的就是要确保将新添加的文件提交到仓库中,然后您就可以使用源代码控制了它了:)

在此添加此方法的原因很简单,因为此方法使您可以避免不必要的复制,以防止不必要的复制。