Làm cách nào để bỏ qua các tệp trong kho lưu trữ?


93

Tôi có một tệp (config.php), đã được cam kết vào kho lưu trữ Git, nhưng tôi muốn bỏ qua cục bộ, tức là tôi muốn tệp đó vẫn ở trong kho lưu trữ, nhưng buộc Git bỏ qua bất kỳ thay đổi nào đối với nó.

Tôi đặt tệp vào .gitignore, nhưng nó vẫn được đánh dấu là đã thay đổi và Git vẫn đang cố gắng thực hiện các thay đổi đối với nó, mỗi khi tôi cam kết điều gì đó. Bất kỳ ý tưởng, những gì tôi đang thiếu hoặc làm sai?


vui lòng thêm tệp .gitignore của bạn - theo cách đó chúng tôi có thể thấy bất kỳ vấn đề nào liên quan đến nó.
Lars

Câu trả lời:


189

Nếu tệp vẫn được hiển thị ở trạng thái, ngay cả khi nó ở trong .gitignore, hãy đảm bảo rằng nó chưa được theo dõi.

git rm --cached config.php

Nếu bạn chỉ muốn bỏ qua nó cục bộ, bạn cũng có thể bỏ qua nó bằng trạng thái git:

git update-index --assume-unchanged config.php

1
Được rồi cảm ơn ! Nếu tôi hợp nhất chi nhánh của mình với một chi nhánh khác, tệp này có thể gây ra một số vấn đề không?
prcaen

1
@ Nimbus147: đó không phải là vấn đề và bất kỳ thay đổi nào trên tệp đó sẽ vẫn bị bỏ qua (tức là không được thêm / cam kết).
VonC

nếu sử dụng SmartGit, bạn nên sử dụng loại bỏ để thực hiện việc này.
Omid-RH

1
Có cách nào để buộc update-index --assume-unchangedchi nhánh từ xa không? Tôi muốn giữ tệp trong repo, nhưng không thể thay đổi bởi người khác mà hơn nữa là không có sẵn cho giai đoạn.
p014k

1
@ p014k Không phải tôi biết. Đối với loại tệp đó, tôi giữ phiên bản của nó dưới một tên khác, sau đó sử dụng trình điều khiển bộ lọc nội dung để tự động tạo tệp phù hợp (riêng tư) khi cần. Ví dụ: bộ lọc đó sẽ không hoạt động trên sân khấu. Xem stackoverflow.com/a/54454356/6309 và liên kết được liên kết của nó.
VonC

6

Bỏ qua tệp đã đăng ký:

git update-index --assume-unchanged file

Để trở lại

git update-index --no-assume-unchanged file

Hoàn nguyên tất cả

git update-index --really-refresh 

Hữu ích. Tuy nhiên, hoàn nguyên một tệp đã hoạt động nhưng hoàn nguyên tất cả thì không.
Adem Tepe

4

Nếu tệp đã có trong kho lưu trữ và do đó là khu vực Chỉ mục / Tổ chức, thì bản cập nhật lên .gitignore sẽ không thay đổi tình huống đó - Nó sẽ tiếp tục được cam kết.

Để xóa tệp khỏi mục lục / sử dụng khu vực Staging git rm <file>.


Điều gì sẽ xảy ra nếu tệp nằm trong kho lưu trữ nhưng chưa được phân giai đoạn? Tôi đang cố gắng bỏ qua các tệp * .log nhưng tôi vẫn thấy chúng trong "Thay đổi". Tôi muốn bỏ qua tất cả, phải làm sao?
Sandra K,

@SandraK nếu có phiên bản cũ hơn của tệp đó (đường dẫn tệp / tên) đã có trong repo ở lần cam kết cuối cùng, thì nó được coi là đã theo dõi - 'chỉ mục' sẽ có tệp đó trong hồ sơ của nó và do đó statussẽ tiếp tục cho bạn biết về những thay đổi đó. Nếu bạn muốn bỏ qua các tệp * .log, cho cả tệp đã được kiểm tra trước đó và hiện chưa được theo dõi, thì bạn cần phải cả hai git rm *.logvà cập nhật tệp .gitignore của mình. Đừng kiểm tra đầu tiên nếu một số file log là thực sự quan trọng ... Nó rất dễ dàng để quên rằng một người đặc biệt ;-)
Philip Oakley

-3

Khi một tệp được liệt kê trong .gitignore, bạn không thể thay đổi nó.

Vì vậy, bạn có thể xóa tệp khỏi danh sách trong một lần cam kết, thay đổi lần cam kết tiếp theo, sau đó thêm lại tệp vào danh sách bỏ qua trong lần cam kết thứ ba sau đó.

Những gì tôi thường làm là chia tệp thành hai, một tệp được phép và tôi có thể thay đổi, bao gồm tệp thứ hai nếu nó tồn tại, sau đó các nhà phát triển có thể thực hiện các thay đổi cấu hình trong tệp bị bỏ qua theo tùy chọn.


1
" Khi một tệp được liệt kê trong .gitignore, bạn không thể thay đổi nó " - bạn có thể làm rõ, ý bạn là gì? Tôi có rất nhiều tệp trong nhiều tệp của mình .gitignorevà tôi liên tục thay đổi các tệp này! Đây là lần đầu tiên, tôi nghe ai đó nói rằng một khi tôi thêm tệp vào .gitignore, tôi không thể thay đổi nó.
trejder

1
Anh ấy thực sự đã sai. Bạn có thể thay đổi chúng. Git chỉ không tải chúng lên hoặc thậm chí cung cấp cho bạn tùy chọn tải chúng lên.
David
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.