SVN cmd更新而不恢复文件
SVN cmd to update without restoring files
我有一个 Windows 批次,它将 运行 定期从 SVNadd/remove 文件
我希望脚本执行以下操作:
- 从 SVN
中删除 所有在 Windows(非 SVN)中删除的文件
- 添加 尚未受版本控制的所有文件 (
*.*
)
- 提交 所有更改
- 更新文件夹以确保文件夹是最新的。
我有以下批次:
:: Go to my folder (already checked out as SVN folder)
cd C:\MyFolder\
:: Delete/Remove all missing files
svn status || ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }
:: Add new files
svn add *.*
:: Commit all changes
svn commit *.* -m ^"Committed on %date% %time%"
:: Update the folder
svn up --accept mine-full
我自己在 Windows Explorer
中删除文件 new file.txt
后会发生什么
- 删除命令 运行s 然后列出文件
! new file.txt
- 添加命令运行s,添加所有新文件
- 提交
- 更新然后恢复文件
new file.txt
<-- 我不希望它恢复已删除的文件。
对于 Delete/Remove 部分我也尝试了这两个命令:
svn status || grep "^\!" || sed 's/^\! *//g' || xargs svn rm
svn status || grep "^\!" | sed 's/^\! *//g' | gawk '{print "\""[=11=]"\"" }' | xargs svn rm ::includes whitespaces in filenames
输出:
C:\MyFolder>svn status || ? { $_ -match '!\s+(.*)' } | { svn rm $Matches[1] }
! new file.txt
C:\MyFolder>svn add *.*
svn: Skipping argument: E200025: '.svn' ends in a reserved name
svn: warning: W150002: 'C:\MyFolder\old.txt' is already under
version control
svn: E200009: Could not add all targets because some targets are already
versioned
svn: E200009: Illegal target for the requested operation
C:\MyFolder>svn commit *.* -m "Committed on 2018-10-23 12:15:57.90"
svn: Skipping argument: E200025: '.svn' ends in a reserved name
C:\MyFolder>svn up --accept mine-full
Updating '.':
Restored 'new file.txt'
At revision 21.
Press any key to continue . . .
最重要的是,文件夹必须同步到 SVN(备份),所以如果有文件 added/deleted,SVN 中也必须是 added/deleted
也许您可以使用 "cut" 来执行删除部分,就像这样(它会获取上一个输出的第 9 列的所有内容):
svn status | grep "^\!" | cut -c 9- | xargs svn rm
终于自己搞定了。感谢
中的@user3689460
我已经添加了 svn delete "missing.list"
否则它将 missing.list
文件添加到 SVN
这是我的最终批处理脚本:
:: Go to my folder (already checked out as SVN folder)
cd C:\MyFolder\
:: Delete/Remove all missing files
svn status | findstr /R "^!" > missing.list
for /F "tokens=* delims=! " %%A in (missing.list) do (svn delete "%%A")
del missing.list 2>NUL
svn delete "missing.list"
:: Commit Deletion of missing files
svn commit -m "Deleted files from MyFolder on %date% %time%"
:: Add new files
svn add *.*
:: Commit all changes and additions
svn commit *.* -m ^"Committed MyFolder on %date% %time%"
:: Update the folder
svn up --accept mine-full
我有一个 Windows 批次,它将 运行 定期从 SVNadd/remove 文件
我希望脚本执行以下操作:
- 从 SVN 中删除 所有在 Windows(非 SVN)中删除的文件
- 添加 尚未受版本控制的所有文件 (
*.*
) - 提交 所有更改
- 更新文件夹以确保文件夹是最新的。
我有以下批次:
:: Go to my folder (already checked out as SVN folder)
cd C:\MyFolder\
:: Delete/Remove all missing files
svn status || ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }
:: Add new files
svn add *.*
:: Commit all changes
svn commit *.* -m ^"Committed on %date% %time%"
:: Update the folder
svn up --accept mine-full
我自己在 Windows Explorer
中删除文件new file.txt
后会发生什么
- 删除命令 运行s 然后列出文件
! new file.txt
- 添加命令运行s,添加所有新文件
- 提交
- 更新然后恢复文件
new file.txt
<-- 我不希望它恢复已删除的文件。
对于 Delete/Remove 部分我也尝试了这两个命令:
svn status || grep "^\!" || sed 's/^\! *//g' || xargs svn rm
svn status || grep "^\!" | sed 's/^\! *//g' | gawk '{print "\""[=11=]"\"" }' | xargs svn rm ::includes whitespaces in filenames
输出:
C:\MyFolder>svn status || ? { $_ -match '!\s+(.*)' } | { svn rm $Matches[1] }
! new file.txt
C:\MyFolder>svn add *.*
svn: Skipping argument: E200025: '.svn' ends in a reserved name
svn: warning: W150002: 'C:\MyFolder\old.txt' is already under
version control
svn: E200009: Could not add all targets because some targets are already
versioned
svn: E200009: Illegal target for the requested operation
C:\MyFolder>svn commit *.* -m "Committed on 2018-10-23 12:15:57.90"
svn: Skipping argument: E200025: '.svn' ends in a reserved name
C:\MyFolder>svn up --accept mine-full
Updating '.':
Restored 'new file.txt'
At revision 21.
Press any key to continue . . .
最重要的是,文件夹必须同步到 SVN(备份),所以如果有文件 added/deleted,SVN 中也必须是 added/deleted
也许您可以使用 "cut" 来执行删除部分,就像这样(它会获取上一个输出的第 9 列的所有内容):
svn status | grep "^\!" | cut -c 9- | xargs svn rm
终于自己搞定了。感谢
中的@user3689460我已经添加了 svn delete "missing.list"
否则它将 missing.list
文件添加到 SVN
这是我的最终批处理脚本:
:: Go to my folder (already checked out as SVN folder)
cd C:\MyFolder\
:: Delete/Remove all missing files
svn status | findstr /R "^!" > missing.list
for /F "tokens=* delims=! " %%A in (missing.list) do (svn delete "%%A")
del missing.list 2>NUL
svn delete "missing.list"
:: Commit Deletion of missing files
svn commit -m "Deleted files from MyFolder on %date% %time%"
:: Add new files
svn add *.*
:: Commit all changes and additions
svn commit *.* -m ^"Committed MyFolder on %date% %time%"
:: Update the folder
svn up --accept mine-full