2011-12-15 127 views
8

我正在与很多人一起开发。排除svn命令行上的某些文件commit(不是svn:ignore)

我检出远程仓库,得到3个文件。编辑后,运行:

svn status 

它显示:

M file_1 
M file_2 
M file_3 

现在,我要提交只有两个文件:file_1,file_2,但不file_3。

怎么办呢?

我不”想使用

svn revert file_3 

之前提交。

说明:我编辑file_1,file_2共享项目,file_3只在本地机器上运行。

回答

7

如何:

$ svn commit file_1 file_2 
+0

谢谢你的回答 –

+9

好吧,如果我有100个文件我想提交,只想排除一个。有没有办法? – hacklikecrack

+1

只需使用shell,就像让SVN列出所有修改过的文件和grep -v单一一样。 – zoul

10

扩大在zoul的回答..开发您的文件列表使用:

svn stat | grep -v ignore.file | perl -ne 'chop; s/^.\s+//; print "$_ "' 

或者,如果你有空格的文件名使用:

svn stat | grep -v ignore.file | perl -ne 'chop; s/^.\s+//; print "\"$_\" "' 
+0

svn stat,向我们展示我们必须提交的文件,并且我们只需要选择那些文件即可。 –

+0

感谢您为此问题提供有用的答案。 – pamphlet

0

这里有一个的Windows PowerShell版本只承诺不在一个变更的文件。创建一个名为ignore-on-commit的更改列表(Tortoise SVN会理解),并将不想提交的文件放入其中。

# get list of changed files into targets 
[XML]$svnStatus = svn st -q --xml C:\SourceCode\Monad 
# select the nodes that aren't in a changelist 
$fileList = $svnStatus.SelectNodes('/status/target/entry[wc-status/@item != "unversioned"]') | Foreach-Object {$_.path}; 
# create a temp file of targets 
$fileListPath = [IO.Path]::GetTempFileName(); 
$fileList | out-file $fileListPath -Encoding ASCII 
# do the commit 
svn commit --targets $fileListPath -m "Publish $version" --keep-changelists 
# remove the temp file 
Remove-Item $filelistPath 
3

一行对于bash:

svn ci $(svn stat | grep -v exclude.file) 
+0

我会将此更改为svn ci $(svn stat | grep -v ^?| grep -v exclude。文件),只是为了过滤不在存储库中的文件,例如从源文件构建的二进制文件。否则,svn会抱怨它们,并且不会提交任何内容,其错误消息类似于svn:E200009:'a.file'不在版本控制之下 – dmityugov

0

我结束了制备含脚本如下:

svn ci $(svn diff --summarize | \ 
    grep -v exclude.file1 | \ 
    grep -v exclude.file2 | \ 
    ... 
    grep -v exclude.fileN \ 
) 

我敢肯定有人可以使其更加灵活的通过使该脚本读取一个文件,该文件将包含要从提交中排除的文件列表。

0

也许你可以使用这个命令。

svn ci `svn st | grep -e "^[A|M]" | grep -v "test.js" | grep -ve "conf\.js$" | awk '{print $2}' | tr "\\n" " "` 
相关问题