2012-08-09 26 views
8

Tôi đang sử dụng git svn và hôm nay tôi gặp phải một số sự cố.Làm cách nào để tránh các vấn đề CQF git-svn và svn như vấn đề này?

Tôi đã thực hiện git svn clone và đã làm việc trong dự án của mình một thời gian. Sau một vài ngày, tôi đã đẩy công việc của tôi vào điều khiển từ xa svn (git svn dcommit). Sau đó, tôi đã cố gắng để kiểm tra các dự án với TortoiseSVN và xem nếu tất cả mọi thứ là đúng. Thật không may, tất cả mọi thứ đã được chuyển đổi thành kết thúc dòng Unix và VC6 không thể mở dự án.

Vì vậy, bản sao làm việc git của tôi là CRLF, nhưng bản sao làm việc svn của tôi là LF. Tôi giả sử git chuyển đổi nó trong thời gian git commit hoặc git svn dcommit.

Tôi có quyền giả định rằng tôi có thể tránh tất cả sự cố này nếu tôi đặt core.autocrlf = false cho bản sao làm việc git của mình không? Điều này sẽ buộc git để lại dòng mới một mình? Có điều gì khác cần phải được thực hiện để làm cho git svn dễ sử dụng mà không gây ra vấn đề cho đồng nghiệp của tôi không?

(Nó cũng có thể thú vị để đề cập đến mà tôi đã sử dụng git svn trên cùng một máy trước đó, mà không cần chạm các thiết lập, và đây là lần thứ đầu tiên như thế này xảy ra.)

Trả lời

0

Subversion có một khả năng Cài đặt chuyển đổi EOL cho các tệp riêng lẻ. Và trên thực tế Git cũng có dạng file .gitattributes ('text' và 'eol'). Đối với trường hợp chung core.autocrlf là không đủ.

Nếu bạn đặt thành false, tất cả các tệp có svn: eol-style = native sẽ có dòng LF kết thúc bằng bản sao làm việc git-svn, điều này không được mong đợi cho các cửa sổ.

Nếu bạn đặt thành đúng, tất cả các kết thúc dòng sẽ được chuyển thành LF và sẽ được gửi đến SVN dưới dạng LF (luôn).

Thực tế svn:eol-style=unset phải tương ứng với thuộc tính git '-text' (có nghĩa là không có chuyển đổi), svn:eol-style=LF --- thành 'eol = lf' và thuộc tính svn:eol-style=CRLF --- to 'eol = crlf'; svn:eol-style=native phụ thuộc vào hệ thống, do đó có thể được điều khiển bởi cài đặt eol không phiên bản, do đó thuộc tính git tương ứng là '! Eol' (điều đó có nghĩa là có được cài đặt EOL từ core.eol của .git/config).

Thay vì git-svn, bạn có thể sử dụng bất kỳ giải pháp nào có thể chuyển đổi kiểu svn: eol thành các giá trị tương ứng .gitattirbutes cho từng tệp và ngược lại một cách tự động. Một giải pháp là các server-side: bạn cài đặt SubGit vào kho SVN của bạn và chỉ cần sử dụng giao diện Git tinh khiết mà SubGit sẽ tạo ra:

$ subgit install path/to/svn/repository 
# Git interface with correct .gtattributes repository will appear at path/to/svn/repository/.git 
# you should setup an access to it 

Sau đó, tại các khách hàng mà bạn sao chép nó và thiết lập core.eol để 'CRLF' cho Windows và 'lf' cho hệ điều hành khác (giá trị mặc định là 'lf').

$ git clone <URL> working_tree 
$ cd working_tree 
$ git config core.eol crlf #for Windows only 

Và sau đó Git sẽ hoạt động giống như SVN. Ngoài ra, ở phía khách hàng, bạn có thể sử dụng SmartGit: bạn có thể sao chép kho SVN với nó (không mở kho git-svn hiện có) --- và sau đó nó sẽ chuyển đổi kiểu svn: eol thành .gitattributes. Không yêu cầu cài đặt core.eol bổ sung cho trường hợp này, SmartGit sẽ quan tâm đến nó.

+4

Tôi hơi bối rối bởi câu trả lời này .. đây là tất cả thông tin rất hữu ích, nhưng tôi nghĩ có thể bạn đã hiểu nhầm câu hỏi.Tôi không thể chạm vào bất cứ điều gì trên SVN, và tôi không thể làm cho mọi người sử dụng phong cách svn: eol, ý tưởng là không ai thậm chí biết tôi đang sử dụng git. Vì vậy, bất kỳ thiết lập nào tôi cần thay đổi đều phải ở phía git. Điều đó có giúp làm rõ vấn đề không? Nhân tiện, kho lưu trữ mà tôi nhân bản với git svn đã trống vào lúc đó, tất cả nội dung đến từ git sau dcommit đầu tiên. –

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