【问题标题】:Subclipse SVN first commit ignore certain directoriesSubclipse SVN首次提交忽略某些目录
【发布时间】:2013-04-08 13:23:44
【问题描述】:

决定从 CVS 跳到 SVN。

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

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

所以我点击了取消,因为我需要一整天的时间才能完成并取消选择所有不需要的文件。令人讨厌的是,当我单击要忽略的文件的父类别时,它不是递归的!

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

谁能指出我做错了什么?

【问题讨论】:

    标签: eclipse svn subclipse


    【解决方案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 的后续运行将不再将这些文件显示为“需要添加”,但它们会将目录显示为“需要提交(它是目录的修订版)”

    【讨论】:

    • 感谢您的建议。我删除了所有生成的文件并保留了它们的父目录。然后我提交了项目并取消选择了包含二进制文件的几个目录。提交完成后,我可以返回并 svn:ignore 我不想让 svn 版本化的父目录。然后在下一次完全更新时,这些文件不包括在内,也不需要再次取消选择。我有点惊讶,虽然没有办法在第一次导入时轻松取消选中目录..
    • @l_t 听起来您一切顺利。请记住,如果您生成除了文件之外的目录,最好不要签入生成的目录,否则如果您的构建删除并重新创建它们,您的 svn 系统将不断抱怨。如果他们已经登记入住,那没什么大不了的,您可以随时svn delete他们。至于惊喜,想的越多,惊喜就越少。列出所有“不需要的”目录的选项与仅列出“想要的”目录的选项一样糟糕。
    【解决方案2】:

    快速旁白

    所以我不完全确定您使用 Subclipse 的哪个功能来创建存储库并将项目共享给它,我假设您通过 eclipse SVN 存储库视图创建了一个基于文件的存储库并尝试了分享然后承诺。看起来你的问题已经解决了,但我确实想在这里添加一个答案,因为我遇到了这篇文章,寻找处理初始提交的相同问题的答案,即使只是一般使用 SVN,并希望为其他人提供帮助寻求帮助。

    简介

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

    无论您是创建基于文件的本地存储库还是连接到 SVN 服务器,并且您希望更好地控制以前未版本化项目中的首次提交,我发现这是最好的通用工作流程。

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

    在命令行上这将是:

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

    或者在 TortoiseSVN 上打开你的 repo 进行浏览,右键单击,然后选择“创建新文件夹”

    这将为您在 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 扩展来执行此操作(确保在批量添加文件以进行提交之前忽略您需要的所有文件),仅此而已left 是确保将新添加的文件提交到 repo 并且您已启动并使用源代码控制运行 :)

    在这里添加这个方法仅仅是因为这个方法可以让你避免对那些没有人愿意随身携带的臭二进制文件进行任何不必要的复制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 2012-01-01
      • 2011-01-03
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      相关资源
      最近更新 更多