“ git diff” ไม่ทำอะไรเลย


96

ฉันคิดว่านี่เป็นข้อผิดพลาดในการกำหนดค่าที่ใดที่หนึ่ง แต่ฉันคิดไม่ออกว่าที่ไหน คำสั่ง git ทั่วไปดูเหมือนจะทำงานได้ดี แต่ "git diff" ไม่ทำอะไรเลย เพื่อความปลอดภัยฉันลบเครื่องมือ diff ภายนอกออกจากไฟล์. gitconfig ของฉัน สิ่งนี้ได้รับการติดตั้งผ่าน MacPorts และเป็นเวอร์ชัน lates (1.7.2.2)

สิ่งที่ฉันเห็นก็คือเมื่อฉันเรียกใช้ "git diff" จากพื้นที่ทำงานของฉันมันก็ออกไปโดยไม่ทำอะไรเลย

$ git --version
git version 1.7.2.2
$ git diff
$ 

ถ้าฉันสำรองข้อมูลหนึ่งไดเร็กทอรีออกจากพื้นที่ทำงานรูทของฉันการพิมพ์ "git diff" จะทำให้ฉันได้สิ่งนี้:

$ git diff
usage: git diff [--no-index] <path> <path>

นี่อาจเป็นพฤติกรรมที่คาดหวังได้เนื่องจากฉันไม่ได้อยู่ภายใต้ที่เก็บ git

มีความคิดเห็นเกี่ยวกับสิ่งที่ฉันสามารถทำได้เพื่อแก้ไขปัญหานี้หรือไม่


อะไรทำให้คุณคิดว่ามีอะไรต้องแก้ไข คุณคาดหวังว่าจะได้เห็นอะไร
Rob Kennedy

หมายเหตุ: ข้อความแสดงข้อผิดพลาดเมื่อใช้git diff นอก repo จะชัดเจนขึ้นในไม่ช้า ดูคำตอบของฉันด้านล่าง
VonC

1
โปรดทราบว่าหากคุณพยายามที่จะแตกไฟล์เฉพาะระหว่างสองคอมมิตและไม่เห็นเอาต์พุตตรวจสอบให้แน่ใจว่าปลอกถูกต้องในพา ธ ไปยังไฟล์
Seth Flowers

คำตอบ:


111

เอาต์พุตดีฟอลต์สำหรับgit diffคือรายการการเปลี่ยนแปลงที่ไม่ได้ถูกคอมมิต / เพิ่มลงในดัชนี หากไม่มีการเปลี่ยนแปลงแสดงว่าไม่มีเอาต์พุต

git diff [--options] [-] […]

แบบฟอร์มนี้ใช้เพื่อดูการเปลี่ยนแปลงที่คุณทำโดยสัมพันธ์กับดัชนี (พื้นที่จัดเตรียมสำหรับการคอมมิตถัดไป) กล่าวอีกนัยหนึ่งความแตกต่างคือสิ่งที่คุณสามารถบอกให้ git เพิ่มเข้าไปในดัชนีได้ แต่คุณยังไม่ได้ทำ

ดูเอกสารสำหรับรายละเอียดเพิ่มเติม โดยเฉพาะอย่างยิ่งเลื่อนลงไปที่ตัวอย่างและอ่านส่วนนี้:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. เปลี่ยนสำเนาการทำงานกับดัชนี
  2. ทำให้ดัชนีแตกต่างกับ HEAD
  3. เปลี่ยนสำเนาการทำงานด้วย HEAD

นอกพื้นที่ทำงานของคุณตามที่คุณคาดเดา git จะไม่รู้ว่าจะแตกต่างกันอย่างไรดังนั้นคุณต้องระบุสองเส้นทางเพื่อเปรียบเทียบอย่างชัดเจนด้วยเหตุนี้ข้อความการใช้งาน


13
ฉันไม่แน่ใจว่าคำตอบของคุณถูกต้อง แต่มันช่วยฉันหาคำตอบได้ดังนั้นขอขอบคุณและฉันจะทำเครื่องหมายเช่นนั้น! เอาต์พุตดีฟอลต์สำหรับ git diff ไม่ใช่รายการของการเปลี่ยนแปลงที่ไม่ได้คอมมิต แต่เป็นรายการของการเปลี่ยนแปลงที่ไม่ได้คอมมิตซึ่ง" ยังไม่จัดฉากสำหรับการคอมมิตถัดไป" ดังนั้นคำสั่งที่ทำในสิ่งที่ฉันคาดหวังให้ "git diff" ทำคือ "git diff HEAD"
Tom Lianza

2
เพื่อให้ภาพสมบูรณ์ให้ใช้ git diff --cached เพื่อแสดงเฉพาะสิ่งที่อยู่ในดัชนี
ดักลาส

git diff ทำ: (ดัชนี) - (ไดเร็กทอรีการทำงาน) หรือวิธีอื่น ๆ : (ไดเร็กทอรีการทำงาน) - (ดัชนี)?
BKSpurgeon

4

หมายเหตุ: เริ่มต้น git 1.8.5 หรือ 1.9, Q4 2013 :

เมื่อผู้ใช้พิมพ์ " git diff" นอกแผนภูมิที่ใช้งานได้โดยคิดว่าเขาอยู่ข้างในข้อความแสดงข้อผิดพลาดปัจจุบันที่เป็นซับเดียว:

usage: git diff --no-index <path> <path>

อาจไม่เพียงพอที่จะทำให้เขาตระหนักถึงความผิดพลาด

เพิ่ม " Not a git repository" ในข้อความแสดงข้อผิดพลาดเมื่อเราเข้าสู่--no-indexโหมด "" โดยไม่มีตัวเลือกบรรทัดคำสั่งที่ชัดเจนเพื่อสั่งให้เราทำเช่นนั้น


ดู:

ชี้แจงเอกสารสำหรับ " diff --no-index"
ระบุว่าเมื่อไม่ได้อยู่ในที่เก็บ--no-indexเป็นนัยและข้อโต้แย้งสองข้อเป็นข้อบังคับ

ชี้แจงข้อความแสดงข้อผิดพลาดdiff-no-indexเพื่อแจ้งให้ผู้ใช้ทราบว่า CWD ไม่ได้อยู่ในที่เก็บดังนั้นจึงจำเป็นต้องมีอาร์กิวเมนต์สองตัว

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>

2

จะไม่ทำอะไรเลยหากไดเรกทอรีการทำงานของคุณสะอาดและไม่มีความแตกต่างจากการอัปเดตล่าสุด ลองแก้ไขไฟล์แล้วเรียกใช้ git diff อีกครั้งจากนั้นควรแสดงความแตกต่าง


1

หากคุณใช้งานนอกที่เก็บจริงหรือสำเนางานลักษณะการทำงานจะเหมือนกับ GNU diff ดังนั้นคุณต้องแจ้ง 2 ไดเรกทอรีหรือไฟล์ที่จะเปรียบเทียบ ตัวอย่าง:

git diff old_dir new_dir.

หากมีความแตกต่างกันผลลัพธ์จะแสดงให้คุณเห็นตามที่คาดไว้


0

ไม่ได้อยู่ในกรณีของคุณ แต่อาจเป็นเพราะไม่มีไฟล์ที่คุณส่งผ่าน

$ git difftool HEAD HEAD^ -- path/that-not-exists

ไม่มีอะไรเกิดขึ้น

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