我正在编写一个工具,该工具将(其中包括)自动将文件添加到SVN信息库分支的过程。存储库分支已经存在,可能很大(数十GB或数百GB),并且包含许多子目录。我的工具将需要接受多个文件,并将这些文件添加到分支内的各个(已经存在)目录中。
从本质上讲,我有一个位于http://svn.example.com/path/to/repository
的存储库分支,其中包含(子)目录树a/...
,b/...
,c/...
,d/...
等上。
然后我要添加一些文件,例如:
http://svn.example.com/path/to/repository/a/a_1/file1
http://svn.example.com/path/to/repository/a/b_1/b_1_1/file2
(依此类推)。
这些文件可能已经存在于存储库中(在这种情况下,它们将需要用本地副本覆盖)或可能不存在(在这种情况下,需要添加)。子目录a/a_1
和b/b_1/b_1_1
可以假定已经存在(并且其中包含其他文件)。我一次有一个“不错的数量”(通常在20到50之间)可上传的文件。
所说的存储库分支没有本地工作副本(并且完成此操作后,就没有持久的理由存在本地副本)。
从我已经在此过程中进行的搜索来看,似乎就像最好的方法一样:
svn add
个文件;然后智慧:
svn checkout https://svn.example.com/path/to/repository /local/path --depth=empty
mkdir -p /local/path/a/a_1 && cp -f file1 /local/path/a/a_1/.
mkdir -p /local/path/b/b_1/b_1_1 && cp -f file2 /local/path/b/b_1/b_1_1/.
...etc...
svn add /local/path/* --depth=infinity
svn update /local/path --accept=mine-full
svn commit /local/path --message="some message"
...但是,当我尝试此操作时,出现错误Directory '/local/path/a' is out of date
(后跟Path already exists, path '/path/to/repository/a'
)。
有一次,我在玩游戏的同时设法将上述内容与某种形式的svn resolved
结合使用,这些形式最初似乎可以使用,直到我意识到它已删除了所有 other 文件在存储库目标子目录中。糟糕!
有人能解决这个问题吗?下载整个存储库分支(及其所有文件)是不可行的。如上所述,它太大了以至于无法成为可行的解决方案(特别是因为以后我将不再需要它,因此它将在本地立即删除)。
从搜索来看,似乎没有一种很好的方法来仅检出SVN分支的目录结构,而没有关联的文件。现在,我最好的主意是遍历本地目录结构并一次寻址每个文件,然后通过单独的操作将它们检出,添加并提交到存储库中。但这每批可能涉及许多签到,这并不理想。
({svn import
同样也不理想,因为文件可能已经在存储库中,因此需要被覆盖。)
有什么好的解决方法吗?