2011-12-15 31 views
8

Tôi đang phát triển với nhiều người.Loại trừ một số tệp trên dòng lệnh svn cam kết (không phải svn: ignore)

Tôi kiểm tra kho lưu trữ từ xa, nhận 3 tệp. Sau khi chỉnh sửa, chạy:

svn status 

Nó cho thấy:

M file_1 
M file_2 
M file_3 

Bây giờ, tôi muốn cam kết chỉ có hai file: file_1, file_2, nhưng không file_3.

Cách thực hiện?

tôi không' muốn sử dụng

svn revert file_3 

trước khi cam kết.

Giải thích: Tôi chỉnh sửa tệp_1, tệp_2 cho dự án được chia sẻ, tệp_3 để chỉ chạy trên máy cục bộ của tôi.

Trả lời

7

Làm thế nào về:

$ svn commit file_1 file_2 
+0

cảm ơn câu trả lời của bạn –

+9

Ok vì vậy nếu tôi có 100 tệp tôi muốn cam kết và chỉ muốn loại trừ một tệp. Là có một cách? – hacklikecrack

+1

Chỉ cần sử dụng trình bao, như cho SVN liệt kê tất cả các tệp đã sửa đổi và grep -v là tệp duy nhất. – zoul

10

Mở rộng trên câu trả lời zoul của .. để phát triển danh sách tệp của bạn sử dụng:

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

Hoặc nếu bạn có tên tập tin với không gian sử dụng:

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

svn stat, hiển thị cho chúng tôi những tệp nào chúng tôi phải cam kết và chúng tôi chỉ cần chọn những tệp đó, thưa bạn. –

+0

Cảm ơn bạn đã thực sự cung cấp câu trả lời hữu ích cho câu hỏi này. – pamphlet

0

Dưới đây là một phiên bản windows powershell mà chỉ cam kết file mà không phải là trong một danh sách thay đổi. Tạo một danh sách thay đổi được gọi là bỏ qua-trên-cam kết (mà Tortoise SVN sẽ hiểu anyway) và đặt các tập tin bạn không muốn cam kết vào nó.

# 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

một dòng cho bash:

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

Tôi muốn đổi thành svn ci $ (svn stat | grep -v ^? | Grep -v exclude.tệp), chỉ để lọc ra các tệp không có trong kho lưu trữ, như các tệp nhị phân được tạo từ các nguồn. Nếu không, svn sẽ phàn nàn về họ và sẽ không cam kết bất cứ điều gì, với các thông báo lỗi tương tự như svn: E200009: 'a.file' không nằm dưới sự kiểm soát phiên bản – dmityugov

0

tôi lên vết thương làm cho một kịch bản có chứa những điều sau đây:

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

tôi chắc chắn rằng ai đó có thể làm cho nó thậm chí còn linh hoạt hơn bằng cách làm này script đọc một tập tin có chứa một danh sách các tập tin được loại trừ khỏi cam kết.

0

có thể bạn có thể sử dụng lệnh này.

svn ci `svn st | grep -e "^[A|M]" | grep -v "test.js" | grep -ve "conf\.js$" | awk '{print $2}' | tr "\\n" " "` 
Các vấn đề liên quan