หากฉัน tar โฟลเดอร์ที่เป็นที่เก็บ git ฉันสามารถทำได้โดยไม่รวม.git
ไฟล์ที่เกี่ยวข้องหรือไม่ ถ้าไม่ฉันจะดำเนินการผ่านคำสั่งได้อย่างไร
หากฉัน tar โฟลเดอร์ที่เป็นที่เก็บ git ฉันสามารถทำได้โดยไม่รวม.git
ไฟล์ที่เกี่ยวข้องหรือไม่ ถ้าไม่ฉันจะดำเนินการผ่านคำสั่งได้อย่างไร
คำตอบ:
git help archive
มีลักษณะเป็นครั้งแรกที่ archive
เป็นคำสั่ง git ที่อนุญาตให้สร้างไฟล์เก็บถาวรที่มีไฟล์ที่ติดตามได้เท่านั้น อาจเป็นสิ่งที่คุณกำลังมองหา ตัวอย่างหนึ่งที่ระบุไว้ในตอนท้ายของหน้าคน:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
คำตอบที่ง่ายที่สุด: --exclude-vcs
เพิ่ม สิ่งนี้แยกไดเรกทอรีระบบควบคุมเวอร์ชันทั้งหมด
ส่วนตัวผมใช้
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
ดังนั้นสิ่งที่คุณต้องทำคือเพิ่ม--exclude-vcs
ตอนท้ายของคำสั่ง
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
หากคุณต้องการเก็บที่จะรวมไฟล์ที่ติดตามโดยคอมไพล์ แต่ไม่เก็บคอมไพล์ตัวเองหรือไฟล์ที่สร้างหรือไม่ได้ติดตามอย่างอื่นใด ๆ แล้วการใช้งานgit archive
หากคุณต้องการแยกเฉพาะ.git
แต่รวมทุกอย่างอื่นภายใต้ Linux หรือ FreeBSD หรือ OSX หรือ Cygwin tar มีตัวเลือกง่าย ๆ ในการแยกไดเรกทอรี:
tar -c --exclude .git -f - foo | gzip >foo.tgz
ด้วย GNU tar (เช่นภายใต้ Linux หรือ Cygwin) คุณสามารถย่อให้สั้นลงtar czf foo.tgz --exclude .git foo
ได้
วิธี POSIX pax
ของการสร้างคลังข้อมูลคือ
pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
git
compiles ในระบบใด ๆ ที่tar
ไม่สามารถใช้งาน? :-)
tar
ไม่มี--exclude
ตัวเลือกเช่น OpenBSD (ซึ่งยอมรับs
ตัวเลือกของ pax ซ้ำกันแต่นั่นไม่ใช่ส่วนขยายไวยากรณ์คำสั่ง tar ทั่วไป)
ขอบคุณคำตอบที่ฉันได้จากหนึ่งในคำถามของฉันฉันหาวิธีแก้ไขปัญหาอื่น ดังนั้นเพื่อความสมบูรณ์นี่คือทางออกสำหรับการใช้งานfind
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
และหากคุณต้องการแยก.git
โฟลเดอร์ที่เป็นไปได้ภายใน (ย่อย) + โฟลเดอร์:
find . -path '*/.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
ยุคสุดท้ายสามารถทำได้ผ่าน:
find . -type d -name '.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
ค่อนข้างมีประโยชน์ถ้าคุณสามารถใช้เทคนิคการกรองอื่น ๆfind
เช่นวันที่แก้ไขการอนุญาต ...
(ตามชื่อไฟล์จึงมักจะดีขึ้นจะถือว่ามิฉะนั้นคุณจะต้องใช้ null ไบต์เป็นตัวคั่นซึ่งอาจหมายถึง-print0
สำหรับfind
และ--null
สำหรับtar
ถ้าได้รับการสนับสนุน.)