2013-07-25 40 views
10

Tôi có một vấn đề cụ thể mà tôi không tìm thấy giải pháp ở đây hoặc bất cứ nơi nào khác. Tôi có một kho SVN và tôi đang sử dụng git-svn để truy cập nó và làm việc trên nó.làm cách nào để xóa thư mục trống trong git-svn?

Một số thời gian trước đây, đã có một số thư mục trống trong kho SVN (trống, chỉ các thư mục con). Git không theo dõi chúng. Sau đó, họ đã xóa chúng khỏi kho lưu trữ SVN. Nhưng tôi vẫn có họ thậm chí sau khi chạy

git svn rebase 

Và khi tôi xóa chúng bằng tay, họ đang tái tạo trong vòng từ

git svn rebase 

Làm thế nào tôi có thể thoát khỏi họ?

Tôi đã kiểm tra bằng SVN thuần túy và chúng không nằm trong kho lưu trữ.

+0

Hmmm, thật lạ lùng. Git không biết hoặc theo dõi thư mục nào cả. Bạn đã kiểm tra xem có bất kỳ tập tin vô hình cũ nào trong các thư mục mà sếp của bạn có thể đã bỏ sót khi xóa chúng không? Hãy thử làm một 'ls -la' trong thư mục để kiểm tra các tập tin ẩn. – Leif

+0

Midnight Commander không ẩn nội dung;) Các thư mục trống. Đây có phải là một lỗi không? :/ – Paladin

+0

Tôi đã có nhiều (nhiều) thất vọng với Git, nhưng tôi vẫn chưa vấp ngã khi một lỗi "hợp pháp". Hầu hết những thất vọng của tôi đã trở thành do sự thiếu hiểu biết của tôi. Điều gì sẽ xảy ra nếu bạn thực hiện 'git status' từ dòng lệnh Git; các thư mục có hiển thị là "không được bảo vệ" bởi bất kỳ cơ hội nào không? Nếu bạn thực hiện 'git ls-files directory_name --error-unmatch' trên các thư mục này; nó trả về 'true' hoặc' false'? Hãy thử tái nhân bản kho lưu trữ ('git clone') bằng Git để xem các thư mục có được gắn với một bản sao mới hay không; có lẽ họ chỉ đang treo xung quanh từ một phiên bản cũ hơn. Tôi chỉ đoán một cách hoang dại ở đây. – Leif

Trả lời

1

Nó là một chút khó khăn, nhưng tôi đã tìm thấy rằng những điều sau đây giải quyết vấn đề của tôi:

rm .git/svn/refs/remotes/trunk/unhandled.log 
git clean -df 

Bất kỳ tiếp theo

git svn rebase 

sẽ không tái tạo bất cứ điều gì.

Vì tôi không biết cách tạo lại tệp này mà không cần sao chép lại bản ghi, tôi khuyên bạn nên tạo bản sao lưu của tệp trước. Đây là một tập tin văn bản, vì vậy tôi cho rằng bạn cũng có thể chỉnh sửa nội dung của nó để loại bỏ các mục mà kết thúc việc tạo

+1

Không xóa nội dung trong' .git'. –

11

Tôi nghĩ bạn sẽ tìm thấy câu trả lời trong this blog post.

[...]

Remove directories from the SVN tree if there are no files left behind. SVN can version empty directories, and they are not removed by default if there are no files left in them. git cannot version empty directories. Enabling this flag will make the commit to SVN act like git. config key: svn.rmdir

To fix the root of the problem set the git config globally:

git config --global svn.rmdir true

[...]

+2

Tôi tìm thấy điều này khi googling quá, nhưng nó không trả lời cho câu hỏi của tôi. Điều này là cho các tình huống khi bạn xóa thư mục và cam kết nó thông qua git. Vấn đề của tôi là một ai đó đã xóa thư mục thông qua svn nhưng tôi vẫn có nó trong kho git (nhưng chúng trống) và khi tôi xóa chúng, chúng sẽ tự động được tái tạo vào lần rebase tiếp theo. – Paladin

+0

Tôi đoán nó không thực sự là "điều đúng để làm", nhưng có lẽ bạn có thể (sử dụng Git) thêm một tập tin văn bản giả vào các thư mục, 'add' và' commit' chúng để chúng được theo dõi và sau đó xóa ('git rm') các tập tin và cam kết xóa. Sau đó, có thể bạn sẽ loại bỏ các thư mục, nhưng nó sẽ làm hỏng lịch sử của bạn một chút. – Leif

+0

Tôi có thể thấy ông chủ sẽ gửi cho tôi với phương pháp này: D – Paladin

1

biết chính xác git svn rằng nó không nên cố gắng để tái tạo các thư mục rỗng:

git config svn-remote.svn automkdirs false 

Đây là phần có liên quan của trang người đàn ông:

svn-remote.<name>.automkdirs

Normally, the "git svn clone" and "git svn rebase" commands attempt to recreate empty directories that are in the Subversion repository. If this option is set to "false", then empty directories will only be created if the "git svn mkdirs" command is run explicitly. If unset, git svn assumes this option to be "true".

Lưu ý rằng nó rất dễ dàng để gây nhầm lẫn chủ đề này với chủ đề phạm/không cam kết các thư mục trống để svn (đó là svn.rmdir là để làm gì).