Git: คัดลอกไฟล์ทั้งหมดในไดเรกทอรีจากสาขาอื่น


189

ฉันจะคัดลอกไฟล์ทั้งหมดในไดเรกทอรีจากสาขาอื่นได้อย่างไร ฉันสามารถแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีนั้นได้โดยทำ

git ls-tree master:dirname

ฉันสามารถคัดลอกไฟล์ทั้งหมดทีละไฟล์โดยทำ

git checkout master -- dirname/filename

อย่างไรก็ตามการใช้อักขระตัวแทนนั้นเป็นความล้มเหลวทั้งหมด มันไม่ทำอะไรเลย:

git checkout master -- dirname/*.png

แม้ว่าฉันคิดว่าฉันสามารถใช้สคริปต์ทุบตีเพื่อทำสิ่งนั้นได้ต้องมีวิธีที่ง่ายกว่าใช่มั้ย

คำตอบ:


289

เนื่องจากคุณไม่ได้พยายามย้ายไฟล์ไปมาในต้นไม้คุณควรจะสามารถเช็คเอาต์ไดเรกทอรี:

git checkout master -- dirname

2
จะเป็นอย่างไรถ้าฉันต้องการเก็บข้อความคอมมิชชันสำหรับไฟล์ที่คัดลอกมา
totels

2
@totels การพูดอย่างเคร่งครัดไม่มีการส่งข้อความที่เกี่ยวข้องกับไฟล์; ข้อความคอมมิชชันที่เกี่ยวข้องกับการยอมรับวัตถุเอง นี่คือสิ่งที่ฉันคาดเดาที่คุณต้องการ: git checkout master -- dirname; git add dirname; git commit -c $COMMIT_SHA1 --reset-author;ที่$COMMIT_SHA1อาจจะชอบbranch_aและจะกระทำวัตถุซึ่งมีข้อความกระทำที่คุณต้องการ ฉันไม่ทราบทันทีว่าจะกำหนดโปรแกรมด้วยความมุ่งมั่นอย่างไรเมื่อมีการเปลี่ยนแปลงล่าสุดdirname
Alexander Bird

1
นี่เป็นผลข้างเคียงที่แปลกมาก เป็นชุดdirnameมากกว่า แต่ก็ยังสำเนาไฟล์ใด ๆ ที่อยู่ใน.gitignoreของmasterสาขา ความคิดใด ๆ ที่เป็นสาเหตุ?
Milimetric

4
ผลข้างเคียงอื่นฉันคิดว่าถ้าสาขาปัจจุบันมีไฟล์เพิ่มเติมที่ไม่ได้อยู่ในสาขาที่คุณกำลังเช็คเอาต์จาก (ในโฟลเดอร์เป้าหมายที่กำหนด) มันจะรวมเข้าด้วยกัน - บางทีนี่อาจเป็นแค่บรรพบุรุษเดียวใช่ไหม ฉันไม่แน่ใจในเงื่อนไขอย่างแน่นอน แต่ถ้าคุณมี 20 ไฟล์ในสาขา A และ 20 ไฟล์ในสาขา B และมีเพียง 10 ไฟล์เท่านั้นที่มีชื่อไฟล์เดียวกันคุณจะจบลงด้วย 30 ไฟล์ (อย่างน้อยในกรณีของฉันที่สาขา A เป็นบรรพบุรุษของสาขา B)
codercake

@totels cherry-pickตรวจสอบคำสั่งคอมไพล์ มันใช้กระทำจากสาขาอื่น แต่เฉพาะไฟล์ที่มีการเปลี่ยนแปลงในการกระทำที่คุณต้องการ
cs01

18

หากไม่มีช่องว่างในพา ธ และคุณสนใจเช่นเดียวกับในไฟล์ของส่วนขยายเฉพาะคุณสามารถใช้

git checkout otherBranch -- $(git ls-tree --name-only -r otherBranch | egrep '*.java')

4
น่าเสียดายที่คอมไพล์ไม่รองรับฟังก์ชั่นนี้โดยตรง เหมือนกับ OP ฉันคิดว่ามันจะเป็นอย่างไรgit checkout master -- *.c
Gregory Kuhn

1
คำตอบนี้ช่วยฉันตอบ "ฉันจะเช็คเอาท์ไฟล์ของรูปแบบที่กำหนดจากสาขาอื่นไปยังสาขาที่ทำงานปัจจุบันของฉันได้อย่างไร"
usr-local-ΕΨΗΕΛΩΝ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.