2013-06-19 32 views
300

Cách bạn bỏ qua việc xem/theo dõi một thư mục/tệp cụ thể. bạn chỉ cần chạy này:undo git update-index --assume-không đổi <file>

git update-index --assume-unchanged <file>

Bây giờ làm thế nào để bạn hủy bỏ nó vì vậy họ đang theo dõi một lần nữa? (cho phép gọi nó là giả định)

+2

Chỉ cần một lưu ý để nói rằng có vẻ như bỏ qua worktree là tất cả khả năng những gì bạn sẽ được tốt hơn để được sử dụng hơn so với giả định không thay đổi, trừ khi hiệu suất của git là vấn đề của bạn. http://stackoverflow.com/questions/13630849/git-difference-between-assume-unchanged-and-skip-worktree – GreenAsJade

Trả lời

400

Để undo/hiển thị thư mục của/tập tin được thiết lập để giả-không thay đổi hoạt động này:

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

Để có được một danh sách các thư mục của/tập tin được assume-unchanged chạy này:

git ls-files -v|grep '^h'

+4

Cải thiện nhỏ cho câu lệnh grep của bạn, nó có thể sử dụng '^ [az]' để bắt tất cả các tệp bị bỏ qua, vì thẻ chữ cái đầu tiên có thể là các chữ cái khác với 'H'/'h'. Từ http://git-scm.com/docs/git-ls-files: Tùy chọn này xác định tình trạng tập tin với các thẻ sau đây (theo sau là một khoảng trắng) vào lúc bắt đầu của mỗi dòng: \t H :: \t cache \t S :: \t skip-worktree \t M :: \t Đã hủy \t R :: \t loại bỏ/xóa \t C :: \t điều chỉnh/thay đổi \t K :: \t bị giết \t?:: \t khác – Bdoserror

+3

Một thủ thuật hữu ích khác là 'git ls-files -v | grep '^ h' | cắt -c3-', sẽ chỉ cung cấp cho bạn tên tập tin, không có tiền tố "h". – Retsam

+4

Nếu bạn không biết các tập tin nữa mà bạn 'giả định không thay đổi', chỉ cần sử dụng' git update-index --really-refresh'. Với lệnh đó, bạn không cần phải tìm kiếm các tệp với 'git ls-files' trước. – theDmi

26

Tôi giả sử (heh) bạn có nghĩa là --assume-unchanged, vì tôi không thấy bất kỳ tùy chọn --assume-changed nào. Nghịch đảo của --assume-unchanged--no-assume-unchanged.

11

Thêm vào câu trả lời của @adardesign nếu bạn muốn đặt lại file ll đã được thêm vào assume-unchanged danh sách để no-assume-unchanged trong một đi, bạn có thể làm như sau:

git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true 

này sẽ chỉ loại bỏ đầu ra hai nhân vật từ grep tức "h ", sau đó thoát khỏi bất kỳ không gian mà có thể có mặt trong tên tệp và cuối cùng là || 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.

29

git chức năng update-index có một số tùy chọn mà bạn có thể tìm thấy cách gõ như sau:

git update-index --help 

Dưới đây bạn sẽ tìm thấy nhiều tùy chọn - làm thế nào để xử lý với chức năng update-index.

[nếu bạn không biết tên file]

git update-index --really-refresh 

[nếu bạn biết tên file]

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

sẽ trở lại tất cả các file đó đã được thêm vào trong danh sách bỏ qua thông qua .

git update-index --assume-unchanged <file> 
+0

git update-index - thực sự làm mới, hoàn tác tất cả giả định không thay đổi mà tôi đã thực hiện, cảm ơn mẹo –

+0

Cảm ơn bạn đã cập nhật 'git-indexly-refresh' – reignsly

+0

' git update-index --no- giả sử không thay đổi 'lưu cuộc sống của tôi .. ok, tôi có thể chỉ cần đồng bộ hóa thư mục một lần nữa, nhưng tôi đã muốn có một giải pháp" thực sự "cho vấn đề này. –

56

Nếu đây là lệnh bạn thường sử dụng - bạn cũng có thể muốn xem xét có bí danh cho nó. Thêm vào toàn cầu .gitconfig của bạn:

[alias] 
    hide = update-index --assume-unchanged 
    unhide = update-index --no-assume-unchanged 

Sau khi lưu này để .gitconfig của bạn, bạn có thể chạy một lệnh sạch hơn.

git hide myfile.ext 

hoặc

git unhide myfile.ext 

này resource was very helpful

13

Nếu bạn muốn phục hồi lại tất cả các file mà đã được áp dụng giả định không thay đổi với bất kỳ trạng thái, không chỉ lưu trữ (git đánh dấu chúng bằng cách nhân vật trong trường hợp thấp hơn), 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 
  1. git ls-files -v sẽ in tất cả các file với tình trạng của họ
  2. grep '^[a-z]' sẽ lọc tập tin và chọn chỉ giả định không thay đổi
  3. cut -c 3- sẽ loại bỏ tình trạng và để lại chỉ con đường, cắt từ các nhân vật 3 thứ đến cùng
  4. tr '\012' '\000' sẽ thay thế cuối của nhân vật dòng (\ 012) để zero ký tự (\ 000)
  5. xargs -0 git update-index --no-assume-unchanged sẽ vượt qua tất cả các con đường phân cách bằng zero nhân vật để git update-index --no-assume-unchanged để hoàn tác
1

Nếu bạn đang sử dụng Git Extensions, sau đó làm theo các bước dưới đây:

  1. Đến cam kết sổ.
  2. Nhấp vào menu thả xuống có tên Thay đổi thư mục hoạt động.
  3. Chọn Hiển thị các tệp không bị thay đổi giả định.
  4. Nhấp chuột phải vào tệp bạn muốn unassumme.
  5. Chọn Không có assumme không thay đổi.

Bạn đã hoàn tất.