สถานะ Git - มีวิธีแสดงการเปลี่ยนแปลงเฉพาะในไดเร็กทอรีเฉพาะหรือไม่?


141

ฉันต้องการดูรายการไฟล์ที่แก้ไขตั้งแต่การกระทำครั้งสุดท้ายตามที่git statusแสดง แต่ฉันสนใจเฉพาะไฟล์ที่อยู่ในไดเร็กทอรีเดียว มีวิธีทำไหม? ฉันลองgit status <directory>แล้ว แต่ดูเหมือนว่าจะมีบางอย่างที่แตกต่างไปจากเดิมอย่างสิ้นเชิง (แสดงรายการไฟล์ที่เปลี่ยนแปลงทั้งหมดเหมือนอย่างที่ฉันเขียนgit add <directory>ก่อน)

เอกสารสำหรับ git-status ไม่ได้บอกอะไรมากนักนอกเหนือจากข้อเท็จจริงที่ว่ายอมรับตัวเลือกเดียวกับที่ git-comm ทำ (แต่จุดประสงค์ของ git-comm ไม่ได้แสดงรายการไฟล์ที่เปลี่ยนแปลง)

คำตอบ:


206

จากภายในไดเร็กทอรี:

git status .

คุณสามารถใช้เส้นทางใดก็ได้โดยใช้ไวยากรณ์นี้:

git status <directoryPath>

ตัวอย่างเช่นไดเรกทอรีที่มีเส้นทาง "my / cool / path / here"

git status my/cool/path/here

4
ขอบคุณ! นอกจากนี้ 'git status <directory>' ดูเหมือนว่าจะทำในสิ่งที่ฉันคาดหวัง - ฉันจำไม่ได้ว่าเคยมีปัญหาอะไรมาก่อน ... อาจจะเป็นเรื่องของ git เวอร์ชันอื่นก็ได้
Kuba Suder

ไม่มีปัญหาและอาจเป็นไปได้ - git เวอร์ชันใหม่ดูเหมือนจะทำให้สิ่งต่างๆง่ายขึ้น
Sam Doidge

4
ใช่พฤติกรรมเปลี่ยนจาก 1.6 เป็น 1.7 อย่างแน่นอน เป็นไปตามข้อกำหนด OP ใน 1.7 แต่ 1.6 ยังคงดำเนินต่อไปใน repo ทั้งหมด
colgur

ฉันกำลังมองหาคำสั่งนี้แม้ว่าจะคุ้นเคยกับคำสั่งที่ซับซ้อนที่สุดเช่น stash และ rebase เพราะฉันไม่ต้องการเห็นไฟล์ที่ติดตามเป็นสีแดง git rm ก็ไม่มีประโยชน์เช่นกันเพราะมันถูกลบออกจากดัชนีเมื่อกระทำ แต่จริงๆแล้วคำสั่งนี้เป็นคำสั่งที่จำเป็นจริงๆเมื่อต้องการใช้งานเพียงเล็กน้อยเท่านั้นโซลูชันง่ายๆคือสิ่งที่ไม่สามารถมองเห็นได้จากที่ไหนเลย
Shashank Bhatt

32

เหตุผลที่git statusต้องใช้ตัวเลือกเช่นเดียวกับgit commitคือว่าวัตถุประสงค์ของการคือการแสดงสิ่งที่จะเกิดขึ้นถ้าคุณมุ่งมั่นที่มีตัวเลือกเดียวกับที่คุณส่งผ่านไปยังgit status git statusในส่วนนี้เป็นจริงgit statusgit commit --preview

เพื่อให้ได้สิ่งที่ต้องการคุณสามารถทำได้ซึ่งจะแสดงการเปลี่ยนแปลงทีละขั้น:

git diff --stat --cached -- <directory_of_interest>

และสิ่งนี้แสดงให้เห็นการเปลี่ยนแปลงที่ไม่มีขั้นตอน:

git diff --stat -- <directory_of_interest>

หรือสิ่งนี้แสดงทั้งสองอย่าง:

git diff --stat HEAD -- <directory_of_interest>

3
ใช้งานได้บางส่วนแม้ว่าจะไม่แสดงไฟล์ที่สร้างขึ้นใหม่ (ที่ไม่ได้ติดตาม) เช่น git-status ทำ ...
Kuba Suder

ตกลงฉันไม่แน่ใจว่าคุณต้องการรายงานอะไร หากคุณจำเป็นต้องตรวจสอบไฟล์ unstaged ลองหรือgit ls-files --others <directory_in_question> ls-files -o
CB Bailey

git ls-files -oแสดงไฟล์ในไดเร็กทอรีที่ไม่มีการจัดเตรียมซ้ำในขณะที่git statusแสดงเฉพาะไดเร็กทอรีระดับบนสุด และหนึ่งจะมีการเขียนgit diff, git ls-filesการส่งออกและสร้างทุกสีเข้ารหัส ฯลฯ ที่ให้ถ้ามันคือการเป็นผู้แทนgit status git statusฉันอยากเห็นวิธีแก้ปัญหานี้จริงๆ!
Peter V.Mørch

14

วิธีแก้ปัญหาที่ง่ายที่สุด:

  1. ไปที่ไดเร็กทอรี
  2. git status | grep -v '\.\.\/'

แน่นอนว่าสิ่งนี้ทิ้งสี


หากจำเป็นคุณสามารถเพิ่มการปรับเปลี่ยนบางอย่างเพื่อให้สีกลับมา ตัวอย่างที่ 1 ตัวอย่างที่ 2
Carson

2

โปรดทราบว่าหากคุณตรวจสอบสถิติคอมไพล์โดยไม่ต้องไปที่ไดเรกทอรีคอมไพล์

### สร้างไฟล์
sudo nano / usr / local / bin / gitstat

### ใส่สิ่งนี้ไว้

#! / usr / bin / env bash

ผบ. = $ 1

ถ้า [[$ dir == ""]]; แล้ว
    echo "ต้องมี Directory!"
    ทางออก
fi

สะท้อน "Git stat สำหรับ" $ dir "

git --git-dir = $ dir / .git --work-tree = $ dir diff --stat

### ให้ exec perm
sudo chmod + x / usr / local / bin / gitstat

และเรียกสคริปต์ง่ายๆว่า: gitstat /path/to/foo-project. นอกจากนี้คุณยังสามารถใช้งานได้ในขณะที่foo-projectเพียงแค่การทำgitstat .และอื่น ๆ คิดว่าสั้นกว่าgit status -s, git diff --statหรือgit diff --stat HEADถ้าคุณมักจะใช้คอนโซลแทนของ GUI

เครดิต:

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