2011-12-15 98 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" " "` 
相關問題