Một giải pháp thay thế cho móc trước khi cam kết, nếu bạn đang sử dụng Linux (hoặc Git bash hoặc Cygwin hoặc tương tự), là để bọc git
trong một hàm trợ giúp trình bao. Thêm bên dưới để ~/.bashrc
của bạn (ví bash, Git bash) hoặc ~/.zshrc
(đối với zsh) tập tin, hoặc bất cứ điều gì tương đương là cho vỏ của bạn:
real_git=$(which git)
function git {
if [[ ($1 == svn) && ($2 == dcommit) ]]
then
curr_branch=$($real_git branch | sed -n 's/\* //p')
if [[ ($curr_branch != master) && ($curr_branch != '(no branch)') ]]
then
echo "Committing from $curr_branch; are you sure? [y/N]"
read resp
if [[ ($resp != y) && ($resp != Y) ]]
then
return 2
fi
fi
fi
$real_git "[email protected]"
}
(Tôi đã thử nghiệm điều này với bash và zsh trên Red Hat , và bash trên Cygwin)
Bất cứ khi nào bạn gọi git
, bây giờ bạn sẽ gọi hàm này thay vì nhị phân thông thường. Chức năng sẽ chạy git bình thường, trừ khi bạn đang gọi git svn dcommit
trong khi được gắn với một chi nhánh không phải là chủ. Trong trường hợp đó, nó sẽ nhắc bạn xác nhận trước khi thực hiện cam kết. Bạn có thể ghi đè hàm bằng cách chỉ định đường dẫn đến git
một cách rõ ràng (đó là những gì mà $real_git
đang thực hiện). Hãy nhớ rằng sau khi cập nhật ~/.bashrc
hoặc tương đương, bạn sẽ cần phải tải lại nó, hoặc bằng cách bắt đầu phiên trình bao mới (đăng xuất và đăng nhập lại) hoặc bằng cách chạy source ~/.bashrc
.
Sửa: Là một nâng cao, bạn có thể loại bỏ các dòng đầu tiên, bắt đầu real_git=
, và thay thế các trường hợp khác của $real_git
với command git
, mà đạt được điều tương tự nhưng theo cách ưa thích. Tôi đã không cập nhật các kịch bản chính nó như tôi đã không thể kiểm tra sự thay đổi trên zsh.
Nguồn
2012-02-17 14:52:34
Không built-in nhưng một ý tưởng: Ngay sau khi bạn chi nhánh, làm một 'git config --rename-phần "svn-remote.svn "" no-svn-remote "'. Khi bạn muốn thực hiện dcommit, bạn có thể hoàn nguyên. – vasquez
Hoặc có lẽ tôi có thể chỉ định bằng cách nào đó rằng không có chi nhánh thượng nguồn cho chi nhánh địa phương này? Bạn có biết làm thế nào tôi có thể làm điều đó? – greg0ire
Tôi nghiên cứu rằng trong ánh sáng của câu hỏi của bạn, nhưng có vẻ như git svn không nhận được chuyển đổi chi nhánh địa phương, do đó, nó nghĩ rằng nó vẫn còn trên thân cây hoặc thanh toán chi nhánh/thẻ. Có thể đáng để thử thay đổi dòng nhánh mặc định trong tệp cấu hình để kiểm tra điều này. – vasquez