我说的“每个更改”是指 TortoiseSVN 的“提交”按钮。
它会删除已删除的文件、添加新文件并提交更改。
至少这些是我所知道的,但可能还有其他的。
(我只需在 Tortoise 中按“全部”并按“提交”即可。)
RabbitVCS 适用于 Linux,但 cli 版本的commit
== svn commit
。
是否有可以模仿 Tortoise 提交的小脚本或东西?
环境是带有 bash 提示符的 Linux。(SVN 1.7.5)
答案1
转到工作目录的根目录。
svn add . --force
svn add
(这将以递归方式遍历您的工作目录并对找到的每个尚未受版本控制的文件执行操作。)
接下来执行以下操作:
svn rm $( svn status | sed -e '/^!/!d' -e 's/^!//' )
(这将运行svn status
。status 命令以递归方式列出工作目录中已更改的所有内容。这个奇怪的sed
命令会查找所有以“!”开头的行(这是 svn status 指示已删除文件的方式。))
现在做:
svn commit
我并不是真的建议这样做。在进行修改时,最好只使用“svn rm oldfile”而不是“rm oldfile”。“svn add . --force”也不是很好:它会签入您在测试时生成的所有临时文件和目标文件。当您关心添加新文件时,最好只使用“svn add newfile”。
我通常在每次签入之前运行“svn status -u”以清楚了解工作副本中发生了哪些变化。
我找到了 svn rm 部分的答案:https://stackoverflow.com/questions/1265122/how-can-i-programmatically-detect-missing-files-in-tar-archive-and-delete-them-f?rq=1,这又归功于http://geryit.com/blog/command-line-subversion-practices/。
答案2
我使用并安排了此批处理脚本。它运行良好。
CD "MyPath"
for /f "usebackq tokens=2*" %%i in (`svn status ^| findstr /R "^\!"`) do (svn del "%%i %%j")
svn add * --depth=infinity --force
svn commit . -m "My Message"