Có cách nào để chỉ cam kết một danh sách các tệp cụ thể không (eq chỉ là một trong danh sách các tệp mà SVN muốn cam kết).
Tôi đang làm việc trên MAC OS X trong Terminal, không có UI nào.
Có cách nào để chỉ cam kết một danh sách các tệp cụ thể không (eq chỉ là một trong danh sách các tệp mà SVN muốn cam kết).
Tôi đang làm việc trên MAC OS X trong Terminal, không có UI nào.
Câu trả lời:
Chắc chắn rồi. Chỉ cần liệt kê các tập tin:
$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png
Tôi không biết cách nào để bảo nó bỏ qua một tập hợp tệp nhất định. Tất nhiên, nếu các tệp bạn muốn cam kết dễ dàng được liệt kê bởi trình bao, bạn có thể sử dụng tệp đó:
$ svn ci -m "No longer sets printer on fire" printer-driver/*.c
Bạn cũng có thể yêu cầu lệnh svn đọc danh sách các tệp cần cam kết từ một tệp:
$ svn ci -m "Now works" --targets fix4711.txt
svn add
được sử dụng để thêm tập tin vào kho lưu trữ.
Sử dụng thay đổi. Ưu điểm của việc chỉ định các tệp là bạn có thể hình dung và xác nhận mọi thứ bạn muốn thực sự được bao gồm trước khi bạn cam kết.
$ svn changelist fix-issue-237 foo.c
Path 'foo.c' is now a member of changelist 'fix-issue-237'.
Điều đó đã được thực hiện, svn bây giờ giữ mọi thứ riêng biệt cho bạn. Điều này giúp khi bạn tung hứng nhiều thay đổi
$ svn status
A bar.c
A baz.c
--- Changelist 'fix-issue-237':
A foo.c
Cuối cùng, nói với nó để cam kết những gì bạn muốn thay đổi.
$ svn commit --changelist fix-issue-237 -m "Issue 237"
svn changelist fix-issue-237 --recursive path/to/directory
Về cơ bản, bạn đặt các tệp bạn muốn cam kết trên dòng lệnh
svn ci file1 file2 dir1/file3
Do trạng thái lật đổ của tôi, tôi đã phải sáng tạo. svn st
cho thấy M
, A
và ~
trạng thái. Tôi chỉ muốn M
và A
vì vậy ...
svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt
Lệnh này cho biết tìm tất cả các dòng đầu ra bằng cách svn st
bắt đầu bằng M
hoặc A
, cắt bằng dấu phân cách dấu cách, sau đó lấy colums 8 đến cuối. Kết xuất nó vào Target.txt và ghi đè.
Sau đó sửa đổi Target.txt để cắt thêm danh sách tệp. Sau đó chạy bên dưới để cam kết:
svn ci -m "My commit message" --targets targets.txt
Có lẽ không phải là trường hợp sử dụng phổ biến nhất, nhưng hy vọng nó sẽ giúp được ai đó.
grep -v '^~'
để danh sách đen những gì bạn muốn.
Bên cạnh việc liệt kê các tệp rõ ràng như được hiển thị bằng thư giãn và Wienczny , bạn có thể thiết lập danh sách thay đổi và kiểm tra chúng. Những thứ này cho phép bạn quản lý các bộ thay đổi khác nhau cho cùng một bản sao làm việc.
Bạn có thể đọc về chúng trong phiên bản trực tuyến của cuốn sách SVN xuất sắc .
thử kịch bản này ..
#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`;
do LIST="${LIST} $f $NULL on";
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
Tôi tạo một thư mục (phụ) có tên "ẩn", di chuyển tệp mà tôi không muốn cam kết ở đó. Sau đó thực hiện cam kết của tôi, bỏ qua khiếu nại về các tập tin bị thiếu. Sau đó di chuyển tệp ẩn từ ẩn trở lại ./
Tôi biết không có nhược điểm của chiến thuật này.