นี่คือคำจำกัดความของพื้นที่เก็บข้อมูลเปลือยจากgitglossary :
โดยปกติแล้วพื้นที่เก็บข้อมูลเปล่าจะเป็นไดเรกทอรีที่มีชื่ออย่างเหมาะสมพร้อมด้วยคำต่อท้าย. git ที่ไม่มีสำเนาของไฟล์ใด ๆ ภายใต้การควบคุมการแก้ไข นั่นคือไฟล์การควบคุมและการควบคุม Git ทั้งหมดที่ปกติจะปรากฏในไดเรกทอรีย่อย. git ที่ซ่อนอยู่จะปรากฏในไดเรกทอรี repository.git โดยตรงแทนและไม่มีไฟล์อื่น ๆ โดยปกติผู้เผยแพร่ที่เก็บสาธารณะจะทำให้ที่เก็บข้อมูลเปลือยพร้อมใช้งาน
ฉันมาที่นี่เพราะฉันกำลังเล่นกับ "ที่เก็บในเครื่อง" และต้องการที่จะทำสิ่งที่ฉันต้องการราวกับว่ามันเป็นที่เก็บระยะไกล ฉันแค่เล่นไปรอบ ๆ พยายามเรียนรู้เกี่ยวกับคอมไพล์ ฉันจะสมมติว่านี่เป็นสถานการณ์สำหรับผู้ที่ต้องการอ่านคำตอบนี้
ฉันจะรักสำหรับความคิดเห็นของผู้เชี่ยวชาญหรือเฉพาะบางเคาน์เตอร์ตัวอย่าง แต่มันดูเหมือนว่า (หลังการค้นหาผ่านรหัสที่มาบางคอมไพล์ที่ผมพบว่า) เพียงแค่ไปยังแฟ้ม.git/config
และการตั้งค่าหลักแอตทริบิวต์เปลือยเพื่อความจริง , คอมไพล์จะช่วยให้คุณทำสิ่งที่ คุณต้องการที่จะทำกับพื้นที่เก็บข้อมูลจากระยะไกล คือบรรทัดต่อไปนี้ควรมีอยู่.git/config
:
[core]
...
bare = true
...
(นี่เป็นคำสั่งคร่าวๆ git config --bool core.bare true
จะทำโดยประมาณซึ่งอาจแนะนำให้จัดการกับสถานการณ์ที่ซับซ้อนมากขึ้น)
เหตุผลของฉันสำหรับการอ้างสิทธิ์นี้คือในซอร์สโค้ดคอมไพล์ดูเหมือนจะมีสองวิธีที่แตกต่างกันในการทดสอบว่า repo นั้นว่างเปล่าหรือไม่ is_bare_repository_cfg
หนึ่งคือการตรวจสอบตัวแปรทั่วโลก ซึ่งถูกตั้งค่าในระหว่างขั้นตอนการตั้งค่าบางอย่างของการดำเนินการและสะท้อนถึงค่าที่พบใน.git/config
ไฟล์ อื่น ๆ is_bare_repository()
ที่เป็นฟังก์ชั่น นี่คือนิยามของฟังก์ชันนี้:
int is_bare_repository(void)
{
/* if core.bare is not 'false', let's see if there is a work tree */
return is_bare_repository_cfg && !get_git_work_tree();
}
ฉันไม่ได้เวลาหรือความเชี่ยวชาญในการพูดแบบนี้ด้วยความมั่นใจแน่นอน แต่เท่าที่ผมสามารถบอกได้ว่าคุณมีbare
ชุดแอตทริบิวต์true
ใน.git/config
นี้ควรกลับ1
นี้ควรกลับฟังก์ชันที่เหลืออาจเป็นไปได้สำหรับสถานการณ์ต่อไปนี้:
- core.bare ไม่ได้ถูกกำหนด (เช่นไม่จริงหรือเท็จ)
- ไม่มี worktree (เช่นไดเรกทอรีย่อย. git เป็นไดเรกทอรีหลัก)
ฉันจะทดลองกับมันเมื่อฉันสามารถทำได้ในภายหลัง แต่ดูเหมือนว่าจะระบุว่าการตั้งค่าcore.bare = trueเทียบเท่ากับการลบ core.bareออกจากไฟล์กำหนดค่าและตั้งค่าไดเรกทอรีอย่างถูกต้อง
การตั้งค่าcore.bare = trueจะช่วยให้คุณสามารถผลักดันได้ แต่ฉันไม่แน่ใจว่าการมีไฟล์โครงการจะทำให้การดำเนินการอื่น ๆ ผิดไปหรือไม่ เป็นเรื่องที่น่าสนใจและฉันคิดว่าควรให้คำแนะนำในการผลักดันไปยังที่เก็บและดูว่าเกิดอะไรขึ้นในพื้นที่ (เช่นเรียกใช้git status
และทำให้เข้าใจถึงผลลัพธ์)
mv repo/.git repo.git; rm -rf repo