有没有办法让它如此,以至于如果我打电话给$ svn ci -m "some message"
,它会因为我没有指定我想检查的文件而大叫我?如果没有指定文件,ci上的SVN警告
我会好起来的,要么只是要求我确认我想检查整个目录,或者只是取消操作。
通常我会尽量详细地告诉SVN我想检查的文件,但偶尔我会忘记并最终以比我想要的方式检查。
有没有办法让它如此,以至于如果我打电话给$ svn ci -m "some message"
,它会因为我没有指定我想检查的文件而大叫我?如果没有指定文件,ci上的SVN警告
我会好起来的,要么只是要求我确认我想检查整个目录,或者只是取消操作。
通常我会尽量详细地告诉SVN我想检查的文件,但偶尔我会忘记并最终以比我想要的方式检查。
在我找到你的答案之前,我想确保你理解Subversion如何工作。
Subversion将更改视为更改列表而不是单个文件更改。这就是为什么每当有提交而不仅仅是单个文件时,整个存储库修订版本都会增加。
很多人谁使用,以不处理变更表中的版本控制系统做这样的事情:
$ svn commit file1
$ svn commit file2
$ svn commit file3
这是不好的,因为它打破了变化列表的概念。如果file1
,file2
和file3
都与单个更改有关,它们应该一起承诺。
使用Subversion的标准方式,它一次在单个更改列表上工作。您正在修复错误或添加功能,提交更改,然后处理下一个错误或功能。如果您正在同时处理两个单独的错误或功能,则应该确实有两个单独的检出。
这样做会允许您使用svn commit
将更改列表作为单个单元提交。
这就是说,有是改变一个颠覆的这种行为犯,如果你没有列出任何文件的方式,那就是通过定义自己的svn
功能的别名svn
命令。
例如,在Kornshell,有改变的提示没有简单的方法,当你做一个cd
以反映所在的目录。要解决这个问题,你创建一个_cd
功能改变的目录,并提示。然后,您将cd
命令别名为_cd
函数。
对于您的情况,您将定义一个_svn
函数,查看第一个参数并查看它是否为commit
。如果不是,则可以安全地执行实际的svn
命令。如果第一个参数是commit
,则可以查看是否有第二个参数。如果没有,你可以假设你忘记列出文件,然后退出。该功能会是这个样子:
function _svn {
if [[ $1 == "commit" ]] && [[ -z $2 ]]
then
echo "You need to specify the exact files to commit"
exit 2
else
\svn $*
fi
然后,创建一个别名:
alias svn="_svn"
现在,执行svn
不会运行svn
命令(至少直接)。相反,你的别名将运行_svn
函数。
顺便说一下,我没有假设我的函数中有任何参数处理。 (如果将-m "this is a test") or
--username bob --password swordfish添加到命令中,该怎么办?)。你必须扩展函数来处理参数到commit命令。然而,这给你一个总体思路,你可以如何改变一个命令的功能来做这样的事情。
我想出了一个bash脚本调用,而不是SVN提交,但这参数
#!/bin/bash
# usage: ci -[file1...fileN] [-m message]]
# a wrapper for svn ci with some extra features
# - If no message is given, will prompt user for message
# - If no files are given, will show user list of files that
# will be checked in and ask them to confirm or select files
# they want to check in
FILES=""
MESSAGE=""
MESSAGE_FLAG=0
# parse files and message from input
for var in "[email protected]"
do
if [ $MESSAGE_FLAG -eq 1 ]
then
MESSAGE="$var"
break
elif [ "$var" = "-m" ]
then
MESSAGE_FLAG=1 # Indicates message is coming next
else
FILES="$FILES $var"
fi
done
# ask for message if not present
if [ "$MESSAGE" = "" ]
then
echo "Enter a message:"
read MESSAGE
fi
# Check files have been specified
if [ "$FILES" = "" ]
then
echo "No files have been specified"
# call to svn st to print out list of modified files
svn st
echo "Do you want to check in all of these files (y/n/q):"
read override
if [ "$override" != "y" ]
then
if [ "$override" = "q" ]
then
exit
fi
echo "What files do you want to check in?"
read FILES
fi
fi
svn ci $FILES -m "$MESSAGE"
的一些检查,我应该提,我一个JavaScript程序员,所以我不得不将灰尘从BASH书籍来获得这个工作,所以谨慎使用。
我把这个文件放在我的PATH中,并且把它叫做ci,所以不是打电话给svn ci
我打电话给ci
,也会在长途中节省一些击键。
我在我的.profile中有这个: 别名check ='svn diff> out; vi out;' ..然后我总是在svn提交之前做一个'检查',这样我就可以事先验证我要检查的是什么。这通常足以让我免于在脚下自我拍摄。 – 2012-08-12 19:14:36
我通常会尽量做同样的事情,但只需要一次忘记按照自己的惯例在脚下自己射击。以某种方式建立它会很好。 – seagullJS 2012-08-13 02:19:23