2011-01-24 35 views
8

Khi tôi nhấp chuột phải vào bản sao làm việc tại địa phương của tôi và chọn hiển thị nhật ký. TortoiseSVN cho tôi thấy đường dẫn đầy đủ của mỗi tệp đã thay đổi cho bản sửa đổi đó. Từ giao diện tortoiseSVN, những gì tôi muốn làm là như sau.Xuất Chỉ thay đổi tệp từ lật đổ duy trì cấu trúc thư mục

khi tôi nhấp chuột phải vào số sửa đổi và chọn xuất. Tôi muốn nó xuất các tập tin, trong khi vẫn giữ chúng trong thư mục của chúng.

Điều này có khả thi không?

Để đặt theo cách khác, tôi chỉ muốn xuất các tệp tôi đã thay đổi trong lần commit cuối, vào thư mục trên đĩa cứng của tôi (không phải bản sao làm việc của tôi) nhưng tôi không muốn chúng được gộp vào thư mục chính. Tôi muốn họ được sao chép bao gồm cả con đường tương đối của họ.

Trả lời

0

Không, không thể thực hiện được. Bạn có thể xuất toàn bộ kho lưu trữ tại bản sửa đổi đó hoặc chỉ các tệp đã thay đổi với đường dẫn được làm phẳng.

9

Tôi nhận ra đây là một câu hỏi rất cũ, nhưng trả lời ở đây sẽ giúp mọi người tìm kiếm trên google như bản thân mình:

svn status | grep '^[ADMR]' | cut -b 8- | xargs -I '{}' cp --parents {} /temporary/destination/dir 
+0

+1 vì nó làm việc rất lớn đối với tôi, mặc dù, nói đúng, nó không trả lời câu hỏi ban đầu vì nó doesn 't làm việc dưới cửa sổ – martin

+0

Nó có hoạt động trong Windows với cài đặt [Cygwin] (http://cygwin.com) không? –

+0

Người đàn ông tốt! Làm việc cho tôi.Nhưng hãy nhớ rằng điều này xuất khẩu những thay đổi không được đáp ứng. Nhưng công trình. – TodStoychev

1

BASH

Hãy nói rằng bạn có một máy chủ dev, với SVN, nhưng trên máy chủ sản xuất của bạn, bạn không có SVN. Vì vậy, bạn dev và SVN xuất và tải trang web đã xuất lên sản xuất.

Bây giờ bạn thực hiện thay đổi, nhưng bạn không muốn rsync/tải lên toàn bộ xuất - chỉ thay đổi.

On Dev server:

(giả sử bạn đã kiểm tra trang web dev với svn checkout https://svn.server.com/web/sitename/trunk /path/to/sitename và giả sử tập tin trang web dev đang ở TRỤ)

cd /path/to/sitename/ 
zip /path/to/diff.zip $(svn diff --summarize -r 123:HEAD https://svn.server.com/web/sitename/trunk | awk '{ print $2 }' | sed -e 's{https://svn.server.com/web/sitename/trunk/{{') 

này sẽ tạo một tập tin ZIP với các tập tin đã thay đổi [s] - trong một cấu trúc thư mục còn nguyên vẹn - từ bản sửa đổi 123: HEAD.

Nếu vì một số lý do bạn không muốn HEAD, sau đó:

cd /path/to/sitename/ 
svn up -r:124 
zip /path/to/diff.zip $(svn diff --summarize -r 123:124 https://svn.server.com/web/sitename/trunk | awk '{ print $2 }' | sed -e 's{https://svn.server.com/web/sitename/trunk/{{') 
svn up 

(điều này đặt ra DEV để sửa đổi mong muốn, lấy tập tin [s], sau đó up lại HEAD)

+0

Cách thức hoạt động: 'svn diff --summarize -r 123: 124 https://svn.server.com/web/sitename/trunk | awk '{print $ 2}' | {https://svn.server.com/web/sitename/trunk/ {{''của sed -e lấy danh sách các thay đổi tức là' somedir/somefile.ext' và chuyển nó thành zip. Vì đường dẫn sẽ là tương đối, bạn phải nằm trong thư mục dev của trang web. Bạn có thể chạy lệnh svn diff độc lập để xem những tệp nào sẽ được đưa vào. – AnOldMan

1

Như đây là một trong những kết quả đầu tiên trên Google chỉ xuất các tập tin đã thay đổi với SVN, tôi đã tạo một phiên bản batch cho Windows. Không phải là rất phức tạp, vì tôi hiếm khi cần phải làm một cái gì đó trong hàng loạt, nhưng nó sẽ làm công việc. Bạn cần svn.exe trong đường dẫn của bạn để làm việc này. Cũng cẩn thận để bao gồm dấu gạch chéo ngược sau trong các biến thư mục.

@echo off 
set maindir=C:\path\to\project\root\ 
set exportdir=C:\path\to\project\export\ 

:: Delete the export dir and create it again to get rid of the old files 
rd %exportdir% /S /Q 
md %exportdir% 

:: Go to the svn directory 
cd %maindir% 

:: Go through all "svn status" results 
FOR /f "tokens=*" %%G IN ('svn status') DO (call :copyfile "%%G") 
GOTO :eof 

:: Copy the files to the export directory 
:copyfile 
    :: We can't directly substr the file name, so we need to buffer it 
    set line=%1 

    :: substr the correct file name (character 9 to one before the end of the string) 
    set filepath=%line:~9,-1% 

    :: Copy the file (the asterisk means that it won't ask if directory or file) 
    xcopy %maindir%%filepath% %exportdir%%filepath%* /H 
    GOTO :eof 

Lệnh Linux là ngắn hơn một chút. Hoặc sử dụng một lớn theo như trong câu trả lời của Joe, hoặc cái này thậm chí còn ngắn hơn (tìm thấy here):

svn status | cut -c9-99999 | cpio -pvdmu /path/to/export 
Các vấn đề liên quan