2010-12-07 73 views
4

我有一个项目,有一个我修改过的配置文件。我想提交除配置文件以外的所有内容。这是svn的状态。管道“svn st”转换为“svn commit”

?  web/trunk/webroot/tmp 
M  web/trunk/webroot/css/styles.css 
M  web/trunk/views/posts/list_all.ctp 
M  web/trunk/config/core.php 

这是我运行的命令。

svn st | grep ? -v | grep config/core.php -v | awk '{print $2;}' | xargs sudo svn commit 

但我不断收到此消息。

Received SIGHUP or SIGTERM 
svn: Commit failed (details follow): 
svn: system('/usr/bin/editor svn-commit.tmp') returned 256 

有关如何解决这个问题的任何建议将非常感激。

编辑:这是有点有趣。我回应了结果,这就是我得到的结果。

svn st | grep ? -v | grep gearman -v | awk '{print $2;}' | xargs echo | awk '{ print "sudo svn commit " $0; }' 

输出:

sudo svn commit web/trunk/webroot/css/backend.css web/trunk/views/store_subscribers/list_all.ctp 

运行上面的结果手动工作正常,但是当我用管道输送入SH,

svn st | grep ? -v | grep gearman -v | awk '{print $2;}' | xargs echo | awk '{ print "sudo svn commit " $0; }' | sh 

输出:

Received SIGHUP or SIGTERM 
svn: Commit failed (details follow): 
svn: system('/usr/bin/editor svn-commit.tmp') returned 256 
+0

如果你正常提交,SVN是否会给你这个错误? – erjiang 2010-12-07 01:14:29

+1

* sudo * svn commit? – 2010-12-07 01:16:23

回答

-1

主要你需要svn add之前你svn commit。例如,这不起作用:

$ touch testfile 
$ svn st 
$ svn commit testfile -m 'playing with svn' 
svn: Commit failed (details follow): 
svn: '/cygdrive/c/web/cpoe_ordersets/testfile' is not under version control 

但是,如果我记得svn add它的作品。

$ svn add testfile 
A   testfile 

$ svn commit testfile -m 'playing with svn' 
Adding   testfile 
Transmitting file data . 
Committed revision 1505. 

所以,你可能想在提交前的svn add命令添加到您的管道,或者更可能是你真正想要的是

  1. 运行svn add * --force在根目录下添加的所有版本的文件,那么
  2. svn revert config/core.php你不想添加
  3. 在根目录下运行svn commit -m "I added some unversioned files"提交所有添加的文件。
1

您可以backticks

而不是模拟的xargs方便:

svn st | grep ? -v | grep config/core.php -v | awk '{print $2;}' | xargs sudo svn commit 

你可以试试:

svn ci `svn st | grep ? -v | grep config/core.php -v | awk '{print $2;}'` 

末,包刚落xargs命令您在backticks中的查询,并添加svn ci到你的例子的前面。