我有一个夜间 svn 提交脚本,该脚本应考虑所有可能的情况并将新内容提交到我们的 svn 存储库。基本上,我正在运行以下步骤:
- svn status [path] 添加任何新文件
- svn status [path] 删除任何手动删除的文件
- 转储 mysql 开发数据库
- 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
- “xargs svn add” 应该足够了,为什么要使用 -I {} ?
- 我根本不会这么做。您可能会在 SVN 中得到很多临时文件。也许有一天您会把 CD 映像放在那里。
- 我不会这么做。你的评论将毫无意义。我做了什么改变等等?当你真的做了改变时,为什么不直接提交呢?
- Mysql 有时很邪恶。您需要确保数据库转储确实正常。您早上是否正在读取脚本的 stderr 输出?
- 随着时间的推移,你的 repo 会变得非常大(取决于数据库大小和变化),并且没有好的方法来缩小它。
- 您需要转义 ! 和 ?。或者将它们括起来。使用单引号时,'!' 可以正常工作,而“!” 可能会造成麻烦。
总之:我认为你已经涵盖了所有内容(第 6 点除外),但如果我是你,我不会这样做。
答案2
您还可以svn add
查看目录中的所有文件。已添加且已受版本控制的文件将生成错误消息,但它会添加所有新文件。