Bỏ qua các tập tin sửa đổi (nhưng không cam kết) trong git?


182

Tôi có thể bảo git bỏ qua các tệp đã được sửa đổi (đã xóa) nhưng không nên cam kết không?

Tình huống là tôi có một thư mục con trong repo chứa những thứ tôi không quan tâm chút nào, vì vậy tôi đã xóa nó để ngăn nó hiển thị trong tự động hoàn thành và tương tự (trong IDE).

Nhưng bây giờ, nếu tôi thêm thư mục đó vào .gitignore, đơn giản là không có gì thay đổi, tất cả nội dung được hiển thị là bị xóa bởi trạng thái git.

Có cách nào để làm cho git bỏ qua nó không?

(Ngoài ra, khi tôi đang sử dụng git-svn, tôi có thể thực hiện các thay đổi đối với git cục bộ không và đảm bảo chúng không được chuyển sang repo svn?)


thay vì chỉ đánh dấu chúng là không thay đổi trong chỉ mục repo, bạn có thể muốn xóa chúng hoàn toàn khỏi chỉ mục. Vì vậy, trong khi bạn vẫn sẽ có tệp trong thư mục làm việc của mình, chỉ mục repo hoàn toàn có thể bị xóa và git thậm chí sẽ không thấy nó tồn tại. Xin vui lòng xem liên kết trong câu trả lời của tôi dưới đây.
MaurerPower

Câu trả lời:


274

kiểm tra trang man git-update-index và bit --assume-không thay đổi và có liên quan.

Khi tôi gặp vấn đề của bạn, tôi làm điều này

git update-index --assume-unchanged dir-im-removing/

hoặc một tập tin cụ thể

git update-index --assume-unchanged config/database.yml

3
Bạn có thể liệt kê tất cả các tập tin bỏ qua của bạn bằng cách nào đó?
Zitrax

21
Bạn có thể lấy lại các tập tin vớigit update-index --no-assume-unchanged config/database.yml
Denis Kniazhev

1
Xem câu trả lời của Dave L bên dưới để biết giải pháp mới hơn mà không có một số thiếu sót --assume-unchanged.
Ben Challenor

2
Có thể thêm nó vào tập tin cấu hình kho lưu trữ, thay vì chạy lệnh này bằng tay mỗi lần?
Tim Boland

1
Nó sẽ xuất hiện như là sửa đổi cho cam kết tiếp theo? Tôi không muốn nó được giả định mãi mãi.
Pranav Nandan

41

Một tùy chọn mới hơn và tốt hơn git update-index --skip-worktreesẽ không bị mất khi thiết lập lại cứng hoặc thay đổi mới từ một lần kéo.

Xem trang người đàn ông tại http://schacon.github.com/git/git-update-index.html

Và so sánh tại http://fallengamer.livejournal.com/93321.html


9
Một nhược điểm cần lưu ý là một khi các sửa đổi của tệp bị ẩn đi skip-worktree, việc tìm các tệp này hơi khó khăn. Cách duy nhất tôi biết là git ls-files -v |grep -v '^H'. Ngoài ra, nhiều công cụ GUI không biết về tính năng này và có thể tạo ra các lỗi vui nhộn, ví dụ như checkoutlỗi do các tệp sửa đổi "ẩn".
sleske

Tôi chưa bao giờ có thể hiểu BẤT K of tệp git doc nào. Vì vậy, đây không phải là nhiều giúp đỡ. (Mỗi tệp tài liệu giả định rằng bạn hiểu sự tinh tế của mọi tệp tài liệu khác!)
Scott Biggie

7

Sử dụng mã này

git update-index --assume-unchanged file-name

1
Thật sự thú vị. Tôi phải sử dụng một mật khẩu trong dự án maven của mình nhưng tôi không muốn xuất bản nó trên kho git, vì vậy tôi đặt giữ chỗ cho nó mà không có giá trị trong local, thuộc tính, tôi cam kết, sau đó tôi chèn mật khẩu, nhưng đánh dấu tập tin không thay đổi với lệnh được đề xuất của bạn. Vì vậy, mật khẩu không được công bố.
Stefano Scarpanti

6

Các tệp được theo dõi không thể bị bỏ qua, vì vậy bạn sẽ phải xóa chúng khỏi chỉ mục của mình trước. Thêm một .gitignorecái mà bỏ qua các thư mục bạn không muốn, sau đó xóa chúng và xóa bất kỳ stragglers nào với git rm --cached.


1
Hừm, tôi thử cái này, nhưng sau đó tôi có tất cả các tập tin được liệt kê là đã xóa. Tôi có nên cam kết điều đó và --cached sẽ khiến nó không được đẩy lên điều khiển từ xa không? Hoặc tôi đã nhận được sth. Sai lầm? Điều quan trọng nhất đối với tôi là không làm hỏng repo từ xa (svn).

1
Bạn không thể cam kết bất cứ điều gì không bắt đầu trong chỉ mục của bạn. git rm - đã thu thập mọi thứ mà bạn không muốn cam kết, sau đó thêm tệp .gitignore cục bộ có "*" trong đó. Bây giờ, cho dù bạn có thêm bao nhiêu, bạn sẽ không bao giờ thấy các tệp đó trong chỉ mục của mình nữa.
John Women'sella 17/03/2016

À, tôi nghĩ là tôi đã hiểu - đã xử lý rồi .. Nó chỉ xóa những thứ khỏi chỉ mục và để cây làm việc một mình .. Tôi không chắc liệu tôi có thiếu thứ gì không, nhưng AFAIS tôi đang tìm kiếm điều ngược lại , loại bỏ nó khỏi cây làm việc mà không chạm vào chỉ mục .. Hoặc tôi có thể sử dụng nó cho điều đó bằng cách nào đó?

6

Những gì tôi thường làm là

git stash

git bất cứ điều gì khác

git stash áp dụng

git rõ ràng


10
fwiw bạn cũng có thể 'git stash pop' để thực hiện hai lần cuối cùng một lúc (mặc dù 'git stash Clear' sẽ xóa TẤT CẢ các mục stash, nếu bạn muốn điều đó).
Groxx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.