ฉันจะได้รับรายชื่อไฟล์ที่ระบุว่า - คงที่ - ไม่เปลี่ยนแปลงหรือไม่?


325

ฉันทำเครื่องหมายว่า--assume-unchangedอะไร มีวิธีการหาสิ่งที่ฉันซ่อนตัวโดยใช้ตัวเลือกที่?

ฉันขุด.git/ไดเรกทอรีและไม่เห็นสิ่งที่ดูเหมือนว่าฉันคาดหวัง แต่มันต้องอยู่ที่ไหนซักแห่ง ฉันลืมสิ่งที่ฉันทำเครื่องหมายด้วยวิธีนี้ไม่กี่สัปดาห์ที่ผ่านมาและตอนนี้ฉันต้องการเอกสารรายละเอียดเหล่านั้นสำหรับนักพัฒนาในอนาคต

คำตอบ:


449

git ls-files -vคุณสามารถใช้ หากตัวอักษรที่พิมพ์เป็นตัวพิมพ์เล็กไฟล์ที่ถูกทำเครื่องหมายถือว่าไม่มีการเปลี่ยนแปลง

หากต้องการพิมพ์เฉพาะไฟล์ที่ไม่เปลี่ยนแปลงให้ใช้:

git ls-files -v | grep '^[[:lower:]]'

จะโอบกอดโปรแกรมเมอร์ขี้เกียจของคุณเปิดนี้เป็นนามแฝงคอมไพล์ แก้ไข.gitconfigไฟล์ของคุณเพื่อเพิ่มตัวอย่างนี้:

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

ตอนนี้การพิมพ์git ignoredจะให้ผลลัพธ์ดังนี้:

h path/to/ignored.file
h another/ignored.file

42
git ls-files -v | grep ^ [az]
Matt R

17
เห็นได้ชัดว่าระบบปฏิบัติการของฉันมีการตั้งค่าการจัดเรียงแปลก ๆ ดังนั้นคำสั่งของ Matt จึงไม่เหมาะกับฉัน นี่คือสิ่งที่ฉันเพิ่มไว้ใน[alias]ส่วนของของฉัน.gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker

15
เหตุผล [az] ใช้ไม่ได้เพราะเชลล์ขยายเป็น wildcard หากไดเรกทอรีปัจจุบันมีไฟล์ที่ตรงกับรูปแบบนั้น (เช่นอักษรตัวพิมพ์เล็กตัวเดียว) แสดงว่าส่วนขยายนั้นเป็นชื่อของไฟล์ ลองเพิ่มคำพูดเช่น "[az]"
DomQ

7
git ls-files -v | grep -e "^ [az]"
Amir Ali Akbari

12
นามแฝงที่แนะนำทำงานเพื่อค้นหาไฟล์ไม่เปลี่ยนแปลงที่ไดเรกทอรีปัจจุบันและด้านล่าง หากคุณต้องการรายชื่อไฟล์ "ถือว่าไม่เปลี่ยนแปลง" ทั้งหมดในที่เก็บคุณจะต้องgit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor Rude

65

หนึ่งในสายการบิน

git ls-files -v | grep "^[a-z]"

ใช้นามแฝง

IMHO git hiddenดีกว่าสำหรับไฟล์ที่ทำเครื่องหมายว่า--assume-unchanged:

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'

นี่คือรายการของนามแฝงที่เกี่ยวข้องที่ฉันมีใน~/.gitconfig:

[alias]
  hide = update-index --assume-unchanged
  unhide = update-index --no-assume-unchanged
  unhide-all = update-index --really-refresh
  hidden = !git ls-files -v | grep \"^[a-z]\"
  ignored = !git status -s --ignored | grep \"^!!\"

ในการทำให้มันทำงานในไดเรกทอรีย่อยและสนับสนุนอาร์กิวเมนต์ :

  hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"$@\" | grep \"^[a-z]\";}; f"
  ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | grep \"^!!\";}; f"

ตัวอย่างเช่น:

 # cd target
 # git ignored classes

เกี่ยวกับสถานะไฟล์

สำหรับฉันไฟล์ที่ซ่อนอยู่ส่วนใหญ่จะถูกทำเครื่องหมายด้วยแฟhล็กแม้ว่าจริงๆแล้วจะมีแฟล็กอื่น ๆ อีกหลายรายการตามคู่มือgit-ls-files-v:

-v
    Similar to -t, but use lowercase letters for files that are 
marked as assume unchanged (see git-update-index(1)).

เกี่ยวกับgit ls-files-t:

This option (-t) identifies the file status with the following tags 
(followed by a space) at the start of each line:

H   cached
S   skip-worktree
M   unmerged
R   removed/deleted
C   modified/changed
K   to be killed
?   other

1
นามแฝงที่จำง่ายดี :) ขอบคุณ
PlagueHammer

1
นี่คือบางส่วนสายพันธุ์ที่มีความยืดหยุ่นมากขึ้น: และhidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f" ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f"สิ่งนี้อนุญาตให้git ignored -- PATH1 PATH2แสดงเฉพาะไฟล์ที่ถูกละเว้นในบางพา ธ (มีประโยชน์เมื่อคุณมีไฟล์ที่ถูกละเว้นจำนวนมาก)
sls

ขอบคุณสำหรับนามแฝง
MOHRE

22

คำสั่งนี้ทำงานได้อย่างต่อเนื่องสำหรับฉัน มันจะพิมพ์เฉพาะไฟล์ที่อยู่ในรายการเป็น 'สันนิษฐานว่าไม่มีการเปลี่ยนแปลง'

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

ฉันใช้มันหลายครั้งในสภาพแวดล้อมที่แตกต่างกันและทำงานได้อย่างสมบูรณ์


5
ในพรอมต์ Windows ใช้grep "^h"แทนเครื่องหมายคำพูดเดี่ยว
beautifulcoder


3

โซลูชันบรรทัดรับคำสั่งของ Windowsโดยใช้findstr :

git ls-files -v | findstr /B h
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.