Tôi gặp vấn đề tương tự. Cách tiếp cận của tôi là viết các bí danh hoặc hàm cho các hành động phổ biến nhất mà tôi thực hiện. Để tham khảo, đây là các hàm shell ZSH. Bản thân các chức năng cũng hoạt động trong bash, nhưng công cụ hoàn thành shell sẽ khác.
Khi xem xét cách sử dụng của bạn, hành động "chọn một số" bạn muốn thực hiện khác với cách sử dụng của tôi và không có quy định nào cho việc đó. Tôi thực sự sẽ đề nghị sửa đổi việc sử dụng kiểm soát sửa đổi của bạn để thực hiện các cam kết thường xuyên hơn và tận dụng nhiều bản sao hoặc chi nhánh hoạt động trong kho lưu trữ để theo dõi các bộ thay đổi có chọn lọc. Nếu bạn đang làm việc trong một thư mục, mọi thứ bạn làm ở đó sẽ được cam kết hoặc được hoàn nguyên trên cơ sở chọn lọc, nhưng không nên để lại nhiều xung quanh. Cam kết những gì bạn đã có tại bất kỳ thời điểm nào và sử dụng các tính năng kiểm soát sửa đổi để xử lý những gì đi vào sản phẩm hay không.
Để làm việc này, bạn sẽ đặt mã vào ~/.zshrc
tệp của mình (hoặc ~/.bashrc
cho bash).
Đây là chức năng chính tôi sử dụng (mỗi ngày):
function svnlist () {
if [ -z "$2" ]; then
case $1 in
clobered)
svn status | grep '^~' | cut -c9-
;;
missing)
svn status | grep '^\!' | cut -c0-
;;
unknown)
svn status | grep '^\?' | cut -c9-
;;
conflicted)
svn status | grep '^C' | cut -c9-
;;
esac
else
case $2 in
add)
$0 unknown | xargs -iX svn add "X"
;;
del)
$0 missing | xargs -iX svn del "X"
;;
revert) $0 conflicted | xargs -iX svn revert "X"
;;
resolved) $0 conflicted | xargs -iX svn resolved "X"
;;
unclober)
mkdir _tmp
$0 clobered | while read item; do
mv "$item" _tmp
svn del "$item"
done
svn ci -m "Unclobering files. (removing old)"
mv _tmp/* .
rmdir _tmp
$0 unknown add
svn ci -m "Unclobering files. (adding new)"
;;
esac
fi
}
alias svndiff="svn diff -x -b | colordiff"
compctl -x 'p[1]' -k '(missing unknown conflicted clobered)' - 'p[2]' -k '(add del revert resolved)' -- svnlist
Điều này sẽ cho phép bạn chạy một cái gì đó như svnlist unknown
để tìm tất cả các tệp trong thư mục hiện tại không được đảo ngược và svnlist unknown add
tùy ý thêm tất cả chúng. svnlist clobered revert
sẽ tìm thấy tất cả các tệp đã bị ghi lại sau khi cập nhật và hoàn nguyên chúng. svnlist conflicted resolved
sẽ đánh dấu tất cả các xung đột là giải quyết. svnlist missing del
sẽ đánh dấu bất kỳ tập tin bị thiếu trong hành động là bị xóa trong kho lưu trữ.
Ngoài ra nếu bạn gặp phải nó, đây là một để chỉnh sửa thông điệp tường trình của một phiên bản cụ thể. Tôi không sử dụng nó nhiều nữa nhưng tôi đã mắc rất nhiều lỗi từ sớm và thích giữ các thông điệp tường trình gọn gàng:
function svneditlog () {
rev=$1
if ! echo $rev | pcregrep '^[0-9]+$'; then
echo "Invalid usage. svneditlog REV"
return
fi
svn info | grep ^URL: | awk '{print $2}' | read url
svn propedit -r $rev --revprop svn:log $url
}
Khi xem mã này, nó thực sự cho thấy rằng tôi đã viết những thứ này từ nhiều năm trước khi tôi mới bắt đầu với kiểm soát phiên bản và không duyên dáng trong một cái vỏ, nhưng nó vẫn hoạt động.