我们有一个svn文件夹结构,如下所示:
svn-repo
|
+------userA
| |
| +----projAA
| |
| +----projAB
| ...
|
+------userB
| |
... +----projBA
|
+----projBB
...
来源直接在projAA,proj AB,...下
我们希望将来使用标签和分支。因此,我们希望具有这样的结构:
svn-repo
|
+------userA
| |
| +----projAA
| | |
| | +---tags
| | |
| | +---branches
| | |
| | +---trunk
| |
| +----projAB
| | |
| | +---tags
| | |
| | +---branches
| | |
| | +---trunk
| ...
|
+------userB
| |
... +----projBA
| |
| +---tags
| |
| +---branches
| |
| +---trunk
|
+----projBB
| |
| +---tags
| |
| +---branches
| |
| +---trunk
...
现在我的问题是我该如何自动执行此操作?
到目前为止,我已经编写了这个简单的脚本:
@echo off & setlocal
set MY_BAT_FILE=%~nx0
if [%1]==[] goto missing_param
set MY_SVN_PATH=%1
set MY_TMP_PATH=%MY_SVN_PATH%_TMP
set MY_SVN_TRUNK=%MY_SVN_PATH%/trunk
set MY_SVN_TAGS=%MY_SVN_PATH%/tags
set MY_SVN_BRANCHES=%MY_SVN_PATH%/branches
set MY_SVN_MSG="created/edited by: %MY_BAT_FILE%"
svn mkdir %MY_TMP_PATH% -m %MY_SVN_MSG%
svn move %MY_SVN_PATH%/*.* %MY_TMP_PATH% -m %MY_SVN_MSG%
svn mkdir %MY_SVN_PATH% -m %MY_SVN_MSG%
svn mkdir %MY_SVN_TRUNK% -m %MY_SVN_MSG%
svn mkdir %MY_SVN_TAGS% -m %MY_SVN_MSG%
svn mkdir %MY_SVN_BRANCHES% -m %MY_SVN_MSG%
svn move %MY_TMP_PATH%/*.* %MY_SVN_TRUNK% -m %MY_SVN_MSG%
goto END
:missing_param
echo.failed!
echo.
echo.usage:
echo. %MY_BAT_FILE% ^<SVN_PATH^>
echo.
echo.parameter
echo. SVN_PATH:
echo. path to svn repository/folder (without trailing "/").
goto END
:END
pause
但这由于和svn move %MY_SVN_PATH%/*.* %MY_TMP_PATH% -m %MY_SVN_MSG%
而不起作用svn move %MY_TMP_PATH%/*.* %MY_SVN_TRUNK% -m %MY_SVN_MSG%
。
因为不支持通配符。
如果我使用svn move %MY_SVN_PATH% %MY_TMP_PATH% -m %MY_SVN_MSG%
和svn move %MY_TMP_PATH% %MY_SVN_TRUNK% -m %MY_SVN_MSG%
(=不带通配符),那么它不仅会复制文件夹的内容,而且会复制Hole文件夹。
结果svn-rep/userA/projAA/trunk/projAA_TMP/projAA/
而不是svn-rep/userA/projAA/trunk/
。
如何将一个文件夹的内容仅移动到另一个文件夹?
提前致谢。
我找到了解决方案。
这是新的脚本。如果有人感兴趣。
@echo on & setlocal
set MY_BAT_FILE=%~nx0
if [%1]==[] goto missing_param
set MY_SVN_PATH=%1
set MY_TMP_PATH=%MY_SVN_PATH%_TMP
set MY_SVN_TRUNK=%MY_SVN_PATH%/trunk
set MY_SVN_TAGS=%MY_SVN_PATH%/tags
set MY_SVN_BRANCHES=%MY_SVN_PATH%/branches
set MY_SVN_MSG="created/edited by: %MY_BAT_FILE%"
:: svn mkdir %MY_TMP_PATH% -m %MY_SVN_MSG% :: dont create the tmp-directory !
:: just make a copy of the original folder
svn copy %MY_SVN_PATH% %MY_TMP_PATH% -m %MY_SVN_MSG%
:: delete the original folder
svn delete %MY_SVN_PATH% -m %MY_SVN_MSG%
:: re-create the initial folder (it is empty now)
svn mkdir %MY_SVN_PATH% -m %MY_SVN_MSG%
:: create empty branches and tags folders
svn mkdir %MY_SVN_TAGS% -m %MY_SVN_MSG%
svn mkdir %MY_SVN_BRANCHES% -m %MY_SVN_MSG%
:: move (same as rename) the temp folder to trunk
svn move %MY_TMP_PATH% %MY_SVN_TRUNK% -m %MY_SVN_MSG%
goto EOF
:missing_param
echo.failed!
echo.
echo.usage:
echo. %MY_BAT_FILE% ^<SVN_PATH^>
echo.
echo.parameter
echo. SVN_PATH:
echo. path to svn repository/folder (without trailing "/").
goto EOF
:EOF
pause
文件夹将通过以下步骤进行操作:
1: //svn-repo/user/proj
2: //svn-repo/user/proj
//svn-repo/user/proj_TMP
3: //svn-repo/user/proj_TMP
4: //svn-repo/user/proj_TMP
//svn-repo/user/proj << this is new created, empty!
5: //svn-repo/user/proj_TMP
//svn-repo/user/proj/branches
//svn-repo/user/proj/tags
6: //svn-repo/user/proj/branches
//svn-repo/user/proj/tags
//svn-repo/user/proj/trunk << //svn-repo/user/proj_TMP moved (=renamed)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句