2011-04-15 24 views
12

Hiện nay, để đảm bảo tài sản lật đổ eol-style được thiết lập để native cho mỗi tập tin mới được thêm vào dự án của chúng tôi, chúng tôi có để thêm video này vào file ~/.subversion/config trên mỗi máy nhà phát triển của chúng tôi:Force svn: eol-style = gốc trên máy chủ?

[miscellany] 
enable-auto-props = yes 

[auto-props] 
*.java = svn:eol-style=native 

Có một cách để làm tương đương trên máy chủ svn?

Trả lời

9

Không có.

Bạn có thể sử dụng tập lệnh móc để tìm thuộc tính được đặt hoặc không, nhưng ngoài việc không thể thực hiện được. Subversion, khác với CVS, không thể thay đổi nội dung của mã đến từ cam kết.

Cuốn sách SVN bao gồm một lưu ý về this question:

Cảnh báo

Đừng cố gắng để thay đổi giao dịch sử dụng các kịch bản móc. Một ví dụ phổ biến về điều này sẽ là tự động đặt các thuộc tính như svn:eol-style hoặc svn:mime-type trong quá trình cam kết. Mặc dù điều này có vẻ như là một ý tưởng hay nhưng nó gây ra vấn đề. Vấn đề chính là khách hàng không biết về sự thay đổi được thực hiện bởi kịch bản móc, và không có cách nào để thông báo cho khách hàng rằng nó đã lỗi thời. Sự không nhất quán này có thể dẫn đến hành vi bất ngờ và bất ngờ.

Thay vì cố gắng để thay đổi giao dịch, nó là tốt hơn để kiểm tra giao dịch trong pre-cam móc và từ chối cam kết nếu nó không đáp ứng được yêu cầu mong muốn.

+0

Thú vị. Cảm ơn các liên kết. Có vẻ như đây là cách để đi: "Thay vì cố gắng sửa đổi giao dịch, tốt hơn hết là kiểm tra giao dịch trong móc trước và từ chối cam kết nếu nó không đáp ứng các yêu cầu mong muốn". – Bart

+0

Câu trả lời lỗi thời. – bahrep

+1

Tại sao điều này đã lỗi thời? –

0

Tôi không thể tìm thấy ví dụ về cách kiểm tra thuộc tính svn: eol-style cho mã nguồn trong tập lệnh móc trước cam kết trực tiếp. Gần nhất là check-mime-type.pl sử dụng thuộc tính kiểu mime để xác định xem tệp có phải là tệp văn bản hay không.

Tập lệnh sau được chèn vào tệp tập lệnh trước cam kết sẽ kiểm tra xem tất cả các tệp .cpp/.h được thêm vào trong cam kết có thuộc tính svn: eol-style. (Nó có thể dễ dàng được mở rộng để kiểm tra phần mở rộng tập tin bổ sung). Nó cũng sẽ cung cấp thông báo để cho biết các tập tin nào bị thiếu thuộc tính svn: eol-style.

REPOS="$1" 
TXN="$2" 

# Get new cpp/h files 
ADDFILES=$(${SVNLOOK} changed "$REPOS" -t "$TXN" | sed -n -e '/^A.*\(\.cpp\|\.h\)$/s/^A *//p') 
#echo "ADDFILES=$ADDFILES" >&2 

# Check files for svn:eol-style property 
ESMISSING='' 
for f in ${ADDFILES} 
do 
    if [[ "$(${SVNLOOK} pl ${REPOS} -t ${TXN} ${f})" != *svn:eol-style* ]] 
    then 
    # output to stderr to include message in svn commit ouput 
    echo "No svn:eol-style property set on file $f" >&2 
    ESMISSING=1 
    fi 
done 

if [[ -n "$ESMISSING" ]] 
then 
    exit 1 
fi 
7

Chỉ vì câu trả lời của Fausto hiện đang lỗi thời sau khi phát hành Subversion 1,8


Trong trường hợp của Subversion 1.8 hoặc sau đó bạn có thể sử dụng ở cấp kho lưu trữ (không trên toàn cầu cho tất cả các kho trên máy chủ) repository dictated configuration (xem thêm topic in Collab's blog), cụ thể là - svn: tự động-đạo cụ trong thư mục gốc của thân của mỗi kho lưu trữ

+0

Bạn có thể vui lòng chỉ cho tôi cách thiết lập cấu hình được lưu trữ đó không? Những liên kết đó chỉ cho thấy cách đọc nó, và tôi dường như cũng chẳng nhận được gì từ Google. – lapis

+0

Vâng, tôi đã tìm thấy một cách thông qua Trình duyệt Kho lưu trữ của TortoiseSVN nhưng một cách điều khiển thú vị nữa. – lapis

+0

Câu trả lời này hữu ích, nhưng cần làm rõ. Th OP đang tìm kiếm một tương đương với các đạo cụ tự động, nhưng được thực thi trên máy chủ. Câu trả lời này chỉ ra tính năng có thể thừa kế và thuộc tính mới của SVN 1.8 trong kho lưu trữ của khách hàng, nhưng quan trọng là 1) đây là một tính năng phía máy khách - một máy khách SVN cũ hơn, ví dụ: 1.7 sẽ không sử dụng nó ở tất cả, và các đạo cụ sẽ không được thực thi, và 2) ngay cả một khách hàng SVN 1.8 có thể để 'svn add --no-auto-props', và một lần nữa, không có gì được thi hành. Tóm lại, bạn cần một cái móc. – javabrett

Các vấn đề liên quan