2010-01-13 196 views
1
$svn diff > patchfile 

创建一个很好的补丁文件。然而,在Windows下使用TortoiseSVN我已经将一些文件设置为“忽略提交”,也就是说,它在版本控制下,但没有被选中,当我做一个提交。从svn中排除TortoiseSVN的忽略提交文件比较

TortoiseSVN似乎通过.svn/entries中的自定义条目处理此文件。请注意,它不是一个普通的SVN属性(也就是说,不能通过svn propget获取)。

我的问题是,我要创建通过命令行一个补丁文件(通过Cygwin的bash和SVN港),但这个补丁文件应该包括与这种“忽略上提交”标志的文件。

有没有人有一个想法如何做到这一点(除了步行与awk递归通过每个.svn/entries ...)?

回答

2

显然这是一个特殊的changelist entry。至于如何忽略命令行中的文件,它看起来并不像particularly easy way

+1

感谢您的回答!一个简单的方法是用'svn status --changelist ignore-on-commit working-copy'来列出所有具有某个更改列表条目的文件,这可以完成(我现在学到了什么)。这应该够了吧。 – Boldewyn 2010-01-13 13:24:47

1

您可以通过文件上的'svn info'查看更改列表。并通过

$ svn help cl 
changelist (cl): Associate (or dissociate) changelist CLNAME with the named files. 
usage: 1. changelist CLNAME TARGET... 
     2. changelist --remove TARGET... 

Valid options: 
    -q [--quiet]    : print nothing, or only summary information 
    -R [--recursive]   : descend recursively, same as --depth=infinity 
    --depth ARG    : limit operation by depth ARG ('empty', 'files', 
          'immediates', or 'infinity') 
    --remove     : remove changelist association 
    --targets ARG   : pass contents of file ARG as additional args 
    --changelist ARG   : operate only on members of changelist ARG 
          [aliases: --cl] 
+0

但是,我将不得不递归grep所有文件,并调用每个文件'svn info'。我认为,解析'svn st --changelist ignore-on-commit'的输出会更容易。 – Boldewyn 2010-01-13 20:09:55

+0

你也可以在'svn info'上使用--depth infinity来显示所有项目。如果文件被修改,那应该会快很多。 (状态比较,信息只显示元数据) – 2010-01-14 13:05:55

1

我有这个问题太,从而开发出一个简单的命令链,服务器需要使用“svn修改列表”设置/复位修改列表:

SVN ST | grep -A 1000'ignore-on-commit'| grep -v'ignore-on-commit'| sed's /^.* // g'| xargs svn diff | GVIM -

(假设有少于1000个文件以外的变更表改性“忽略上提交”)

使用该命令,修改外变更表文件“忽略上提交”将DIFF-ED, 'ignore-on-commit'内没有文件修改。