svn nightly commit 脚本是否能够捕获所有可能发生的情况?

svn nightly commit 脚本是否能够捕获所有可能发生的情况?

我有一个夜间 svn 提交脚本,该脚本应考虑所有可能的情况并将新内容提交到我们的 svn 存储库。基本上,我正在运行以下步骤:

  1. svn status [path] 添加任何新文件
  2. svn status [path] 删除任何手动删除的文件
  3. 转储 mysql 开发数据库
  4. svn 使用默认消息提交上述所有更改。

以下是我们正在使用的脚本:

#!/bin/bash
echo "Adding new files to the nightly commit"
svn status  [path] | grep ? | sed 's/[?MD]//g' | xargs  -I {} svn add {}
echo "Removing files manually deleted"
svn status  [path] | grep ! | sed 's/[!]//g' | xargs -I {} svn del {}
echo "Dumping our development database"
mysqldump  --add-drop-database --add-locks --create-options --disable-keys --extended-insert --result-file=/repopath/database.sql databasename
svn commit /repopath/ -m "Nightly Automatic commit of changes"

我只是想确保 ? 和 ! 得到妥善处理,并且没有任何其他我没有想到的情况。任何对此脚本的帮助或改进都将非常有帮助。您可以随意使用此脚本执行任何 SysAdmin 任务。

答案1

  1. “xargs svn add” 应该足够了,为什么要使用 -I {} ?
  2. 我根本不会这么做。您可能会在 SVN 中得到很多临时文件。也许有一天您会把 CD 映像放在那里。
  3. 我不会这么做。你的评论将毫无意义。我做了什么改变等等?当你真的做了改变时,为什么不直接提交呢?
  4. Mysql 有时很邪恶。您需要确保数据库转储确实正常。您早上是否正在读取脚本的 stderr 输出?
  5. 随着时间的推移,你的 repo 会变得非常大(取决于数据库大小和变化),并且没有好的方法来缩小它。
  6. 您需要转义 ! 和 ?。或者将它们括起来。使用单引号时,'!' 可以正常工作,而“!” 可能会造成麻烦。

总之:我认为你已经涵盖了所有内容(第 6 点除外),但如果我是你,我不会这样做。

答案2

您还可以svn add查看目录中的所有文件。已添加且已受版本控制的文件将生成错误消息,但它会添加所有新文件。

相关内容