来自命令行的颠覆(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 rmrm 真的有那么大的负担吗?只需 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):任何一个“反映所有更改”的命令?的主要内容,如果未能解决你的问题,请参考以下文章

Mac环境下svn命令行的使用

在颠覆工作副本中重命名目录的明智方法

svn使用规范在Windows下使用svn命令行工具svn命令行的解释

来自命令行的 ms 语音

在Windows下使用svn命令行教程及svn命令行的解释

SVN 命令行的使用