ฉันมีโครงการที่มีคอมไพล์และฉันต้องการโคลนหรือดึงไดเรกทอรีเฉพาะเช่น myproject / javascript เช่นเดียวกับการโค่นล้ม
ทำการเปลี่ยนแปลงกระทำและผลักดันอีกครั้ง
มันเป็นไปได้?
ฉันมีโครงการที่มีคอมไพล์และฉันต้องการโคลนหรือดึงไดเรกทอรีเฉพาะเช่น myproject / javascript เช่นเดียวกับการโค่นล้ม
ทำการเปลี่ยนแปลงกระทำและผลักดันอีกครั้ง
มันเป็นไปได้?
คำตอบ:
git fetch
git checkout HEAD path/to/your/dir/or/file
อยู่ที่ไหน " path/...
" ใน (3) เริ่มต้นที่ไดเรกทอรีเพียงด้านล่างราก repo ที่มีของคุณ " .../file
"
โปรดทราบว่าแทนที่จะใช้ "HEAD" อาจใช้รหัสแฮชของการคอมมิทเฉพาะและจากนั้นคุณจะได้รับการแก้ไข (ไฟล์) หรือการแก้ไข (dir) เฉพาะสำหรับคอมมิทนั้น
--
ไม่จำเป็นว่า มันบังคับให้บิตหลังจากที่มันถูกตีความว่าเป็นเส้นทาง ดังนั้นใช่ถ้าคุณมีไฟล์ที่มีชื่อ--help
ที่คุณต้องการเช็คเอาต์จะต้องนำหน้าด้วยเครื่องหมายขีดคั่นเหล่านี้:git checkout HEAD -- --help
ในไดเรกทอรีว่าง:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetch
หรือcheckout
คำสั่งใด ๆเราสามารถทำการร้องขอการดึงหลังจากremote add
คำสั่งเพื่อรับสาขาหลักทั้งหมด
หลังจากหาคำตอบไม่พบเลิกพยายามอีกครั้งในที่สุดฉันก็พบวิธีแก้ปัญหานี้ในหัวข้อ SO อื่น:
วิธีการ git-pull ทั้งหมดยกเว้นโฟลเดอร์เดียว
หากต้องการคัดลอกวางมีอะไร:
git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master
ในการทำสิ่งที่ OP ต้องการ (ทำงานเพียงหนึ่ง dir เท่านั้น) เพียงเพิ่ม dir .git/info/sparse-checkout
นั้นเมื่อทำตามขั้นตอนข้างต้น
ขอบคุณมาก @cforbish!
master
โดยไม่คำนึงถึงสาขาที่ได้รับการตรวจสอบออกคอมไพล์จะคิดว่าคุณจะอยู่ใน เพียงให้แน่ใจว่าคุณทำgit branch --set-upstream-to=origin/<branch>
เพื่อดึงอย่างถูกต้อง
มันเป็นไปไม่ได้. คุณต้องดึงที่เก็บทั้งหมดหรือไม่ทำอะไรเลย
บางทีคำสั่งนี้อาจมีประโยชน์:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Et voilà"
หากคุณต้องการรับการเปลี่ยนแปลงล่าสุดในไดเรกทอรีโดยไม่ต้องป้อนคุณสามารถทำได้:
$ git -C <Path to directory> pull
git clone --filter
จาก Git 2.19
ตัวเลือกนี้จะข้ามการดึงข้อมูลวัตถุที่ไม่จำเป็นออกจากเซิร์ฟเวอร์
ฉันเขียนคำตอบโดยละเอียดเพื่ออธิบายสถานะการสนับสนุนปัจจุบันที่: ฉันจะโคลนไดเรกทอรีย่อยของที่เก็บ Git ได้อย่างไร
มีความเป็นไปได้สูงที่สิ่งใดก็ตามที่ถูกนำไปใช้git clone
ในพื้นที่นั้นจะมีgit pull
แอนะล็อก
พยายามและทดสอบงานนี้!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
หวังว่านี่จะเป็นประโยชน์!
บางครั้งคุณเพียงแค่ต้องการดูสำเนาของไฟล์ก่อนหน้านี้โดยไม่ต้องมีอุปสรรคในการผ่านส่วนต่าง
ในกรณีเช่นนี้มันเป็นเรื่องง่ายที่จะสร้างโคลนของที่เก็บและชำระเงินการกระทำที่คุณสนใจและดูที่ไดเรกทอรีย่อยในที่เก็บโคลน เนื่องจากทุกอย่างเป็นแบบโลคัลคุณสามารถลบโคลนนี้เมื่อเสร็จสิ้น
สำหรับทุกสิ่งที่ต่อสู้กับเส้นทางไฟล์เชิงทฤษฎีและตัวอย่างเช่นฉันนี่เป็นตัวอย่างโลกแห่งความจริง: Microsoft เสนอเอกสารและตัวอย่างของพวกเขาในฮับ git โชคไม่ดีที่พวกเขารวบรวมไฟล์ตัวอย่างทั้งหมดสำหรับหัวข้อจำนวนมากในที่เก็บนี้:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
ฉันสนใจไฟล์ js Microsoft Dynamics ในพา ธ เท่านั้น
msdn-code-gallery-community-s-z/Sdk.Soap.js/
ดังนั้นฉันทำต่อไปนี้
สร้าง
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
ไฟล์ในโฟลเดอร์ที่เก็บของฉันบนดิสก์
git sparse-checkout init
ในไดเรกทอรีนั้นโดยใช้ cmd บน windows
เนื้อหาไฟล์ของ
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
คือ
Sdk.Soap.js/*
ในที่สุดก็ทำ
git pull origin master