2012-05-24 15 views
19

Tôi muốn cam kết tất cả các tệp đã sửa đổi trừ một tệp bằng Subversion.Cách cam kết tất cả các tệp ngoại trừ một tệp với SVN

Vì vậy, đây là kịch bản:

$ svn st 
M file1 
M file2 
M file3 
M file4 

tôi có thể làm một cái gì đó như thế này:

svn ci -m "Commit 1" file1 file2 file3 
svn ci -m "Commit 2" file4 

Nhưng khi một số lượng lớn các tập tin, tôi đang cố gắng để đơn giản hóa công việc của tôi:

svn ci -m "Commit 1" `svn st | awk '{print $2}' | grep -v file4` 
svn ci -m "Commit 2" file4 

Giải pháp này rất mong manh, vì kịch bản này không hoạt động:

$ svn st 
M file1 
M file2 
D file3 
A + file4 

Tôi nghĩ rằng SVN không có giải pháp tích hợp cho vấn đề của tôi, nhưng tôi không chắc chắn. Bất kỳ cách tiếp cận nào khác?

Trả lời

21

Lựa chọn 1, AWK:

svn ci -m "Commit 1" `svn st | awk '{print $NF}' | grep -v file4` 
svn ci -m "Commit 2" file4 

Lựa chọn 2, --targets:

svn ci -m "Commit 1" --targets filesToCommit.txt 
svn ci -m "Commit 2" file4 

Tùy chọn 3, --changelist:

svn changelist my-changelist file1 file2 file3 
svn ci -m "Commit 1" --changelist my-changelist 
svn ci -m "Commit 2" file4 
2

Mặc dù tôi chắc chắn rằng bạn có thể làm việc ra một giải pháp như bạn đề xuất việc sử dụng một dòng awk lệnh phức tạp hơn, vì chúng ta đang nói về chỉ là một tập tin, tại sao không

  1. Sao chép tập tin vào một tạm thời vị trí
  2. svn revert tập tin sửa đổi để có được bản gốc lại
  3. Cam kết toàn bộ kho
  4. Sao chép tập tin sửa đổi lại

Đơn giản, dễ dàng, nhanh chóng.

4

Bạn có thể cải thiện phần nào cách tiếp cận của mình bằng cách thêm tệp của bạn bằng tập lệnh vào số change list và cam kết. Bạn có thể kiểm tra danh sách để đảm bảo rằng nó chứa đúng mục trước khi cam kết.

Xem svn changelist --help--changelist tùy chọn trong svn ci --help.

13

Bạn có thể làm điều đó như thế này:

svn diff file4 > tmp.patch 
svn revert file4 
svn ci -m "Commit 1" 
svn patch tmp.patch 

Tại thời điểm này tất cả các file được cam kết trừ file4

+1

'svn patch' đã được bổ sung trong 1.7. Tôi đã sử dụng 'patch -p0 -i tmp.patch' thay vì dòng cuối cùng trong ví dụ này. – Rich

0

Chỉ cần cam kết danh sách các tệp được lọc.

svn ci `ls | grep -v file4` 
4

Commiting tất cả ngoại trừ một sử dụng danh sách thay đổi:

svn changelist my-list -R . 
svn changelist --remove file4 
svn ci -m "Commit 1" --changelist my-list 
svn ci -m "Commit 2" file4