Cách bạn Git bỏ qua việc xem / theo dõi một tập tin / thư mục cụ thể. bạn chỉ cần chạy này:
git update-index --assume-unchanged <file>
Bây giờ làm thế nào để bạn hoàn tác nó để họ được xem lại? (Hãy gọi nó là không giả định.)
Cách bạn Git bỏ qua việc xem / theo dõi một tập tin / thư mục cụ thể. bạn chỉ cần chạy này:
git update-index --assume-unchanged <file>
Bây giờ làm thế nào để bạn hoàn tác nó để họ được xem lại? (Hãy gọi nó là không giả định.)
Câu trả lời:
Để có được hoàn tác / hiển thị các tập tin / thư mục được đặt thành không thay đổi, hãy chạy cái này :
git update-index --no-assume-unchanged <file>
Để có danh sách các tập tin / thư mục đang assume-unchanged
chạy này :
git ls-files -v|grep '^h'
git ls-files -v|grep '^h'|cut -c3-
, nó sẽ chỉ cung cấp cho bạn tên tệp mà không có tiền tố "h".
assume-unchanged
, chỉ cần sử dụng git update-index --really-refresh
. Với lệnh đó, trước tiên bạn không cần tìm tệp git ls-files
.
Nếu đây là một lệnh mà bạn sử dụng thường xuyên - bạn cũng có thể muốn xem xét có bí danh cho nó. Thêm vào toàn cầu của bạn .gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
Cách đặt bí danh (nếu bạn chưa biết):
git config --configLocation alias.aliasName 'command --options'
Thí dụ:
git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
Sau khi lưu cái này vào .gitconfig
, bạn có thể chạy lệnh sạch hơn.
git hide myfile.ext
hoặc là
git unhide myfile.ext
Tài liệu git này rất hữu ích.
Theo các bình luận, đây cũng là một bí danh hữu ích để tìm hiểu những tập tin nào hiện đang bị ẩn:
[alias]
hidden = ! git ls-files -v | grep '^h' | cut -c3-
hidden = ! git ls-files -v | grep '^h' | cut -c3-
Hàm git update-index có một số tùy chọn bạn có thể tìm thấy khi gõ như dưới đây:
git update-index --help
Ở đây bạn sẽ tìm thấy các tùy chọn khác nhau - cách xử lý với chỉ mục cập nhật chức năng.
[nếu bạn không biết tên tệp]
git update-index --really-refresh
[nếu bạn biết tên tệp]
git update-index --no-assume-unchanged <file>
sẽ hoàn nguyên tất cả các tệp đã được thêm vào trong danh sách bỏ qua.
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>
đã cứu mạng tôi .. ok, tôi chỉ có thể đồng bộ lại thư mục, nhưng tôi đã muốn một giải pháp "thực sự" cho vấn đề này.
Để tổng hợp các câu trả lời gốc tuyệt vời từ @adardesign, @adswebwork và @AnkitVishwakarma và nhận xét từ @Bdoserror, @Retsam, @seanf và @torek, với các liên kết tài liệu bổ sung và bí danh ngắn gọn ...
Các lệnh cơ bản
Để thiết lập lại một tập tin đó là giả-không thay đổi trở lại bình thường:
git update-index --no-assume-unchanged <file>
Để liệt kê tất cả các tệp được giả định không thay đổi:
git ls-files -v | grep '^[a-z]' | cut -c3-
Để đặt lại tất cả các tệp không giả định trở lại bình thường:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
Lưu ý: Lệnh này đã được liệt kê ở nơi khác dường như không đặt lại tất cả các tệp không thay đổi giả định nữa (tôi tin rằng nó đã được sử dụng và trước đây liệt kê nó như một giải pháp):
git update-index --really-refresh
Phím tắt
Để làm cho các tác vụ phổ biến này dễ thực hiện trong git, hãy thêm / cập nhật phần bí danh sau .gitconfig
cho người dùng của bạn (ví dụ: ~/.gitconfig
trên hệ thống * nix hoặc macOS):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
git hidden
, bạn có thể đạt được hiệu ứng tương tự mà không cần các bí danh hoặc tập lệnh shell, sử dụng !
như thế này:hidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refresh
không (hoặc không còn làm như vậy, có lẽ nó đã từng làm) xóa các cờ giả định không thay đổi trên các tệp chỉ mục.
Nếu bạn muốn hoàn tác tất cả các tệp được áp dụng giả định không thay đổi với bất kỳ trạng thái nào, không chỉ được lưu trong bộ nhớ cache (git đánh dấu chúng theo ký tự trong chữ thường), bạn có thể sử dụng lệnh sau:
git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v
sẽ in tất cả các tệp với trạng thái của chúnggrep '^[a-z]'
sẽ lọc các tệp và chỉ chọn giả sử không thay đổicut -c 3-
sẽ xóa trạng thái và chỉ để lại các đường dẫn, cắt từ ký tự 3 đến cuốitr '\012' '\000'
sẽ thay thế ký tự cuối dòng (\ 012) thành ký tự 0 (\ 000)xargs -0 git update-index --no-assume-unchanged
sẽ vượt qua tất cả các đường dẫn được phân tách bằng ký tự 0 git update-index --no-assume-unchanged
để hoàn tácThêm vào @adardesign
câu trả lời của bạn, nếu bạn muốn đặt lại tất cả các tệp đã được thêm vào assume-unchanged
danh sách no-assume-unchanged
trong một lần, bạn có thể thực hiện như sau:
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
Điều này sẽ loại bỏ đầu ra hai ký tự từ grep tức là "h "
thoát khỏi bất kỳ khoảng trắng nào có thể có trong tên tệp và cuối cùng || true
sẽ ngăn lệnh kết thúc sớm trong trường hợp một số tệp trong vòng lặp có lỗi.
Nếu bạn đang sử dụng Tiện ích mở rộng Git , hãy làm theo các bước dưới đây:
Bạn xong việc rồi.
Không có gì ở đây không được bảo hiểm. Nhưng muốn thêm 2 xu của tôi. Đôi khi, tôi chạy một bản dựng và nó thay đổi rất nhiều tệp và sau đó tôi muốn làm việc với một cái gì đó, vì vậy lệnh này thực sự giúp tôi rất nhiều.
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
Hy vọng người khác tìm thấy nó hữu ích là tốt.
.gitignore
để bỏ qua các tạo phẩm xây dựng của bạn.
.gitignore
nhưng đó là đôi khi, theo kinh nghiệm của tôi là không đủ. Nhưng tôi hiểu bối cảnh mà bạn đang nói điều này.
Không có giải pháp nào phù hợp với tôi trong Windows - dường như sử dụng vốn H
thay vì h
trạng thái tệp và lệnh grep yêu cầu thêm dấu mũ ^
cũng thể hiện bắt đầu dòng cũng như phủ định ký tự tiếp theo.
Giải pháp Windows
git ls-files -v | grep '^^H'
liệt kê tất cả các tập tin chưa được lưu trữgit ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
để hoàn tác các tập tin bỏ qua tất cả các tập tin đã được thực hiện thông qua update-index --skip-worktree
git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
để hoàn tác các tập tin bỏ qua tất cả các tập tin đã được thực hiện thông qua update-index --assume-unchanged
git ls-files -v | grep '^^H'
một lần nữa liệt kê tất cả các tệp chưa được lưu trữ và kiểm tra xem các lệnh trên có hoạt động hay không - điều này bây giờ sẽ không trả về bất cứ điều gì