2012-06-20 9 views
48

Tôi có một trang web có thư mục /sites/default/files/ nơi nội dung người dùng thường được lưu giữ. Hiểu rằng tôi không cần theo dõi công cụ này, tôi đã thêm/sites/default/files/vào tệp .gitignore của tôi.Sự cố khi bỏ qua các tệp bị bỏ qua trước đó trong Git repo

Sau đó, tôi phát hiện ra rằng tôi cũng muốn giữ một số video tải lên thường xuyên trong thư mục đó. Bây giờ nó có ý nghĩa hơn để theo dõi tất cả mọi thứ trong/sites/default/files/và loại trừ các thư mục con không mong muốn, thay vì làm theo cách khác.

Vấn đề là Git sẽ không ngừng bỏ qua thư mục đó. Tôi đã loại bỏ các dòng từ .gitignore chỉ định thư mục này và nó sẽ không theo dõi nó. Tôi có tùy chọn để sử dụng git add /sites/default/files/ -f để buộc git theo dõi thư mục, nhưng tôi đã thực hiện điều đó trước và có vẻ lộn xộn.

Nếu .gitignore không còn chỉ định thư mục đó bị bỏ qua, tại sao tôi phải buộc Git bắt đầu theo dõi các tệp đó?

+1

Bạn có cơ hội sử dụng các mô-đun con không?Có lẽ các trang web/hoặc các trang web/mặc định/hoặc thậm chí các trang web/mặc định/tập tin /? Ngoài ra, hãy kiểm tra từng thư mục trong số ba thư mục đó một cách cụ thể cho tệp .gitignore. Bạn cũng có thể thử 'git add -f sites/default/files/*' để thêm các tệp cụ thể, thay vì thêm thư mục. – twalberg

+0

không, không có submodules (không nhận thức được chúng, nhưng sẽ nhớ chúng để sử dụng trong tương lai - cảm ơn). Kiểm tra lại tất cả các thư mục để biết thêm các tệp .gitignore - không có gì. Và cố gắng để 'git add -f sites/default/files/*' không làm điều đó: khi tôi 'touch sites/default/files/test.mine' git vẫn không thấy nó. – doub1ejack

+1

Hmmm ... vâng, bạn có chắc chắn không có mục nào khác trong '.gitignore' khớp với nhau - một số ký tự đại diện của một số loại hay gì đó? Hoặc cái gì đó sẽ khiến các tệp riêng lẻ bị bỏ qua - như một '* .pyc' và thư mục đó chỉ chứa các tệp' .pyc'? Hãy nhớ rằng đặt tên 'file' trong' .gitignore' cũng khớp với bất kỳ 'thư mục con/tập tin' hoặc' tiểu/thư mục con/tệp' ... – twalberg

Trả lời

4

Đối với hậu thế: câu trả lời cho vấn đề của tôi là "chỉ cần nhìn kỹ hơn".

@twalberg đã chỉ ra, chính xác, có thể có một quy tắc mà tôi đã xem trong tệp .gitignore. Cách xếp tầng trong đó các quy tắc .gitignore được áp dụng giúp dễ dàng loại trừ các tệp rộng hơn dự định.

Theo như tôi có thể nói, các giả định tôi đã thực hiện về cách thức hoạt động của git là chính xác. Tương tự như vậy, trường hợp của tôi dường như không hỗ trợ (hoặc bác bỏ) ý kiến ​​của @ J-16 SDiZ về vai trò nào mà bit assume-unchanged có thể phát.

48

Bạn biết cách thực hiện. Có, git add -f là cách.

Nếu bạn hỏi lý do tại sao ... điều này là do git đặt assume-unchanged bit trong nội bộ. Bit này làm cho git nghĩ rằng tập tin không được sửa đổi, vì vậy git add sẽ không thêm nó.

Nếu bạn muốn gây rối với các chi tiết triển khai, bạn có thể sử dụng lệnh git update-index --no-assume-unchanged <file>.

+0

Vì vậy, có lẽ, khi tôi buộc git thêm các tệp này và đẩy chúng vào kho lưu trữ phát triển của chúng tôi, tất cả các nhà phát triển khác của chúng tôi cũng sẽ bắt đầu theo dõi chúng đúng không? Tôi đang gặp một chút rắc rối khi thấy nó hoạt động như thế nào khi các tệp .gitignore của họ bỏ qua các tệp đang được lấy từ repo của dev (cho đến khi chúng cập nhật các tệp .gitignore cục bộ của chúng), nhưng tôi chỉ tin tưởng vào git này. – doub1ejack

+0

'.gitignore' của bạn phải nằm trong điều khiển phiên bản. Nhà phát triển khác sẽ nhận được nó khi họ cập nhật. –

+0

Đúng vậy, họ nên làm như vậy. Tuy nhiên, những thay đổi đối với tệp .gitignore của tôi không giải quyết được vấn đề vì vậy tôi tự hỏi liệu mỗi nhà phát triển khác sẽ phải sử dụng cùng một bản sửa lỗi '-f' trên repo cục bộ của họ hay không. – doub1ejack

9

Tôi không nghĩ rằng J-16 là chính xác. Từ http://www.kernel.org/pub/software/scm/git/docs/git-add.html:

Lệnh git add sẽ không thêm tệp bị bỏ qua theo mặc định. Nếu bất kỳ tệp bị bỏ qua nào được chỉ định rõ ràng trên dòng lệnh, git add sẽ thất bại với danh sách các tệp bị bỏ qua. Các tập tin bị bỏ qua được truy cập bằng thư mục đệ quy hoặc tên tập tin được thực hiện bởi Git (trích dẫn các bóng của bạn trước khi trình bao) sẽ được bỏ qua âm thầm. Lệnh git add có thể được sử dụng để thêm các tập tin bị bỏ qua với tùy chọn -f (force).

git add -f dường như chỉ là để thêm một tập tin mà không tồn tại trong một tập tin bỏ qua ở đâu đó.

Có lẽ có một tệp .gitignore khác trong/sites hoặc/sites/default cũng đang yêu cầu Git bỏ qua thư mục này hoặc có thể nó được đặt trong .git/info/exclude?

+0

Không, tôi chỉ có một tệp .gitignore và tệp loại trừ trống. – doub1ejack

+0

Tôi có thiếu gì đó không? Tôi đã cố gắng để tái tạo tình hình của bạn (http://pastebin.com/wZB6F8Qj) và sau khi chỉnh sửa .gitignore, tệp sẽ hiển thị lại như không được theo dõi, và 'git add file' hoạt động. – hdgarrood

+0

Tôi bắt đầu tự hỏi ... sau khi sử dụng -f để buộc git thêm một thư mục nếu tôi, một lần nữa, thực hiện lệnh git add' git cho tôi biết rằng thư mục bị bỏ qua bởi một trong các tệp .gitignore của tôi. Tôi đã tìm kiếm kho lưu trữ cục bộ của mình cho .gitignore và chỉ tìm thấy một tệp và mở tệp loại trừ và xác minh tệp không bị can thiệp. Tui bỏ lỡ điều gì vậy? – doub1ejack

1

Chúng tôi gặp sự cố tương tự trong thư mục trang web Drupal của chúng tôi. Vấn đề ở đây là Phân phối Drupal có tệp .gitignore trong thư mục drupal cấp cao hơn khớp với bất kỳ thứ gì trong drupal/sites/files/*