11

TortoiseSVN宠坏了,我现在在 Linux 上使用命令行与 SVN 存储库进行交互。

在 TortoiseSVN 中,我只需提交更改,它会显示添加内容、删除内容和修改内容的列表。我会检查所有框并单击OK

svn add使用命令行,当我添加文件和删除文件时,我似乎必须这样做svn rm,当这一切都完成后,然后我输入svn commit,它会提交添加、删除和修改的内容。

有没有我可以使用的命令一次性提交我已删除的文件/文件夹、我添加的文件/文件夹以及我已修改的文件?

4

9 回答 9

9

在 Windows 下,可以使用以下批处理文件:

for /f "tokens=2*" %%i in ('svn status %1 ^| find "?"') do svn add "%%i"  
for /f "tokens=2*" %%i in ('svn status %1 ^| find "!"') do svn delete "%%i"  
svn commit -m "Automatic commit" %1  

只需将上面的三行保存在一个名为“autocommit.bat”的文件中。如果从工作目录运行它,则不需要指定参数。如果您在另一个目录中,则可以将其称为autocommit.bat c:\MyProjectFolder.

于 2011-05-27T16:03:24.340 回答
7

Nader Shirazie 在发布的脚本中有正确的命令。这是 Linux 的单行版本:

svn add  $(svn st | sed -n 's/^[A?] *\(.*\)/\1/p')

我想要这个功能很久了,很高兴我在这里搜索!

于 2012-10-30T14:56:06.543 回答
4

加上:

svn status | grep "^\?" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn add

去除:

svn status | grep "^\!" | sed -e 's/! *//' | sed -e 's/ /\\ /g' | xargs svn remove

这对我来说可以。

于 2009-07-31T14:33:19.720 回答
3

没有 SVN 命令,但我确信有一两个脚本可以扫描未版本化/丢失的文件并发出适当的命令......

我在这里找到了一个:http: //gael-varoquaux.info/computers/svnautocommit/index.html

添加完整脚本

#!/bin/bash


#------------------------------- Subroutines ---------------------------------
usage(){
echo " Usage: $(basename $0) PATH"
echo ""
echo "Automatically commits the changes of svn working copy located in PATH."
echo "The new files are automatically added and the files that have been removed"
echo "are removed."
echo ""
echo "By Gael Varoquaux"
}

#------------------------------- Process the options -------------------------
if [ $# -eq 1 ]
then
    workingdir="$1"
else
    usage
    exit 1
fi

if ! cd $workingdir
then
    echo $workingdir is not a accessible path.
    usage
    exit 1
fi

#------------------------------- Find out what has changed -------------------

# A warning if this fails :
echo "SVN autocommit failed" > $HOME/local/motd

svnstatus=$(svn status $workingdir)
added=$(printf "$svnstatus" | sed -n 's/^[A?] *\(.*\)/\1/p')
removed=$(printf "$svnstatus" | sed -n 's/^! *\(.*\)/\1/p')

if [ "x$added" != "x" ]
then
    echo adding "$added" to repository
    svn add $added
fi

if [ "x$removed" != "x" ]
then
    echo removing "$removed" to repository
    svn remove $removed
fi

svn commit -m "autocommit" && rm $HOME/local/motd

不幸的是,Python 版本似乎不存在。

您可能想要修改脚本以获取注释参数,但这只是一个开始。您还可以将其修改为一种简单的方法来为您添加/删除,并手动进行提交。

于 2009-07-30T23:48:00.503 回答
3

使用标准的 SVN 工具,没有这样的事情 - 在常见问题解答中提到它是一件坏事。

于 2009-07-30T23:55:05.620 回答
1

如果你想用 PowerShell 来做,这里有一个简单的函数,它使用svn status

svn status | ? { $_ -match '^\?\s+(.*)' } | % { svn add $Matches[1] }

积分转到Stack Overflow 问题SVN 命令的答案,以删除所有本地丢失的文件。我调整了他的工作以处理新文件。

我制作的 PowerShell 文件如下所示:

# Delete missing files
svn status | ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }

# Added new files
svn status | ? { $_ -match '^\?\s+(.*)' } | % { svn add $Matches[1] }

# Commit repository
svn commit -m "This commit is done by a PowerShell bat"
于 2015-08-27T19:00:03.650 回答
1

自动添加新文件:

svn st | sed -rn '/^\?/s/^.{8}(.+)$/\1/p' | xargs -r svn add

自动删除已删除的文件:

svn st | sed -rn '/^!/s/^.{8}(.+)$/\1/p' | xargs -r svn rm

解释

这基本上是卢卡答案的浓缩版本,它将grep两个sed调用合二为一。

sed

另见:http ://www.grymoire.com/Unix/sed.html

xargs

(GNU 版本)的-r(or --no-run-if-empty) 选项xargs在没有来自 的输入时停止处理sed,因此消除了 SVN 错误Not enough arguments provided

于 2017-12-12T12:33:43.317 回答
0

简而言之,没有。你必须svn addsvn delete每个项目。

如果您没有绑定到 SVN,其他一些源代码控制系统也提供此功能;例如,Mercurial 的hg addremove.

于 2009-07-30T23:51:11.900 回答
0

虽然使用行参数的简洁命令功能强大,但它们可能会错过(或失败)包含带空格的文件名。以下命令来自对包含所有文件的类似问题的回答。

svn add --force * --auto-props --parents --depth infinity -q
于 2016-02-11T15:42:52.020 回答