วิธีที่คุณ Git เพิกเฉยต่อการดู / ติดตามไฟล์ / ไฟล์ที่ต้องการ คุณเรียกใช้สิ่งนี้:
git update-index --assume-unchanged <file>
ตอนนี้คุณจะยกเลิกได้อย่างไรเพื่อให้พวกเขาดูอีกครั้ง (เราเรียกมันว่ายกเลิกการสันนิษฐาน)
วิธีที่คุณ Git เพิกเฉยต่อการดู / ติดตามไฟล์ / ไฟล์ที่ต้องการ คุณเรียกใช้สิ่งนี้:
git update-index --assume-unchanged <file>
ตอนนี้คุณจะยกเลิกได้อย่างไรเพื่อให้พวกเขาดูอีกครั้ง (เราเรียกมันว่ายกเลิกการสันนิษฐาน)
คำตอบ:
ในการรับเลิกทำ / แสดงไฟล์ / ไฟล์ที่ถูกตั้งค่าให้ถือว่าไม่เปลี่ยนแปลงให้ดำเนินการดังนี้
git update-index --no-assume-unchanged <file>
ที่จะได้รับรายชื่อของ dir ของ / ไฟล์ที่มีassume-unchanged
ทำงานนี้ :
git ls-files -v|grep '^h'
git ls-files -v|grep '^h'|cut -c3-
ซึ่งจะให้ชื่อไฟล์แก่คุณโดยไม่มีคำนำหน้า "h"
assume-unchanged
git update-index --really-refresh
ด้วยคำสั่งนั้นคุณไม่จำเป็นต้องค้นหาไฟล์git ls-files
ก่อน
หากนี่เป็นคำสั่งที่คุณใช้บ่อย - คุณอาจต้องการพิจารณามีนามแฝงด้วยเช่นกัน เพิ่มในโลกของคุณ.gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
วิธีตั้งค่านามแฝง (หากคุณยังไม่รู้)
git config --configLocation alias.aliasName 'command --options'
ตัวอย่าง:
git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
หลังจากบันทึกสิ่งนี้ไปยังคุณ.gitconfig
คุณสามารถเรียกใช้คำสั่งสะอาด
git hide myfile.ext
หรือ
git unhide myfile.ext
นี้เอกสารคอมไพล์เป็นประโยชน์มาก
ตามความคิดเห็นนี่เป็นชื่อแทนที่เป็นประโยชน์ในการค้นหาว่าไฟล์ใดถูกซ่อนอยู่ในปัจจุบัน:
[alias]
hidden = ! git ls-files -v | grep '^h' | cut -c3-
hidden = ! git ls-files -v | grep '^h' | cut -c3-
ฟังก์ชั่นดัชนีการปรับปรุง git มีหลายตัวเลือกที่คุณสามารถค้นหาพิมพ์ด้านล่าง:
git update-index --help
ที่นี่คุณจะพบตัวเลือกต่าง ๆ - วิธีจัดการกับฟังก์ชั่นอัพเดทดัชนี
[ถ้าคุณไม่รู้ชื่อไฟล์]
git update-index --really-refresh
[ถ้าคุณรู้ชื่อไฟล์]
git update-index --no-assume-unchanged <file>
จะคืนค่าไฟล์ทั้งหมดที่ถูกเพิ่มในรายการเพิกเฉยผ่าน
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>
ช่วยชีวิตฉันไว้ .. โอเคฉันสามารถซิงค์โฟลเดอร์อีกครั้ง แต่ฉันต้องการทางออกที่แท้จริงสำหรับปัญหานี้
ฉันถือว่าคุณหมายถึง--assume-unchanged
เพราะฉันไม่เห็น--assume-changed
ตัวเลือกใด ๆ ผกผันของมี--assume-unchanged
--no-assume-unchanged
หากต้องการสังเคราะห์คำตอบดั้งเดิมที่ยอดเยี่ยมจาก @adardesign, @adswebwork และ @AnkitVishwakarma และความคิดเห็นจาก @Bdoserror, @Retsam, @seanf และ @torek พร้อมลิงก์เอกสารเพิ่มเติมและชื่อแทนที่กระชับ ...
คำสั่งพื้นฐาน
หากต้องการรีเซ็ตไฟล์ที่สันนิษฐานว่าไม่เปลี่ยนแปลงกลับสู่ปกติ:
git update-index --no-assume-unchanged <file>
หากต้องการแสดงรายการไฟล์ทั้งหมดที่ถือว่าไม่มีการเปลี่ยนแปลง:
git ls-files -v | grep '^[a-z]' | cut -c3-
หากต้องการรีเซ็ตไฟล์ที่ไม่มีการเปลี่ยนแปลงให้กลับเป็นปกติ:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
หมายเหตุ:คำสั่งนี้ซึ่งอยู่ในรายการอื่นจะไม่ปรากฏขึ้นเพื่อรีเซ็ตไฟล์ที่ไม่มีการเปลี่ยนแปลงทั้งหมดอีกต่อไป (ฉันเชื่อว่ามันเคยใช้และแสดงไว้ก่อนหน้านี้ว่าเป็นโซลูชัน):
git update-index --really-refresh
ทางลัด
ในการทำให้งานทั่วไปเหล่านี้ง่ายต่อการใช้งานใน git ให้เพิ่ม / อัพเดทส่วนaliasต่อไปนี้.gitconfig
สำหรับผู้ใช้ของคุณ (เช่น~/.gitconfig
ในระบบ * nix หรือ 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
คุณสามารถได้รับผลกระทบเดียวกันโดยไม่ต้องใช้นามแฝงหรือสคริปต์ของเชลล์โดยใช้!
ดังนี้:hidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refresh
ไม่ (หรือไม่ทำอีกต่อไปอาจเป็นครั้งเดียว) ล้างค่าสถานะสมมติที่ไม่เปลี่ยนแปลงในไฟล์ดัชนี
หากคุณต้องการยกเลิกไฟล์ทั้งหมดที่นำไปใช้ถือว่าไม่มีการเปลี่ยนแปลงด้วยสถานะใด ๆ ไม่เพียง แต่แคช (git ทำเครื่องหมายด้วยอักขระในตัวพิมพ์เล็ก) คุณสามารถใช้คำสั่งต่อไปนี้:
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
จะพิมพ์ไฟล์ทั้งหมดด้วยสถานะgrep '^[a-z]'
จะกรองไฟล์และเลือกจะถือว่าไม่เปลี่ยนแปลงเท่านั้นcut -c 3-
จะลบสถานะและออกจากเส้นทางเท่านั้นโดยตัดจากอักขระ 3-rd ไปยังจุดสิ้นสุดtr '\012' '\000'
จะแทนที่อักขระจุดสิ้นสุดของบรรทัด (\ 012) เป็นศูนย์ (\ 000)xargs -0 git update-index --no-assume-unchanged
จะผ่านเส้นทางทั้งหมดคั่นด้วยอักขระศูนย์ถึงgit update-index --no-assume-unchanged
เพื่อยกเลิกการเพิ่ม@adardesign
คำตอบหากคุณต้องการรีเซ็ตไฟล์ทั้งหมดที่เพิ่มไว้ในassume-unchanged
รายการno-assume-unchanged
ในครั้งเดียวคุณสามารถทำสิ่งต่อไปนี้:
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
นี่จะเป็นการตัดเอาท์อักขระสองตัวออกจาก grep ie "h "
จากนั้นให้เว้นช่องว่างใด ๆ ที่อาจมีอยู่ในชื่อไฟล์และในที่สุด|| true
จะป้องกันคำสั่งให้ยุติก่อนกำหนดในกรณีที่ไฟล์บางไฟล์ในลูปมีข้อผิดพลาด
หากคุณใช้Git Extensionsให้ทำตามขั้นตอนด้านล่าง:
คุณทำเสร็จแล้ว
ไม่มีอะไรที่นี่ที่ไม่ครอบคลุม แต่ต้องการเพิ่ม 2 เซนต์ของฉัน บางครั้งฉันเรียกใช้งานบิลด์และมีการเปลี่ยนแปลงไฟล์จำนวนมากจากนั้นฉันก็ต้องการทำงานกับบางสิ่งดังนั้นคำสั่งนี้ช่วยฉันได้มากจริงๆ
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
หวังว่าคนอื่นจะเห็นว่ามีประโยชน์เช่นกัน
.gitignore
เพื่อเพิกเฉยต่องานสร้างของคุณ
.gitignore
แต่นั่นเป็นบางครั้งในประสบการณ์ของฉันไม่เพียงพอ แต่ฉันเข้าใจบริบทที่คุณกำลังพูดนี้
ไม่มีวิธีแก้ปัญหาใดที่เหมาะกับฉันใน Windows - ดูเหมือนว่าจะใช้ตัวพิมพ์ใหญ่H
แทนh
สถานะไฟล์และคำสั่ง grep ต้องใช้คาเร็ตพิเศษซึ่ง^
แสดงถึงจุดเริ่มต้นของบรรทัดรวมถึงการลบอักขระถัดไป
โซลูชัน Windows
git ls-files -v | grep '^^H'
เพื่อแสดงรายการไฟล์ที่ไม่ได้ลบทั้งหมดgit ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
เพื่อยกเลิกการข้ามไฟล์ของไฟล์ทั้งหมดที่ทำผ่าน update-index --skip-worktree
git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
เพื่อยกเลิกการข้ามไฟล์ของไฟล์ทั้งหมดที่ทำผ่าน update-index --assume-unchanged
git ls-files -v | grep '^^H'
เพื่อแสดงรายการไฟล์ที่ยังไม่ได้ลบอีกครั้งและตรวจสอบว่าคำสั่งด้านบนใช้งานได้หรือไม่ - ตอนนี้ไม่ควรส่งคืนอะไรเลย