如果未指定文件,ci上的SVN警告
有没有办法让我打电话给如果未指定文件,ci上的SVN警告,svn,Svn,有没有办法让我打电话给$svn ci-m“some message”时,它会因为我没有指定要签入的文件而对我大喊大叫 我可以接受它,或者只是要求我确认我想签入整个目录,或者只是取消操作 通常我会尽量详细地告诉SVN我想签入的文件,但有时我会忘记签入的文件比我想签入的文件多。在回答您的问题之前,我想确保您了解Subversion是如何工作的 Subversion将更改视为更改列表,而不是单个文件更改。这就是为什么每当有提交而不仅仅是单个文件时,整个存储库版本都会增加 许多习惯于不处理变更列表的版本
$svn ci-m“some message”
时,它会因为我没有指定要签入的文件而对我大喊大叫
我可以接受它,或者只是要求我确认我想签入整个目录,或者只是取消操作
通常我会尽量详细地告诉SVN我想签入的文件,但有时我会忘记签入的文件比我想签入的文件多。在回答您的问题之前,我想确保您了解Subversion是如何工作的 Subversion将更改视为更改列表,而不是单个文件更改。这就是为什么每当有提交而不仅仅是单个文件时,整个存储库版本都会增加 许多习惯于不处理变更列表的版本控制系统的人会执行以下操作:
$ svn commit file1
$ svn commit file2
$ svn commit file3
function _svn {
if [[ $1 == "commit" ]] && [[ -z $2 ]]
then
echo "You need to specify the exact files to commit"
exit 2
else
\svn $*
fi
这是不好的,因为它打破了变更列表的概念。如果file1
、file2
和file3
都与单个更改相关,则应将它们一起提交
使用Subversion it一次处理单个更改列表的标准方法。您需要修复一个bug或添加一个功能,提交您的更改,然后处理下一个bug或功能。如果您同时处理两个单独的bug或特性,那么您应该有两个单独的签出
这样做将允许您使用svn commit
将更改列表作为单个单元提交
也就是说,如果不列出任何文件,有一种方法可以更改Subversion提交的行为,即定义自己的
svn
函数和svn
命令的别名
例如,在Kornshell中,当您制作cd
以反映您所在的目录时,没有简单的方法可以更改提示。要解决这个问题,您需要创建一个\u cd
函数来更改目录和提示符。然后,将cd
命令别名为\u cd
函数
在本例中,您将定义一个\u svn
函数,该函数查看第一个参数并查看它是否为commit
。如果不是,您可以安全地执行实际的svn
命令。如果第一个参数是commit
,则可以查看是否有第二个参数。如果没有,您可以假设您忘记列出文件,然后退出。该函数将如下所示:
$ svn commit file1
$ svn commit file2
$ svn commit file3
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
命令(至少是直接执行)。相反,您的别名将运行\u svn
功能
顺便说一下,我并没有在函数中假设任何参数处理。(如果在命令中添加
-m“这是一个测试”)或--username bob--password swardfish`会怎么样?)。您必须扩展该函数来处理commit命令的参数。不过,这让您大致了解了如何更改命令的功能来执行类似的操作。在我回答您的问题之前,我想确保您了解Subversion是如何工作的
Subversion将更改视为更改列表,而不是单个文件更改。这就是为什么每当有提交而不仅仅是单个文件时,整个存储库版本都会增加
许多习惯于不处理变更列表的版本控制系统的人会执行以下操作:
$ svn commit file1
$ svn commit file2
$ svn commit file3
function _svn {
if [[ $1 == "commit" ]] && [[ -z $2 ]]
then
echo "You need to specify the exact files to commit"
exit 2
else
\svn $*
fi
这是不好的,因为它打破了变更列表的概念。如果file1
、file2
和file3
都与单个更改相关,则应将它们一起提交
使用Subversion it一次处理单个更改列表的标准方法。您需要修复一个bug或添加一个功能,提交您的更改,然后处理下一个bug或功能。如果您同时处理两个单独的bug或特性,那么您应该有两个单独的签出
这样做将允许您使用svn commit
将更改列表作为单个单元提交
也就是说,如果不列出任何文件,有一种方法可以更改Subversion提交的行为,即定义自己的svn
函数和svn
命令的别名
例如,在Kornshell中,当您制作cd
以反映您所在的目录时,没有简单的方法可以更改提示。要解决这个问题,您需要创建一个\u cd
函数来更改目录和提示符。然后,将cd
命令别名为\u cd
函数
在本例中,您将定义一个\u svn
函数,该函数查看第一个参数并查看它是否为commit
。如果不是,您可以安全地执行实际的svn
命令。如果第一个参数是commit
,则可以查看是否有第二个参数。如果没有,您可以假设您忘记列出文件,然后退出。该函数将如下所示:
$ svn commit file1
$ svn commit file2
$ svn commit file3
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
命令(至少是直接执行)。相反,您的别名将运行\u svn
功能
顺便说一下,我并没有在函数中假设任何参数处理。(如果在命令中添加-m“这是一个测试”)或--username bob--password swardfish`会怎么样?)。您必须扩展该函数来处理commit命令的参数。但是,这让您大致了解了如何更改命令的功能来执行类似操作。我提出了一个bash脚本来调用,而不是SVN commit,它可以对参数进行一些检查
#!/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 "$@"
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的书上掸去灰尘才能让它正常工作,所以请谨慎使用
我将这个文件放在我的路径中,并将其命名为ci,因此我将不调用svn ci