คุณสามารถค้นหาสิ่งที่ Git ทำกับไฟล์โดยดูว่ามันทำอะไรเมื่อคุณเพิ่มลงในดัชนี ดัชนีเป็นเหมือนการกระทำล่วงหน้า ด้วยความมุ่งมั่นของดัชนีคุณสามารถใช้git checkout
เพื่อนำทุกอย่างที่อยู่ในดัชนีกลับสู่ไดเรกทอรีการทำงาน ดังนั้น Git จะทำอย่างไรเมื่อคุณเพิ่มลิงก์สัญลักษณ์ไปยังดัชนี
หากต้องการค้นหาก่อนอื่นให้สร้างลิงก์สัญลักษณ์:
$ ln -s /path/referenced/by/symlink symlink
Git ยังไม่รู้เกี่ยวกับไฟล์นี้ git ls-files
ช่วยให้คุณตรวจสอบดัชนีของคุณ ( -s
พิมพ์stat
ออกเหมือน):
$ git ls-files -s ./symlink
[nothing]
ตอนนี้เพิ่มเนื้อหาของลิงค์สัญลักษณ์ไปยังที่เก็บอ็อบเจ็กต์ Git โดยเพิ่มลงในดัชนี เมื่อคุณเพิ่มไฟล์ในดัชนี Git จะเก็บเนื้อหาไว้ในที่เก็บวัตถุ Git
$ git add ./symlink
ดังนั้นสิ่งที่เพิ่มเข้ามา?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink
แฮชคือการอ้างอิงไปยังวัตถุที่บรรจุที่สร้างขึ้นในที่เก็บวัตถุ Git คุณสามารถตรวจสอบวัตถุนี้ถ้าคุณดูใน.git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c
รากของพื้นที่เก็บข้อมูลของคุณ นี่คือไฟล์ที่ Git เก็บในที่เก็บซึ่งคุณสามารถเช็คเอาต์ได้ในภายหลัง หากคุณตรวจสอบไฟล์นี้คุณจะเห็นว่าไฟล์มีขนาดเล็กมาก มันไม่ได้จัดเก็บเนื้อหาของไฟล์ที่เชื่อมโยง
(หมายเหตุ120000
เป็นโหมดที่แสดงในls-files
เอาท์พุทมันจะคล้าย100644
กับไฟล์ปกติ)
แต่ Git จะทำอะไรกับวัตถุนี้เมื่อคุณตรวจสอบจากที่เก็บและในระบบไฟล์ของคุณ? มันขึ้นอยู่กับการcore.symlinks
กำหนดค่า จากman git-config
:
core.symlinks
หากเป็นเท็จลิงก์สัญลักษณ์จะถูกตรวจสอบว่าเป็นไฟล์ธรรมดาขนาดเล็กที่มีข้อความลิงค์
ดังนั้นด้วยลิงก์สัญลักษณ์ในที่เก็บเมื่อทำการเช็คเอาต์คุณจะได้รับไฟล์ข้อความที่มีการอ้างอิงถึงพา ธ ระบบไฟล์แบบเต็มหรือลิงก์สัญลักษณ์ที่เหมาะสมขึ้นอยู่กับค่าของการcore.symlinks
กำหนดค่า
ไม่ว่าจะด้วยวิธีใดข้อมูลที่อ้างอิงโดย symlink จะไม่ถูกเก็บไว้ในที่เก็บ
.gitignore
เห็น symlink เป็นไฟล์ไม่ใช่โฟลเดอร์