2012-04-09 1076 views
44

Làm thế nào tôi có thể xóa một thư mục trống tại địa phương và cũng có điều đó xảy ra cho các cộng tác viên khác chia sẻ điều khiển từ xa thông qua kéo-đẩy? Tôi biết rằng các thư mục không được 'theo dõi' theo nghĩa đó bởi git nhưng câu hỏi vẫn còn.git - cách xóa thư mục trống và đẩy thay đổi đó?

ví dụ: Tôi đã chuyển một tệp vào một thư mục khác và cam kết thay đổi (di chuyển).

Nhưng tôi không thể git rm name thư mục mà tôi nhận được "không khớp" git rmdir name không tồn tại.

Tôi có thể làm một số git clean -f folder nhưng làm cách nào để bị đẩy lên?

Tôi có thể trực tiếp rm tệp nhưng làm cách nào để xóa thư mục đó được thực hiện một cách chính xác và được đẩy vào kho lưu trữ và sau đó chuyển sang thư mục khác để chúng bị xóa?

+1

câu hỏi còn lại là gì? – manojlds

Trả lời

75

Câu trả lời ngắn: Bạn không thể đẩy các thay đổi vào thư mục (đã thêm, xóa, v.v.) vì Git không theo dõi thư mục trên của riêng chúng.

Theo FAQ:

Hiện nay thiết kế của các chỉ số git (dàn khu vực) chỉ cho phép các tập tin được liệt kê, và không ai đủ thẩm quyền để thực hiện thay đổi để cho phép các thư mục trống đã quan tâm đủ về vấn đề này tình huống để khắc phục nó.

Thư mục được thêm tự động khi thêm tệp bên trong. Nghĩa là, các thư mục không bao giờ phải được thêm vào kho lưu trữ, và không được theo dõi riêng của chúng.

Vì vậy, theo Git, thư mục trống của bạn không tồn tại nữa.

Tôi nhận thấy rằng thói quen sử dụng git clean -fd sẽ loại bỏ sự cần thiết phải đẩy việc xóa thư mục. Tuy nhiên, git clean có thể xóa các mục bạn không muốn xóa (bao gồm bất kỳ tệp mới nào bạn chưa cam kết) vì vậy tôi có xu hướng sử dụng git clean -fdn đầu tiên để xem sẽ bị xóa nếu tôi sử dụng lệnh này.

Có vẻ như bạn có thể bị buộc phải nói chuyện với các nhà phát triển đồng nghiệp của mình để dọn dẹp thư mục đó.

+0

Mercurial có cách tiếp cận saner ở đây - thư mục sẽ bị xóa nếu trống: http://stackoverflow.com/a/3917322/913223 và http://superuser.com/questions/81204/how-to-add-an-empty -folder-in-a-mercurial-project –

+0

Câu trả lời này chưa hoàn thành. 'Git svn fetch' không duy trì các thư mục rỗng.Ngay cả 'git svn rebase' tạo lại các thư mục trống nếu chỉ cần xóa một thư mục. – Andry

-6

Cách hơi lộn xộn xung quanh việc này là tạo tệp giả trong thư mục, cam kết, sau đó xóa tệp đó. Việc xóa nó cũng sẽ xóa thư mục. Vì vậy, tạo ra tên/fake.txt

git add name/fake.txt 
git commit -m "message" 
git rm name/fake.txt 
git commit -m "message2" 
+0

không hoạt động đối với tôi: ( – lImbus

+1

Cách tiếp cận này thực tế hoạt động, nhưng trong bước thứ hai bạn muốn xóa thư mục chứa tệp 'rm -rf name' và sau đó cam kết thay đổi, thư mục sẽ biến mất – igniteflow

3
git add --all 
git clean -f -d 
git commit -m "trying to remove folders" 
git push 
0

Bạn không thể đẩy thư mục rỗng. Nhưng nếu bạn muốn dọn sạch các thư mục trống trong repo nhân bản/cục bộ của bạn, cam kết thay đổi mới nhất của bạn .. Sau đó, chỉ cần xóa tất cả các tệp ngoài thư mục .git trong bản sao cục bộ của bạn. Sau đó, thiết lập lại tất cả các thay đổi một lần nữa, trong đó đặt lại tất cả các tập tin nhưng lá ra các thư mục trống nó không theo dõi.