来自命令行的颠覆(svn):任何一个“反映所有更改”的命令?
Posted
技术标签:
【中文标题】来自命令行的颠覆(svn):任何一个“反映所有更改”的命令?【英文标题】:subversion (svn) from command line: any single command to "reflect all the changes"? 【发布时间】:2013-01-26 01:28:58 【问题描述】:当你在一个项目上工作时,至少我自己,无论你是否使用 IDE(如 eclipse 或 netbeans),你都会更新源文件、创建目录、创建新文件、删除一些文件或重命名它们。 (我不想花时间为每个文件发出 svn 命令,甚至更多,如果其中一些可能还不是最终的)。
在某个时刻,您认为您已经掌握了它:好的,这就是我想要保留并保存到存储库中的内容。
是否有任何单一的 svn 命令说“按现状存储工作项目”? (这可能意味着大量的添加和删除(重命名 = 使用 svn remove+add 的本地副本)并递归到目录中)。
如果不是(我猜),是否有任何 shell 脚本来执行此任务? (基于 svn 状态,递归每个子文件夹)。
更新:
是否有任何 maven 插件可以做到这一点?
谢谢。
【问题讨论】:
我不关注。svn ci
在您的工作副本的根目录(或在有意义的***别)执行您所描述的内容。如果您的 IDE 有一个 Subversion 插件(Eclipse 和 Netbeans 都有),该插件应该在幕后处理您的重命名、移动等,因此您不必手动 svn mv
。
@alroc 希望,但例如: 1. rm main.c
(shell 命令,删除早期提交的文件) 2. svn status
( !main.c) 3. svn ci
(无输出) 4. svn status
(还是 !main.c) 如果在一个单独的目录中你执行checkout
,那么你仍然会得到main.c
那你删除main.c
错了。如果你想从 Subversion 中删除它,它是svn rm main.c
(同样,你的 IDE 插件应该为你做这个)。如果是从 shell 中意外删除,您可以使用 svn up
将其取回。
@alroc 但我不想为工作项目中的每个更改发出svn command
。我只想用一个命令将所有文件存储为大快照。
同样,如果您使用的是 IDE,它的 Subversion 插件应该会为您完成这项工作。否则,你可能会扭曲svn_load_dirs.pl
做你想做的事。但实际上,您将在 any VCS 中找到这一点 - 要更改工作副本,您必须使用客户端告诉那些正在做出改变。使用svn rm
和rm
真的有那么大的负担吗?只需 4 次额外的击键。
【参考方案1】:
我认为这可以完成任务:
if [ $# != 1 ]
then
echo "usage: doSVNsnapshot.sh DIR"
exit 0
fi
ROOT=$1
for i in `find $ROOT -type d \! -path "*.svn*" `
do
echo
echo "--------------------------"
( cd $i ;
echo $i
echo "--------------------------"
svn status | awk '
/^[!]/ system("svn rm " $2)
/^[?]/ system("svn add " $2)
'
)
echo
done
【讨论】:
以上是关于来自命令行的颠覆(svn):任何一个“反映所有更改”的命令?的主要内容,如果未能解决你的问题,请参考以下文章