如果未指定文件,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