ฉันมี 2 ไดเรกทอรีในที่เก็บ GitHub ของฉัน ฉันต้องการลบหนึ่งในนั้น ฉันจะทำอย่างนั้นได้อย่างไรโดยไม่ลบและสร้างพื้นที่เก็บข้อมูลทั้งหมดขึ้นใหม่?
ฉันมี 2 ไดเรกทอรีในที่เก็บ GitHub ของฉัน ฉันต้องการลบหนึ่งในนั้น ฉันจะทำอย่างนั้นได้อย่างไรโดยไม่ลบและสร้างพื้นที่เก็บข้อมูลทั้งหมดขึ้นใหม่?
คำตอบ:
คุณสามารถชำระเงิน 'หลัก' ด้วยทั้งสองไดเรกทอรี
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
ดังที่ได้กล่าวไว้ในความคิดเห็นสิ่งที่คุณมักจะต้องการทำคือลบไดเรกทอรีนี้จาก git แต่ไม่ได้ลบมันออกจากระบบแฟ้ม (ในเครื่อง)
ในกรณีที่ใช้:
git rm -r --cached myFolder
git rm -r myFolder
ใช้งานได้ แต่ก็ลบทุกอย่างออกจากไดเรกทอรี "MyFolder" ต้องเปลี่ยนทุกสิ่งในไดเรกทอรี "MyFolder" แล้วส่ง
git rm -r --cached myFolder
git rm -r --cached directory/
ลบออกจากการติดตามคอมไพล์เท่านั้น แต่โครงสร้างที่เก็บยังคงอยู่
ขั้นตอนในการลบไดเรกทอรี
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
ขั้นตอนในการข้ามโฟลเดอร์นั้นในครั้งถัดไปที่คอมมิต
ในการเพิกเฉยต่อโฟลเดอร์นั้นจากการคอมมิทครั้งต่อไปให้สร้างหนึ่งไฟล์ในรูทชื่อ. gitignore และใส่ชื่อโฟลเดอร์นั้นลงไป คุณสามารถใส่ได้มากเท่าที่คุณต้องการ
ไฟล์. gitignoreจะมีลักษณะเช่นนี้
/FolderName
ถ้าด้วยเหตุผลบางอย่างสิ่งที่ karmakaze กล่าวไม่ทำงานคุณสามารถลองลบไดเรกทอรีที่คุณต้องการใช้หรือกับเบราว์เซอร์ระบบไฟล์ของคุณ (เช่นใน Windows File Explorer) หลังจากลบไดเรกทอรีการออกคำสั่ง:
git add -A
แล้วแล้ว
git commit -m 'deleting directory'
git push origin master
คุณสามารถลองสิ่งนี้:
git rm -rf <directory_name>
มันจะบังคับให้ลบไดเรกทอรี
หากคุณลบไฟล์ในไดเรกทอรี (พร้อมกับgit rm
คำตอบอื่น ๆ อธิบาย) แล้วไดเรกทอรีไม่อยู่อีกต่อไปเท่าที่เกี่ยวข้องกับคอมไพล์ คุณไม่สามารถยอมรับไดเรกทอรีว่างเปล่าและไม่สามารถลบออกได้
ซึ่งแตกต่างจากการโค่นล้มที่คุณต้องชัดเจนsvn rm emptyfolder/
และเป็นเหตุให้man
หน้า git อธิบายตัวเองว่า "ตัวติดตามเนื้อหาโง่"
คำตอบเกี่ยวกับ"ฉันจะเพิ่มไดเรกทอรีว่างไปยังที่เก็บ git"ลิงก์ไปยังคำถามที่พบบ่อยในเรื่องนี้ได้อย่างไร :
ขณะนี้การออกแบบดัชนี git (พื้นที่การจัดเตรียม) อนุญาตให้แสดงเฉพาะไฟล์เท่านั้นและไม่มีใครมีความสามารถเพียงพอที่จะทำการเปลี่ยนแปลงเพื่ออนุญาตให้ไดเรกทอรีที่ว่างเปล่าได้ใส่ใจเพียงพอเกี่ยวกับสถานการณ์นี้เพื่อแก้ไข
ไดเรกทอรีจะถูกเพิ่มโดยอัตโนมัติเมื่อเพิ่มไฟล์ภายใน กล่าวคือไม่ต้องเพิ่มไดเรกทอรีในที่เก็บและไม่ได้ติดตามด้วยตนเอง
คุณสามารถพูดว่า "
git add <dir>
" แล้วมันจะเพิ่มไฟล์เข้าไปหากคุณต้องการไดเรกทอรีที่มีอยู่จริงในจุดชำระเงินคุณควรสร้างไฟล์ไว้ในนั้น . gitignore ทำงานได้ดีสำหรับวัตถุประสงค์นี้ คุณสามารถปล่อยว่างไว้หรือเติมชื่อไฟล์ที่คุณคาดว่าจะปรากฏในไดเรกทอรี
ฉันได้กำหนดโฟลเดอร์ไว้แล้วและต้องการลบไดเรกทอรีในประวัติด้วย
ฉันทำต่อไปนี้:
เพิ่มโฟลเดอร์ไปที่.gitignore
:
echo Folder_Name/ >> .gitignore
ลบออกจากการกระทำทั้งหมด:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
ลบการอ้างอิงจากการกระทำเดิม:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
ตรวจสอบให้แน่ใจว่ามีการลบการอ้างอิงเก่าทั้งหมดอย่างสมบูรณ์
rm -Rf .git/logs .git/refs/original
ทำการรวบรวมขยะ
git gc --prune=all --aggressive
ผลักดันให้คุณเปลี่ยนแปลงไปยังที่เก็บออนไลน์:
git push
คุณทำเสร็จแล้ว
แต่คุณสามารถทำสิ่งต่อไปนี้เพื่อผลักดันการเปลี่ยนแปลงทั้งหมดไปยังสาขาทั้งหมดด้วย: แต่ระวังด้วยคำสั่งนี้!
git push origin --all --force
git push origin --tags --force
หลังจากนั้นโฟลเดอร์จะถูกลบออกจากคอมไพล์ แต่ไม่ถูกลบออกจากดิสก์ภายในเครื่อง
สำหรับการลบโฟลเดอร์ Empty
ฉันต้องการลบไดเรกทอรีว่างเปล่า (โฟลเดอร์) ฉันสร้างขึ้น git ไม่สามารถลบมันได้หลังจากการวิจัยบางอย่างฉันได้เรียนรู้ Git ไม่ได้ติดตามไดเรกทอรีว่างเปล่า หากคุณมีไดเรกทอรีว่างในแผนผังการทำงานของคุณคุณควรลบออกด้วย
rm -r folderName
ไม่จำเป็นต้องมีส่วนเกี่ยวข้องกับ Git
ไปที่ git Directory ของคุณจากนั้นพิมพ์คำสั่งต่อไปนี้: rm -rf < ชื่อไดเรกทอรี >
หลังจากลบไดเรกทอรีกระทำการเปลี่ยนแปลงโดย: git กระทำ -m "Your Commit Message"
จากนั้นเพียงแค่ผลักดันการเปลี่ยนแปลงในไดเรกทอรี GIT ระยะไกล: git push origin < ชื่อสาขา >
คุณสามารถลบโฟลเดอร์ในเครื่องแล้วกดดังนี้:
git rm -r folder_name
git commit -m "your commit"
git push origin master
ฉันมักจะใช้git add --all
เพื่อลบไฟล์ / โฟลเดอร์จากที่เก็บข้อมูลระยะไกล
rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master
master
สามารถถูกแทนที่ด้วยสาขาอื่น ๆ ของพื้นที่เก็บข้อมูล
คุณสามารถใช้แผนผังแหล่งที่มาของ Attlasian (Windows) ( https://www.atlassian.com/software/sourcetree/overview ) เพียงแค่เลือกไฟล์จากต้นไม้และกดปุ่ม "ลบ" ที่ด้านบน ไฟล์จะถูกลบออกจากพื้นที่เก็บข้อมูลในท้องถิ่นและฐานข้อมูล Git ท้องถิ่น จากนั้นคอมมิทแล้วกด
หนึ่งในเพื่อนร่วมงานของฉันแนะนำBFG Repo-Cleanerซึ่งฉันคิดว่าทรงพลัง ไม่เพียง แต่ลบข้อมูลที่ไม่ต้องการ แต่ยังล้างที่เก็บของคุณจากข้อมูลการกระทำที่เกี่ยวข้อง
ในการเพิ่มไดเรกทอรีใหม่:
mkdir <YOUR-DIRECTORY>
แต่ตอนนี้ Git ไม่ได้รับการยอมรับจากไดเรกทอรีใหม่นี้เพราะ Git ติดตามไฟล์ไม่ใช่ไดเรกทอรี DIRECTORY
git status
Git จะไม่รับรู้ถึงการเปลี่ยนแปลงที่เราทำดังนั้นเราจึงเพิ่ม.keep
ไฟล์ที่ซ่อนไว้เพื่อให้ Git รับทราบโดยการเปลี่ยนแปลงใหม่นี้
touch /YOUR-directory/.keep
ทีนี้ถ้าคุณกดgit status
Git จะได้ทราบการเปลี่ยนแปลง
และถ้าคุณต้องการลบไดเรกทอรีคุณควรใช้คำสั่งนี้
rm -r <YOUR-DIRECTORY>
และถ้าคุณตรวจสอบโดยใช้git status
คุณจะเห็นไดเรกทอรีถูกลบออก
คำสั่ง git แรกจำเป็นต้องรู้ว่าคุณคือใครก่อนที่จะลบอะไร
การรวมกันของ 2 คำตอบทำงานให้ฉัน
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
หากยังคงแสดงคำเตือนให้ลบไฟล์ด้วยตนเอง
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push