ดัชนี git ประกอบด้วยอะไรอย่างแน่นอน?


178

ดัชนี Git ประกอบด้วยอะไรบ้างและฉันสามารถใช้คำสั่งอะไรเพื่อดูเนื้อหาของดัชนี


ปรับปรุง

ขอบคุณสำหรับคำตอบทั้งหมดของคุณ ฉันรู้ว่าดัชนีทำหน้าที่เป็นพื้นที่จัดแสดงและสิ่งที่มุ่งมั่นอยู่ในดัชนีมากกว่าแผนผังการทำงาน ฉันแค่อยากรู้เกี่ยวกับสิ่งที่วัตถุดัชนีประกอบด้วย ฉันคิดว่ามันอาจเป็นรายการชื่อไฟล์ / ชื่อไดเรกทอรี SHA-1 คู่ต้นไม้เสมือนอาจจะเป็นแบบนี้

มีในคำศัพท์ Git คำสั่งการประปาที่ฉันสามารถใช้เพื่อแสดงรายการเนื้อหาของดัชนีหรือไม่?



3
คุณควรอ่านและดูไดอะแกรม - มีประโยชน์มาก: gitguys.com/topics/whats-the-deal-with-the-git-index
kernix

1
@kernix โดเมนหมดอายุแล้ว ไม่เป็นประโยชน์อีกต่อไป
narendra-choudhary

2
ลิงก์ที่อัปเดต: web.archive.org/web/20160822072849/http://www.gitguys.com/…
ndequeker

คำตอบ:


162

หนังสือ Git มีบทความเกี่ยวกับสิ่งที่ดัชนีรวมถึง :

ดัชนีเป็นไฟล์ไบนารี (โดยทั่วไปเก็บไว้ใน.git/index) ที่มีรายการเรียงลำดับของชื่อเส้นทางแต่ละคนมีสิทธิ์และ SHA1 ของวัตถุหยด; git ls-filesสามารถแสดงเนื้อหาของดัชนี:

$ git ls-files --stage
100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0   .gitignore
100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0   .mailmap

ปัญหา Racy คอมไพล์จะช่วยให้รายละเอียดบางอย่างเพิ่มเติมเกี่ยวกับโครงสร้างที่:

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


หากต้องการดูเพิ่มเติม cf " git / git / เอกสาร / เทคนิค / index-format.txt ":

ไฟล์ดัชนี Git มีรูปแบบดังต่อไปนี้

หมายเลขไบนารีทั้งหมดอยู่ในลำดับไบต์ของเครือข่าย
เวอร์ชัน 2อธิบายไว้ที่นี่เว้นแต่จะระบุไว้เป็นอย่างอื่น

  • ส่วนหัวขนาด 12 ไบต์ประกอบด้วย:
    • ลายเซ็น 4 ไบต์:
      ลายเซ็นคือ {' D', ' I', ' R', ' C'} (หมายถึง " dircache")
    • หมายเลขเวอร์ชัน 4 ไบต์: เวอร์ชัน
      ปัจจุบันที่รองรับคือ 2, 3 และ 4
    • จำนวนรายการดัชนี 32 บิต
  • จำนวนที่เรียงลำดับรายการดัชนี
  • ส่วนขยาย :
    ส่วนขยายถูกระบุด้วยลายเซ็นต์
    สามารถละเว้นส่วนขยายที่เป็นตัวเลือกได้หาก Git ไม่เข้าใจ
    ปัจจุบัน Git รองรับต้นไม้ที่แคชและแก้ไขการเลิกทำการขยาย
    • ลายเซ็นส่วนขยาย 4 ไบต์ หากไบต์แรกคือ ' A' .. ' Z' นามสกุลจะเป็นตัวเลือกและสามารถละเว้นได้
    • ขนาดส่วนขยาย 32 บิต
    • ขยายข้อมูล
  • SHA-1 160 บิตเหนือเนื้อหาของไฟล์ดัชนีก่อนการตรวจสอบนี้

ความคิดเห็นmljrg :

ถ้าดัชนีเป็นสถานที่ที่จัดเตรียมการส่งมอบครั้งต่อไปทำไม "" ไม่git ls-files -sส่งคืนสิ่งใดหลังจากการส่งมอบ?

เนื่องจากดัชนีแสดงถึงสิ่งที่ถูกติดตามและหลังจากการคอมมิชชันสิ่งที่ถูกติดตามจะเหมือนกับการคอมมิทล่าสุด ( git diff --cachedไม่ส่งคืนอะไร)

ดังนั้นgit ls-files -sแสดงรายการไฟล์ทั้งหมดที่ถูกติดตาม (ชื่อวัตถุบิตโหมดและหมายเลขสเตจในเอาต์พุต)

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


Git 2.20 (Q4 2018) เพิ่มตาราง Offset Entry Index (IEOT) :

ดูกระทำ 77ff112 , กระทำ 3255089 , กระทำ abb4bb8 , กระทำ c780b9c , กระทำ 3b1d9e0 , กระทำ 371ed0d (10 ตุลาคม 2018) โดยเบนเพิร์ท (benpeart )
ดูกระทำ 252d079 (26 กันยายน 2018) โดยNguyễnTháiNgọc Duy (pclouds )
(ผสานโดยJunio ​​C Hamano - gitster- in e27bfaa , 19 Oct 2018)

ieot: เพิ่มส่วนขยายดัชนี Offset Table (IEOT) ของดัชนี

แพทช์นี้ช่วยให้สามารถจัดการกับต้นทุน CPU ในการโหลดดัชนีโดยการเพิ่มข้อมูลเพิ่มเติมไปยังดัชนีที่จะทำให้เราสามารถทำการโหลดและการแปลงรายการแคชได้อย่างมีประสิทธิภาพ

ทำได้โดยการเพิ่มส่วนขยายดัชนี (เป็นทางเลือก) ที่เป็นตารางออฟเซ็ตในบล็อกของรายการแคชในไฟล์ดัชนี

เพื่อให้การทำงานนี้สำหรับดัชนี V4 เมื่อเขียนรายการแคชมันจะ "รีเซ็ต" การบีบอัดคำนำหน้าเป็นระยะโดยการเข้ารหัสรายการปัจจุบันราวกับว่าชื่อเส้นทางสำหรับรายการก่อนหน้านั้นแตกต่างกันอย่างสมบูรณ์และบันทึกออฟเซ็ตของรายการนั้นใน IEOT .
โดยพื้นฐานด้วยดัชนี V4 จะสร้างออฟเซ็ตเป็นบล็อกของรายการที่ถูกบีบอัดคำนำหน้า

ด้วยการตั้งค่า index.threads config ใหม่การโหลดดัชนีจะเร็วขึ้น


อันเป็นผลมาจาก ( การใช้ IEOT ) กระทำ 7bd9631สะอาดขึ้นread-cache.c load_cache_entries_threaded()ฟังก์ชั่นสำหรับ Git 2.23 (Q3 2019)

ดูกระทำ 8373037 , กระทำ d713e88 , กระทำ d92349d , กระทำ 113c29a , กระทำ c95fc72 , กระทำ 7a2a721 , กระทำ c016579 , กระทำ be27fb7 , กระทำ 13a1781 , กระทำ 7bd9631 , กระทำ 3c1dce8 , กระทำ cf7a901 , กระทำ d64db5b , กระทำ 76a7bc0 (9 พฤษภาคม 2019) โดยเจฟฟ์คิง (peff )
(ผสานโดยJunio ​​C Hamano - gitster- in c0e78f7 , 13 Jun 2019)

read-cache: ปล่อยพารามิเตอร์ที่ไม่ได้ใช้จากโหลดเธรด

load_cache_entries_threaded()ฟังก์ชั่นใช้src_offsetพารามิเตอร์ว่ามันไม่ได้ใช้ สิ่งนี้เกิดขึ้นตั้งแต่เริ่มต้นใน77ff112 ( read-cache: รายการโหลดแคชบนเธรดผู้ปฏิบัติงาน, 2018-10-10, Git v2.20.0-rc0)

การขุดในรายการส่งเมลพารามิเตอร์นั้นเป็นส่วนหนึ่งของการวนซ้ำก่อนหน้าของซีรีย์แต่ไม่จำเป็นเมื่อรหัสสลับไปใช้ส่วนขยาย IEOT


6
เกี่ยวกับความสำคัญหากดัชนีในรุ่น Git ดูstackoverflow.com/questions/1450348/…
VonC

ลิงค์แรกด้านบนชี้ไปที่เวอร์ชันของ git-scm ซึ่งไม่มีบทความในดัชนี ฉันคิดว่าเจตนาจะชี้ไปที่นี่: schacon.github.io/gitbook/7_the_git_index.html
Kris Giesing

1
@KrisGiesing ขอบคุณสำหรับลิงค์ ฉันได้อัพเดตคำตอบแล้ว
VonC

@VonC หากดัชนีเป็นสถานที่ที่เตรียมการส่งมอบครั้งต่อไปทำไม "git ls-files -s" ถึงไม่ส่งคืนหลังจากทำคอมมิท จะต้องมีอะไรบางอย่างเกี่ยวกับดัชนีมากกว่าที่คุณตอบไว้
mljrg

@mljrg ไม่แน่ใจว่าฉันปฏิบัติตามคุณ: หลังจากการส่งมอบเวที (ซึ่งการเตรียมการส่งมอบ) จะว่างเปล่าเนื่องจากการกระทำได้กระทำเสร็จแล้วจะเป็นเช่นนั้นหรือไม่
VonC

62

การวิเคราะห์ทีละนิด

ฉันตัดสินใจที่จะทำการทดสอบเล็กน้อยเพื่อทำความเข้าใจกับรูปแบบและการวิจัยในบางสาขาโดยละเอียดยิ่งขึ้น

ผลการร้องเหมือนกันสำหรับรุ่น Git และ1.8.5.22.3

ฉันได้ทำเครื่องหมายคะแนนที่ฉันไม่แน่ใจ / ยังไม่พบTODO: โปรดกรอกคะแนนเหล่านั้น

ดังที่คนอื่น ๆ กล่าวถึงดัชนีจะถูกเก็บไว้ภายใต้.git/indexไม่ใช่วัตถุต้นไม้มาตรฐานและรูปแบบของมันคือไบนารีและจัดทำเอกสารไว้ที่: https://github.com/git/git/glo/blob/master/Documentation/technical/index-format txt

structs หลักที่กำหนดดัชนีอยู่ที่cache.hเนื่องจากดัชนีเป็นแคชสำหรับการสร้างการกระทำ

ติดตั้ง

เมื่อเราเริ่มพื้นที่เก็บข้อมูลทดสอบด้วย:

git init
echo a > b
git add b
tree --charset=ascii

.gitลักษณ์ไดเรกทอรีต้องการ:

.git/objects/
|-- 78
|   `-- 981922613b2afb6025042ff6bd878ac1994e85
|-- info
`-- pack

และถ้าเราได้รับเนื้อหาของวัตถุเดียว:

git cat-file -p 78981922613b2afb6025042ff6bd878ac1994e85

aเราได้รับ สิ่งนี้บ่งชี้ว่า:

  • indexชี้ไปที่เนื้อหาของแฟ้มตั้งแต่git add bสร้างวัตถุหยด
  • มันเก็บข้อมูลเมตาในไฟล์ดัชนีไม่ใช่วัตถุต้นไม้เนื่องจากมีเพียงวัตถุเดียว: blob (บนวัตถุ Git ปกติข้อมูลเมตาของ blob จะถูกเก็บไว้บนต้นไม้)

การวิเคราะห์ hd

ตอนนี้เรามาดูดัชนีของตัวเอง:

hd .git/index

ให้:

00000000  44 49 52 43 00 00 00 02  00 00 00 01 54 09 76 e6  |DIRC.... ....T.v.|
00000010  1d 81 6f c6 54 09 76 e6  1d 81 6f c6 00 00 08 05  |..o.T.v. ..o.....|
00000020  00 e4 2e 76 00 00 81 a4  00 00 03 e8 00 00 03 e8  |...v.... ........|
00000030  00 00 00 02 78 98 19 22  61 3b 2a fb 60 25 04 2f  |....x.." a;*.`%./|
00000040  f6 bd 87 8a c1 99 4e 85  00 01 62 00 ee 33 c0 3a  |......N. ..b..3.:|
00000050  be 41 4b 1f d7 1d 33 a9  da d4 93 9a 09 ab 49 94  |.AK...3. ......I.|
00000060

ต่อไปเราจะสรุป:

  | 0           | 4            | 8           | C              |
  |-------------|--------------|-------------|----------------|
0 | DIRC        | Version      | File count  | ctime       ...| 0
  | ...         | mtime                      | device         |
2 | inode       | mode         | UID         | GID            | 2
  | File size   | Entry SHA-1                              ...|
4 | ...                        | Flags       | Index SHA-1 ...| 4
  | ...                                                       |

อันดับแรกมาที่ส่วนหัวซึ่งกำหนดไว้ที่: struct cache_header :

  • 44 49 52 43: DIRC. สิ่งที่ต้องทำ: ทำไมถึงเป็นสิ่งจำเป็น

  • 00 00 00 02: version format: 2. รูปแบบดัชนีมีวิวัฒนาการตามเวลา ขณะนี้มีรุ่นไม่เกิน 4 รูปแบบของดัชนีไม่ควรมีปัญหาเมื่อทำงานร่วมกันระหว่างคอมพิวเตอร์ต่าง ๆ ใน GitHub เนื่องจากที่เก็บเปลือยไม่ได้จัดเก็บดัชนี: มันถูกสร้างขึ้นในเวลาโคลน

  • 00 00 00 01: นับของไฟล์บนดัชนี: bเพียงแค่หนึ่ง

ถัดไปเริ่มรายการของรายการดัชนีที่กำหนดโดยstruct cache_entry ที่นี่เรามีเพียงรายการเดียว มันมี:

  • พวงของข้อมูลเมตาไฟล์: 8 ไบต์ctime, 8 ไบต์mtime, แล้ว 4 ไบต์: อุปกรณ์, inode, โหมด, UID และ GID

    สังเกตว่า:

    • ctimeและmtimeเหมือนกัน ( 54 09 76 e6 1d 81 6f c6) ตามที่คาดไว้เนื่องจากเราไม่ได้แก้ไขไฟล์

      ไบต์แรกคือวินาทีตั้งแต่ EPOCH ใน hex:

      date --date="@$(printf "%x" "540976e6")"
      

      ให้:

      Fri Sep  5 10:40:06 CEST 2014
      

      ซึ่งเมื่อฉันทำตัวอย่างนี้

      4 ไบต์ที่สองคือนาโนวินาที

    • UID และ GID คือ00 00 03 e81000 ในฐานสิบหก: ค่าทั่วไปสำหรับการตั้งค่าผู้ใช้รายเดียว

    ข้อมูลเมตาทั้งหมดนี้ซึ่งส่วนใหญ่ไม่ได้อยู่ในวัตถุต้นไม้อนุญาตให้ Git ตรวจสอบว่าไฟล์มีการเปลี่ยนแปลงอย่างรวดเร็วโดยไม่ต้องเปรียบเทียบเนื้อหาทั้งหมดหรือไม่

  • ที่จุดเริ่มต้นของบรรทัด30:: 00 00 00 02ขนาดไฟล์: 2 ไบต์ ( aและ\nจากecho)

  • 78 98 19 22 ... c1 99 4e 85: 20 ไบต์ SHA-1 บนเนื้อหาก่อนหน้าของรายการ โปรดทราบว่าจากการทดลองของฉันกับการตั้งค่าสถานะสมมติที่ถูกต้องธงที่ตามมาจะไม่ถูกพิจารณาใน SHA-1 นี้

  • 2 ไบต์ธง: 00 01

    • 1 บิต: ถือว่าธงถูกต้อง การตรวจสอบของฉันระบุว่าการตั้งค่าสถานะไม่ดีชื่อนี้เป็นที่จัดgit update-index --assume-unchangedเก็บสถานะ: https://stackoverflow.com/a/28657085/895245

    • ขยายธง 1 บิต กำหนดว่าธงขยายมีอยู่หรือไม่ ต้องเป็น0เวอร์ชัน 2 ซึ่งไม่มีแฟล็กส่วนขยาย

    • แฟลกสถานะ 2 บิตที่ใช้ระหว่างการผสาน ขั้นตอนมีการบันทึกไว้ในman git-merge:

      • 0: ไฟล์ปกติไม่ได้อยู่ในความขัดแย้งผสาน
      • 1: ฐาน
      • 2: ของเราเอง
      • 3: พวกเขา

      ในช่วงความขัดแย้งที่ผสานทุกขั้นตอน 1-3 git checkout --oursจะถูกเก็บไว้ในดัชนีเพื่อให้การดำเนินการเช่น

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

    • ความยาว 12 บิตของเส้นทางที่จะตามมา0 01:: 1 ไบต์เท่านั้นตั้งแต่เส้นทางนั้นb

  • ธงขยาย 2 ไบต์ มีความหมายเฉพาะหากตั้งค่า "การขยายธง" บนธงพื้นฐาน ทำ.

  • 62(ASCII b): เส้นทางความยาวผันแปร ความยาวที่กำหนดไว้ในธงก่อนหน้านี้นี่เพียง 1 bไบต์

จากนั้นมาเป็น00: 1-8 ไบต์ของการเติมเต็มศูนย์เพื่อให้เส้นทางจะถูกยกเลิกด้วยค่า null และดัชนีจะสิ้นสุดในหลายไบต์ที่ 8 สิ่งนี้จะเกิดขึ้นก่อนหน้าดัชนีเวอร์ชัน 4 เท่านั้น

ไม่มีการใช้ส่วนขยาย Git รู้สิ่งนี้เพราะจะมีพื้นที่เหลือไม่เพียงพอในไฟล์สำหรับการตรวจสอบ

ในที่สุดก็มีการตรวจสอบ 20 ไบต์ee 33 c0 3a .. 09 ab 49 94มากกว่าเนื้อหาของดัชนี


1
น่าสนใจมาก. +1 ที่แสดงให้เห็นคำตอบของตัวเองเป็นอย่างดี ฉันสงสัยว่าผลลัพธ์เหล่านั้นจะเปลี่ยนไปด้วย Git 2.1+ ล่าสุดหรือไม่
VonC

3
@ NielsBom ใช่ว่าจะใช้งานได้ เมื่อทำการตีความโปรแกรมฉันชอบที่จะใช้สองวิธี: แรกประจักษ์เพื่อดูว่ามันสร้างผลลัพธ์และจากนั้นเพียงอ่านแหล่งที่มา ไม่เช่นนั้นอาจมีกรณีติดขอบซอร์สโค้ดซึ่งไม่ปรากฏในเอาต์พุตแบบง่าย แน่นอนฉันได้ดูโครงสร้างซอร์สเพื่อช่วยแนะนำฉันและสิ่งที่ต้องทำทุกอย่างสามารถแก้ไขการอ่านของฉันได้ว่าโครงสร้างเหล่านั้นถูกจัดการอย่างไรซึ่งเป็นส่วนที่ยาก
Ciro Santilli 法轮功冠状病六四事件法轮功

1
@CiroSantilli 六四 If 法轮功纳米比亚威视: ถ้าฉันแก้ไขดัชนีใน hex editor และอัปเดตมันคือ 20 byte checksum checksum มีคำสั่งให้อัพเดท sha1 ซึ่งถูกเก็บไว้ในวัตถุอื่นหรือไม่? (คอมไพล์บ่นลายเซ็น sha1 ของดัชนีเสียหาย) ข้อมูลดัชนีจะถูกจัดเก็บในลักษณะที่แตกต่างไปจากเดิมอย่างสิ้นเชิงเมื่อส่งผ่านคำขอพุช
2284570

1
@CiroSantilli 六四事件法轮功纳米比亚威视: จุดประสงค์ด้านความปลอดภัย เพียงแค่มองหาการโจมตีไฟล์ภาพแรสเตอร์ที่รู้จักกันดีที่ใช้กับฐานข้อมูล / วัตถุคอมไพล์ (แน่นอนฉันรู้ว่าการนำไปใช้ส่วนใหญ่ดูแลมุมมองนั้นเมื่อเร็ว ๆ นี้ แต่อาจไม่ใช่ทั้งหมด)  ดังนั้นฉันจึงค้นหาโครงสร้างข้อมูลไบนารีที่บอกความยาวของอาร์เรย์โดยเฉพาะ (เกี่ยวกับบัฟเฟอร์ข้อความดูเหมือนว่าการยกเลิก null เป็นบรรทัดฐานสำหรับบอกจำนวนแถว)
user2284570

1
เกี่ยวกับgit addต่อของคุณTODO: คุณถูกต้อง หากคุณมีรายการดัชนีสูงเวที (ความขัดแย้ง) ในเส้นทางที่กำหนดเมื่อคุณเส้นทางที่ทุกรายการดัชนีสูงขั้นตอนจะถูกลบและสำเนาไดเรกทอรีการทำงานจะถูกเพิ่มในขั้นตอนgit add 0(แก้ไขข้อขัดแย้ง)
Edward Thomson

11

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

หากต้องการดูสิ่งที่อยู่ภายในดัชนีให้ใช้คำสั่ง:

git status

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

คุณสามารถอ่านนี้ การค้นหาของ Google ส่งลิงค์จำนวนมากซึ่งน่าจะเพียงพอสำหรับตัวเอง


7
git statusไม่ได้แสดงรายการไฟล์ทั้งหมดจากดัชนี จะแสดงเฉพาะไฟล์ที่แตกต่างกันระหว่างดัชนีและไดเรกทอรี git ls-filesหากต้องการดูไฟล์ทั้งหมดในดัชนีที่คุณจำเป็นต้องใช้
Akash Agrawal

1
@AkashAgrawal git status ทำในรายการดัชนีไฟล์จริงโดยไม่คำนึงว่าจะแตกต่างกันระหว่างดัชนีและ workdir หรือไม่
คิวเมนตัส

3
ใช่มันแสดงรายการไฟล์ดัชนีบางส่วน แต่ไม่แสดงทุกสิ่งที่อยู่ภายในดัชนีซึ่งเป็นสิ่งที่คำสั่งของเขาในคำตอบของเขาพูด เหมือนกับว่ามีลูกบอลสีเขียว 2 ลูกและลูกบอลสีแดง 3 ลูกอยู่ในกล่อง หากต้องการดูสิ่งที่อยู่ในกล่องให้ดึงลูกบอลสีเขียว 2 ลูก สิ่งที่ Akash กล่าวนั้นแม่นยำที่สุดในการดูไฟล์ทั้งหมดในดัชนีให้ใช้ git ls-files
dave4jr

3
จริง git statusแสดงรายการไฟล์ที่อยู่ในดัชนีใช่ แต่ไม่ได้แสดงรายการไฟล์ทั้งหมดในดัชนี การอธิบายวิธีการgit status ใช้งานจริงจะเป็นคำตอบที่เป็นประโยชน์สำหรับคำถามบางข้อแม้ว่าอาจไม่ใช่คำถามนี้
Edward Thomson

1
git statusแสดงสถานะของแผนผังการทำงาน (ความแตกต่างระหว่างแผนผังการทำงานและดัชนี) ไม่แสดงดัชนีจริง ๆ git-scm.com/docs/git-status
wisbucky

1

นี่คือสิ่งที่คุณต้องการอย่างแท้จริงให้ใช้คำสั่งนี้

$ binwalk index

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1717          0x6B5           Unix path: /company/user/user/delete.php
1813          0x715           Unix path: /company/user/user/get.php
1909          0x775           Unix path: /company/user/user/post.php
2005          0x7D5           Unix path: /company/user/user/put.php
3373          0xD2D           Unix path: /urban-airship/channel/channel/post.php
3789          0xECD           Unix path: /urban-airship/named-user/named-user/post.php
3901          0xF3D           Unix path: /user/categories/categories/delete.php
4005          0xFA5           Unix path: /user/categories/categories/get.php
4109          0x100D          Unix path: /user/categories/categories/put.php
4309          0x10D5          Unix path: /user/favorites/favorites/delete.php

0

ดัชนี Git เป็นไฟล์ไบนารี (โดยทั่วไปเก็บไว้ใน.git/index) ที่มีรายการเรียงลำดับของชื่อเส้นทางแต่ละคนมีสิทธิ์และ SHA1 ของวัตถุหยด;

git ls-filesสามารถแสดงเนื้อหาของดัชนี โปรดทราบคำที่index, stageและcacheเป็นสิ่งเดียวกันใน Git: พวกเขาจะใช้แทนกันได้

ป้อนคำอธิบายรูปภาพที่นี่

ดัชนี Git หรือแคช Git มีคุณสมบัติที่สำคัญ 3 ประการ:

  1. ดัชนีมีข้อมูลทั้งหมดที่จำเป็นในการสร้างวัตถุต้นไม้เดียว (ที่กำหนดโดยไม่ซ้ำกัน)
  2. ดัชนีช่วยให้การเปรียบเทียบอย่างรวดเร็วระหว่างวัตถุต้นไม้ที่กำหนดและต้นไม้ทำงาน
  3. มันสามารถแสดงข้อมูลเกี่ยวกับการผสานความขัดแย้งระหว่างวัตถุต้นไม้ที่แตกต่างกันได้ทำให้ชื่อเส้นทางแต่ละรายการสามารถเชื่อมโยงกับข้อมูลที่เพียงพอเกี่ยวกับต้นไม้ที่เกี่ยวข้องซึ่งคุณสามารถสร้างการผสานสามทางระหว่างวัตถุเหล่านั้น

ที่มา :

  1. https://mincong.io/2018/04/28/git-index/
  2. https://medium.com/hackernoon/understanding-git-index-4821a0765cf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.