2009-10-06 20 views
6

Sử dụng phiên bản svn 1.3.1 (không thể nâng cấp do máy chủ CM được cấu hình) trên CentOS 4.2.SVN: "Kiểu kết thúc dòng không nhất quán" - Kiểm tra tệp có^M cố ý

Mã của tôi (tập lệnh bash) cụ thể có^M trong đó vì lý do quan trọng. Thật không may, lật đổ sẽ không cho phép tôi kiểm tra tập tin này trong đó phàn nàn rằng:.

svn: Cam kết thất bại (chi tiết theo):
svn: dòng không phù hợp kết thúc phong cách
svn: cam kết thông báo của bạn bị bỏ lại trong một tập tin tạm thời :

Tôi đã chứng minh rằng việc xóa^M duy nhất khỏi mã của tôi cho phép nó được đăng ký. Làm thế nào để tôi nói với subversion rằng^M là cố ý và cho phép tệp được kiểm tra?

Trả lời

10

Bạn cần phải xóa thuộc tính svn: eol khỏi tệp của mình. Subversion không quan tâm đến kết thúc dòng trong tệp của bạn cho đến khi thuộc tính này được thêm vào. Để trích dẫn subversion book:

Điều này có nghĩa rằng theo mặc định, Subversion không phải trả bất kỳ ý đến các loại của end-of-line (EOL) đánh dấu được sử dụng trong tập tin của bạn.

Cuốn sách này sau đó đi vào mô tả làm thế nào bạn có thể làm cho việc chăm sóc lật đổ về kết thúc dòng bằng cách thiết lập svn:eol-style, đó là chính xác những gì bạn không muốn.

0

Tôi giả định rằng nó đang được sử dụng như một chuỗi hoặc một cái gì đó. Không bash có một cách để mã hóa các ký tự?

0

Tôi nghĩ rằng bạn cần phải sử dụng svn:eol-style tài sản:

svn propset svn:eol-style LF myscript.sh 

sẽ gây Subversion để luôn đối xử với nội dung tập tin có LF-phong cách dòng kết thúc.

0

Tôi nghĩ bạn có thể đặt thuộc tính svn: mime-type thành nội dung không có văn bản nào đó (như ứng dụng/octet-stream?). Điều này có thể làm cho subversion bỏ qua các kết thúc dòng.

Hãy xem phần File Content Type của svnbook.

1

Một cách tiếp cận khác là loại bỏ nhân vật điều khiển trong chương trình ngay từ đầu; điều này có thể có các lợi ích tương thích khác và có thể tránh các vấn đề với việc chỉnh sửa trong tương lai.

Bạn có thể tạo một \r trong bash dễ dàng với

`printf '%b' '\015'` 

Vì vậy, ví dụ:

$ echo abc`printf %b '\015'`def 
def 
$ 

Hoặc:

$ c=`printf %b '\015'` 
$ set | grep ^c= 
c=$'\r' 
$ 

(Lưu ý: Tôi biết có cách dễ dàng hơn bằng cách gọi printf. ier cách khác nhau trong bash và vỏ posix.Một giải pháp bash chỉ là khá tốt đẹp: $'\r'. Ash-chỉ còn đẹp hơn: c='\r. Tôi không chắc chắn nếu ash thực hiện điều này vì nó là tro hoặc vì nó là posix.)

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