被TortoiseSVN宠坏了,我现在在 Linux 上使用命令行与 SVN 存储库进行交互。
在 TortoiseSVN 中,我只需提交更改,它会显示添加内容、删除内容和修改内容的列表。我会检查所有框并单击OK。
svn add
使用命令行,当我添加文件和删除文件时,我似乎必须这样做svn rm
,当这一切都完成后,然后我输入svn commit
,它会提交添加、删除和修改的内容。
有没有我可以使用的命令一次性提交我已删除的文件/文件夹、我添加的文件/文件夹以及我已修改的文件?
被TortoiseSVN宠坏了,我现在在 Linux 上使用命令行与 SVN 存储库进行交互。
在 TortoiseSVN 中,我只需提交更改,它会显示添加内容、删除内容和修改内容的列表。我会检查所有框并单击OK。
svn add
使用命令行,当我添加文件和删除文件时,我似乎必须这样做svn rm
,当这一切都完成后,然后我输入svn commit
,它会提交添加、删除和修改的内容。
有没有我可以使用的命令一次性提交我已删除的文件/文件夹、我添加的文件/文件夹以及我已修改的文件?
在 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
.
Nader Shirazie 在发布的脚本中有正确的命令。这是 Linux 的单行版本:
svn add $(svn st | sed -n 's/^[A?] *\(.*\)/\1/p')
我想要这个功能很久了,很高兴我在这里搜索!
加上:
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
这对我来说可以。
没有 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 版本似乎不存在。
您可能想要修改脚本以获取注释参数,但这只是一个开始。您还可以将其修改为一种简单的方法来为您添加/删除,并手动进行提交。
使用标准的 SVN 工具,没有这样的事情 - 在常见问题解答中提到它是一件坏事。
如果你想用 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"
自动添加新文件:
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
调用合二为一。
-r
使用扩展的正则表达式-n
不通过输入?
以or !
(/^\?/
和/^!/
, 分别)开头的行s/^.{8}//
s/(.+)$/\1/p
另见:http ://www.grymoire.com/Unix/sed.html
(GNU 版本)的-r
(or --no-run-if-empty
) 选项xargs
在没有来自 的输入时停止处理sed
,因此消除了 SVN 错误Not enough arguments provided
。
简而言之,没有。你必须svn add
和svn delete
每个项目。
如果您没有绑定到 SVN,其他一些源代码控制系统也提供此功能;例如,Mercurial 的hg addremove
.
虽然使用行参数的简洁命令功能强大,但它们可能会错过(或失败)包含带空格的文件名。以下命令来自对包含所有文件的类似问题的回答。
svn add --force * --auto-props --parents --depth infinity -q