คำตำหนิที่แสดงว่าไม่มีประวัติ


88

เมื่อฉันเรียกใช้ git ตำหนิบนไฟล์ (โดยใช้ msysgit) ฉันมักจะได้รับงานพิมพ์ประเภทต่อไปนี้:

00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   2) {
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   3)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   4)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   5)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   6)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   7)      impor

กล่าวคือแสดงทุกบรรทัดว่ายังไม่ได้ผูกมัด

ฉันลองสิ่งนี้กับไฟล์หลาย ๆ ไฟล์ซึ่งมีการคอมมิตจำนวนมาก - ผลลัพธ์จะเหมือนกันเสมอ ฉันลองใช้เส้นทางสัมพัทธ์ / เต็ม แต่ดูเหมือนว่าจะไม่แตกต่างกัน

เมื่อฉันพยายามใช้คำตำหนิของ TortoiseGit มันมักจะแสดงทุกบรรทัดว่าเป็นการกระทำครั้งสุดท้ายในการกระทำครั้งแรก:

ข้อความแสดงแทน

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

ไอเดีย?

แก้ไข - ข้อมูลเพิ่มเติม

  • การตำหนิ Git ทำงานได้ดีบน GitHub ซึ่งเป็นที่โฮสต์ repo นี้
  • นอกจากนี้ยังใช้งานได้ดีถ้าฉันโคลนไปยังเครื่อง linux และทำผิดที่นั่น
  • ดูเหมือนว่าเฉพาะใน msysgit สิ่งนี้ใช้ไม่ได้

สำหรับฉันปัญหานี้เป็นผลมาจากการใช้เส้นทางเชื่อมโยงที่เชื่อมโยงกับเส้นทางที่พื้นที่เก็บข้อมูลรู้จักดังนั้นจึงคิดว่าไฟล์ใหม่ทั้งหมด
Kzqai

หมายเหตุ: ตั้งแต่ git 2.0.1 (วันที่ 25 มิถุนายน 2014) การตำหนิคอมไพล์ควรหยุดการรายงานบรรทัดที่ "ยังไม่ได้กระทำ" ทั้งหมด ดูคำตอบของฉันด้านล่าง
VonC

ในรายชื่อส่งเมล: git.661346.n2.nabble.com/…ยังเกิดขึ้นบน Linux
Ciro Santilli 郝海东冠状病六四事件法轮功

สิ่งนี้ส่งผลกระทบต่อ WSL ด้วยดังนั้นฉันจึงเพิ่มแท็ก หวังว่าคงไม่เป็นไร
mikemaccana

คำตอบ:


127

git blame file.txtตำหนิเวอร์ชันของ file.txt ในสำเนาการทำงานของคุณ หาก file.txt มี Windows-newlines (CRLF) ใน repo และคุณมีcore.autocrlf = truefile.txt ทุกบรรทัดจะถือว่าแตกต่างกันและจะรายงานโดยgit blameที่ยังไม่ได้คอมมิต

เหตุผลว่าทำไมgit blame <my_branch>(หรือดีกว่าgit blame HEADซึ่งทำงานได้ไม่ว่าคุณจะอยู่ในสาขาใด) ก็คือไม่ได้ตำหนิเวอร์ชันสำเนาที่ใช้งานได้ดังนั้นจึงไม่มีความเป็นไปได้สำหรับบรรทัดที่ยังไม่ได้รับการยืนยัน


118
git blame -wไม่สนใจช่องว่างดังนั้นคุณยังสามารถตำหนิสำเนาที่ใช้งานได้หากต้องการ
Kyle Heironimus

13
Git ตำหนิ -w ควรเป็นคำตอบแยกต่างหากและเป็นคำตอบที่ยอมรับ;) คำตอบที่ยอมรับโดยไม่มีความคิดเห็นนั้นไร้ประโยชน์สำหรับฉัน
Guillaume Perrot

55

พบวิธีแก้ปัญหา - แปลกมาก

ถ้าฉันเรียกใช้สิ่งนี้:

git blame file.txt

ประวัติเสียดังโพสต์ข้างบน

ถ้าฉันทำสิ่งนี้แทน:

git blame my_branch file.txt

มันได้ผล!

นี่เป็นเรื่องแปลกมากเพราะ AFAICS การใช้งานไม่ต้องการชื่อสาขา:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file

7
สิ่งนี้ได้ผลสำหรับฉันขอบคุณสำหรับการโพสต์ คุณควรทำเครื่องหมายที่นี่เป็นคำตอบ IMO
wes

สิ่งนี้ใช้ได้กับฉันใน msysgit แต่ชื่อไฟล์นั้นคำนึงถึงตัวพิมพ์เล็กและใหญ่ ดังนั้นฉันสามารถเขียนgit blame mybranch cmakelists.txtและมันจะล้มเหลว แต่ถ้าฉันเขียนgit blame mybranch CMakeLists.txtมันจะได้ผล
วน

ฉันเห็นด้วย wes; ตำหนิไม่แสดงประวัติจนกว่าฉันจะระบุสาขาและไม่สอดคล้องกับเอกสาร
josephdpurcell

OMG ตำหนิพังมาก
Ciro Santilli 郝海东冠状病六四事件法轮功

8

เริ่มตั้งแต่ git 2.0.1 (วันที่ 25 มิถุนายน 2014) การตำหนิคอมไพล์ควรหยุดการรายงานบรรทัดที่ "ยังไม่ได้กระทำ"

ดู กระทำ 4d4813a (26 เม.ย. 2557) โดยbrian m. คาร์ลสัน ( bk2204) .
(ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ e934c67 , 06 มิ.ย. 2014)

blame: จัดการไฟล์อย่างถูกต้องโดยไม่คำนึงถึง autocrlf

หากไฟล์มีการCRLFลงท้ายบรรทัดในที่เก็บด้วยcore.autocrlf=inputให้ตำหนิบรรทัดที่ทำเครื่องหมายเป็น " Not Committed Yet" เสมอแม้ว่าจะไม่มีการแก้ไขก็ตาม
อย่าพยายามแปลงส่วนท้ายบรรทัดเมื่อสร้างการกระทำปลอมเพื่อให้การตำหนิทำงานอย่างถูกต้องโดยไม่คำนึงถึงการautocrlfตั้งค่า


8
ฉันยังคงมีปัญหาใน git v2.1.3
DBedrenko

ฉันมีปัญหากับ git เวอร์ชัน 2.16.1.windows.1
Radon8472

@ Radon8472 คุณสามารถเพิ่มคำถามใหม่ที่แสดงปัญหาพร้อมgit config -lผลลัพธ์ของคุณ(และลิงก์กลับไปยังคำตอบนี้) ซึ่งจะช่วยให้ฉันและคนอื่น ๆ สามารถลองดูว่าปัญหายังคงมีอยู่หรือไม่
VonC

1

ความเป็นไปได้อีกอย่าง: การพิมพ์ชื่อไฟล์แบบตรงตามตัวพิมพ์เล็กและใหญ่

ฉันมีปัญหาเดียวกันกับ git ตำหนิ file.txt จากนั้นก็รู้ว่าฉันพิมพ์ชื่อไฟล์แบบตรงตามตัวพิมพ์เล็กและใหญ่ด้วย file.txt

เปลี่ยนเป็น File.txt (ตัวอย่าง) และฉันได้ผลลัพธ์ที่คาดหวังโดยไม่ต้องระบุ my_branch: git ตำหนิ File.txt

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