如何使用 Tortoise SVN 检查文件而不是目录结构?

How to Checkout Files and Not Directory Structure with Tortoise SVN?

目前我的公司使用 Tortoise SVN 来存储许多包含文件和主要代码文件,它们都在我们存储库的顶层。这是一团糟,但它可能是它与 Pic Basic 一起工作的唯一方式。看起来像:

Software>

Software>include_file.pbp

Software>project1_file.pbp

Software>project1_file_branch1.pbp

Software>...

理想情况下,我们会使用标准的分支和标签结构,并按项目组织根目录,并将我们的全局包含保存在单独的文件夹中,如下所示:

Software>

Software>Includes>

Software>Includes>include_file.pbp

Software>Project1

Software>Project1>branches

Software>Project1>branches>branch_1

Software>Project1>branches>branch_1>project1_file.pbp

Software>Project1>trunk

Software>Project1>trunk>project1_file.pbp

问题是当我签出文件时,它会带来所有的目录结构。编译我的代码时,PicBasic(PBP) 要求包含文件位于子目录或同一目录中。

是否可以只检出选定的文件而不检出目录?这样可以将包含文件和项目文件从存储库上的单独文件夹拉到我的同一文件夹中计算机。

如果不是,是否有其他方式组织目录,以便多个项目可以访问全局包含?

如果没有,是否有不同的版本控制软件可以做到这一点?

当然问题不仅仅出在 PBP 上,其他人也曾尝试将 include 的工作副本编译到单独目录中的项目中。

Is it possible to just checkout selected files and not the directories?

是 - 在资源管理器中右键单击,select SVN 签出。弹出对话框时,单击省略号 (...) 并导航到所需的文件,然后单击确定。

Is there another way to organize the directory so that multiple projects can access the global includes

是 - 但您需要管理员(称为管理员的人 - 不是管理员用户:他们是不同的野兽)权限。使用 mklink 将 link 全局包含到您的项目目录中。

您始终可以向下导航到项目目录,并且只能从该目录签出。我将阅读 pbp 手册 - 看看是否可以从路径中包含。

编辑 包含路径的其他技巧

相对路径

pbp 允许相对和绝对路径。例如,如果目录结构是

+--global.inc
+--project1
   +--project1.pbp

您可以使用

include "..\global.inc"

这意味着所有项目都必须位于目录结构下

虚拟驱动器

如果不需要该结构,可以使用 subst 命令将全局变量放入虚拟驱动器中。优点是项目可以位于相对于全局变量的任何位置。如果它始终需要可用,则必须在启动时将其放入批处理文件中。例如

subst P: C:\Users\CUP\Documents\Global

签出所有全局headers进入全局。在代码中

include "P:\global.inc"

备注

  1. 包含文件和项目文件不能从存储库的单独文件夹中拉到同一个文件夹(直接,没有一些技巧):

每个工作副本(及其各自的子文件夹)"linked" 每次都到回购中的已知位置。您可以在结帐后将 WC 切换到另一个 URL,但切换的树将与 NEW_LOCATION 树同步(并且 OLD_LOCATION 中未在 NEW_LOCATION 中出现的所有对象都会消失)

  1. 在 TortoiseSVN 中(不是在 CLI SVN 中)你可以像这样使用 "URL to checkout" 的特殊格式

https://subversion.assembla.com/svn/customlocations-greylink/trunk/city/Abakan.bmp * https://subversion.assembla.com/svn/customlocations-greylink/trunk/city/Achinsk.bmp *...

(多个 URLs,由 * 分隔,没有空格 /为 SO-renderer/ 添加了空格),但这无论如何都是从 共同基础,不是无关节点

可能的解决方案

  1. 如果includes是Common + Project Specific并且可以存储在多个项目代码的子文件夹中,则可以

    • 收集某个位置中的所有Commons并将此目录添加到每个具有外部定义(目录类型)的项目
    • 项目特定的包含将放置在项目根目录中的第二个物理文件夹中
  2. 如果所有内容都必须在一个文件夹中,您可以

    • 将 Common 包括和所有项目存储在单个 repo 中(Commons 是特殊文件夹,如上所述)- 与之前的情况相反,对于 dir 类型的外部 SRC 和 DST 可以是不同的 repos
    • 将所有需要的 Commons 作为文件类型外部添加到具有项目特定包含的文件夹中