จะลบไดเรกทอรีออกจากที่เก็บ git ได้อย่างไร?


1232

ฉันมี 2 ไดเรกทอรีในที่เก็บ GitHub ของฉัน ฉันต้องการลบหนึ่งในนั้น ฉันจะทำอย่างนั้นได้อย่างไรโดยไม่ลบและสร้างพื้นที่เก็บข้อมูลทั้งหมดขึ้นใหม่?


1
มีไฟล์ใดบ้างในไดเรกทอรีหรือไม่
Fred Foo

3
@Iarsmans: ใช่ 6 ไฟล์ ทั้งสองไดเรกทอรีเหมือนกันยกเว้นหนึ่งเป็นตัวพิมพ์ใหญ่และอีกตัวเป็นตัวพิมพ์เล็ก
Sahat Yalkabov

คำตอบ:


2322

ลบไดเรกทอรีออกจาก git และ local

คุณสามารถชำระเงิน 'หลัก' ด้วยทั้งสองไดเรกทอรี

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

8
ฉันมีสถานการณ์ที่แน่นอนเหมือนกัน เมื่อฉันลองgit rm -r myFolderใช้งานได้ แต่ก็ลบทุกอย่างออกจากไดเรกทอรี "MyFolder" ต้องเปลี่ยนทุกสิ่งในไดเรกทอรี "MyFolder" แล้วส่ง
Justin

240
@Justin เพียงแค่ลบออกจากระบบคอมไพล์และปล่อยให้เป็นเหมือนเดิมใช้git rm -r --cached myFolder
karmakaze

32
ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ: ร้ายแรง: pathspec 'directory' ไม่ตรงกับไฟล์ใด ๆ
user2441441

3
@ user2441441 ฉันมีข้อผิดพลาดนี้ปรากฏขึ้นเมื่อฉันพยายามที่จะลบโฟลเดอร์ / ไฟล์ที่ไม่ได้เพิ่มไปยัง repo เลย
lukeatdesignworks

3
git rm -r --cached directory/ลบออกจากการติดตามคอมไพล์เท่านั้น แต่โครงสร้างที่เก็บยังคงอยู่
Néstor

287

หากต้องการลบโฟลเดอร์ / ไดเรกทอรีออกจากพื้นที่เก็บข้อมูลคอมไพล์เท่านั้นและไม่ได้อยู่ในคำสั่งแบบง่ายลองโลคัล 3


ขั้นตอนในการลบไดเรกทอรี

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

ขั้นตอนในการข้ามโฟลเดอร์นั้นในครั้งถัดไปที่คอมมิต

ในการเพิกเฉยต่อโฟลเดอร์นั้นจากการคอมมิทครั้งต่อไปให้สร้างหนึ่งไฟล์ในรูทชื่อ. gitignore และใส่ชื่อโฟลเดอร์นั้นลงไป คุณสามารถใส่ได้มากเท่าที่คุณต้องการ

ไฟล์. gitignoreจะมีลักษณะเช่นนี้

/FolderName

ลบไดเรกทอรี


1
คุณจะต้องทำ git rm -r --cached FolderName git กระทำ -m "ลบโฟลเดอร์ออกจากที่เก็บ" บนคอมพิวเตอร์เครื่องอื่นของคุณแล้วดึงเพื่อเก็บไว้ในซิงค์
Simon

1
นี่จะลบไดเรกทอรีจากจุดที่ถูกเพิ่มไปยังที่เก็บหรือไม่ หรือเป็นเพียงการลบไดเรกทอรีและแนะนำให้กับ. git repo?
alpha_989

1
ที่ดี! ทำงาน!
BeingCoders

2
อธิบายได้ดีคำตอบที่ดี
Rakshit Shah

1
ทำได้ดี. บนเครื่องของฉันขั้นตอนที่สามไม่ทำงาน แต่ใช้งานได้หากเปลี่ยนเป็น $ git push
Hong

82

ถ้าด้วยเหตุผลบางอย่างสิ่งที่ karmakaze กล่าวไม่ทำงานคุณสามารถลองลบไดเรกทอรีที่คุณต้องการใช้หรือกับเบราว์เซอร์ระบบไฟล์ของคุณ (เช่นใน Windows File Explorer) หลังจากลบไดเรกทอรีการออกคำสั่ง:
git add -A
แล้วแล้ว
git commit -m 'deleting directory'

git push origin master


4
สิ่งนี้ใช้ได้สำหรับฉัน คุณช่วยอธิบายอาร์กิวเมนต์ A ได้ไหม
อรุณ

2
@Arun -A ย่อมาจาก - ทั้งหมดและเพิ่มการเปลี่ยนแปลงจากไฟล์ที่ถูกติดตามและไม่ได้ติดตามทั้งหมด
Joachim Rohde

สิ่งนี้ใช้ได้สำหรับฉัน
UVM

20

คุณสามารถลองสิ่งนี้: git rm -rf <directory_name>

มันจะบังคับให้ลบไดเรกทอรี


3
สิ่งนี้จะลบออกจากไดเรกทอรีท้องถิ่นด้วย
abdul rehman kk

18

หากคุณลบไฟล์ในไดเรกทอรี (พร้อมกับgit rmคำตอบอื่น ๆ อธิบาย) แล้วไดเรกทอรีไม่อยู่อีกต่อไปเท่าที่เกี่ยวข้องกับคอมไพล์ คุณไม่สามารถยอมรับไดเรกทอรีว่างเปล่าและไม่สามารถลบออกได้

ซึ่งแตกต่างจากการโค่นล้มที่คุณต้องชัดเจนsvn rm emptyfolder/และเป็นเหตุให้manหน้า git อธิบายตัวเองว่า "ตัวติดตามเนื้อหาโง่"

คำตอบเกี่ยวกับ"ฉันจะเพิ่มไดเรกทอรีว่างไปยังที่เก็บ git"ลิงก์ไปยังคำถามที่พบบ่อยในเรื่องนี้ได้อย่างไร :

ขณะนี้การออกแบบดัชนี git (พื้นที่การจัดเตรียม) อนุญาตให้แสดงเฉพาะไฟล์เท่านั้นและไม่มีใครมีความสามารถเพียงพอที่จะทำการเปลี่ยนแปลงเพื่ออนุญาตให้ไดเรกทอรีที่ว่างเปล่าได้ใส่ใจเพียงพอเกี่ยวกับสถานการณ์นี้เพื่อแก้ไข

ไดเรกทอรีจะถูกเพิ่มโดยอัตโนมัติเมื่อเพิ่มไฟล์ภายใน กล่าวคือไม่ต้องเพิ่มไดเรกทอรีในที่เก็บและไม่ได้ติดตามด้วยตนเอง

คุณสามารถพูดว่า " git add <dir>" แล้วมันจะเพิ่มไฟล์เข้าไป

หากคุณต้องการไดเรกทอรีที่มีอยู่จริงในจุดชำระเงินคุณควรสร้างไฟล์ไว้ในนั้น . gitignore ทำงานได้ดีสำหรับวัตถุประสงค์นี้ คุณสามารถปล่อยว่างไว้หรือเติมชื่อไฟล์ที่คุณคาดว่าจะปรากฏในไดเรกทอรี


8

ฉันได้กำหนดโฟลเดอร์ไว้แล้วและต้องการลบไดเรกทอรีในประวัติด้วย

ฉันทำต่อไปนี้:

เพิ่มโฟลเดอร์ไปที่.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

หลังจากนั้นโฟลเดอร์จะถูกลบออกจากคอมไพล์ แต่ไม่ถูกลบออกจากดิสก์ภายในเครื่อง


7

สำหรับการลบโฟลเดอร์ Empty

ฉันต้องการลบไดเรกทอรีว่างเปล่า (โฟลเดอร์) ฉันสร้างขึ้น git ไม่สามารถลบมันได้หลังจากการวิจัยบางอย่างฉันได้เรียนรู้ Git ไม่ได้ติดตามไดเรกทอรีว่างเปล่า หากคุณมีไดเรกทอรีว่างในแผนผังการทำงานของคุณคุณควรลบออกด้วย

rm -r folderName

ไม่จำเป็นต้องมีส่วนเกี่ยวข้องกับ Git


1
ขอบคุณ! นั่นคือสิ่งที่ฉันต้องการ
SpyrosKo

6

ไปที่ git Directory ของคุณจากนั้นพิมพ์คำสั่งต่อไปนี้: rm -rf < ชื่อไดเรกทอรี >

หลังจากลบไดเรกทอรีกระทำการเปลี่ยนแปลงโดย: git กระทำ -m "Your Commit Message"

จากนั้นเพียงแค่ผลักดันการเปลี่ยนแปลงในไดเรกทอรี GIT ระยะไกล: git push origin < ชื่อสาขา >


4

คุณสามารถลบโฟลเดอร์ในเครื่องแล้วกดดังนี้:

git rm -r folder_name
git commit -m "your commit"
git push origin master

4

ฉันมักจะใช้git add --allเพื่อลบไฟล์ / โฟลเดอร์จากที่เก็บข้อมูลระยะไกล

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master สามารถถูกแทนที่ด้วยสาขาอื่น ๆ ของพื้นที่เก็บข้อมูล


2

คุณสามารถใช้แผนผังแหล่งที่มาของ Attlasian (Windows) ( https://www.atlassian.com/software/sourcetree/overview ) เพียงแค่เลือกไฟล์จากต้นไม้และกดปุ่ม "ลบ" ที่ด้านบน ไฟล์จะถูกลบออกจากพื้นที่เก็บข้อมูลในท้องถิ่นและฐานข้อมูล Git ท้องถิ่น จากนั้นคอมมิทแล้วกด


นี่คือสิ่งที่ฉันทำเช่นกัน ทำให้มันง่ายมากที่จะทำแม้ว่าการเรียนรู้คำสั่ง git นั้นเป็นสิ่งที่ควรรู้
คา Montoya

1

หนึ่งในเพื่อนร่วมงานของฉันแนะนำBFG Repo-Cleanerซึ่งฉันคิดว่าทรงพลัง ไม่เพียง แต่ลบข้อมูลที่ไม่ต้องการ แต่ยังล้างที่เก็บของคุณจากข้อมูลการกระทำที่เกี่ยวข้อง


1

ในการเพิ่มไดเรกทอรีใหม่:

mkdir <YOUR-DIRECTORY>

แต่ตอนนี้ Git ไม่ได้รับการยอมรับจากไดเรกทอรีใหม่นี้เพราะ Git ติดตามไฟล์ไม่ใช่ไดเรกทอรี DIRECTORY

git status

Git จะไม่รับรู้ถึงการเปลี่ยนแปลงที่เราทำดังนั้นเราจึงเพิ่ม.keepไฟล์ที่ซ่อนไว้เพื่อให้ Git รับทราบโดยการเปลี่ยนแปลงใหม่นี้

touch /YOUR-directory/.keep

ทีนี้ถ้าคุณกดgit statusGit จะได้ทราบการเปลี่ยนแปลง

และถ้าคุณต้องการลบไดเรกทอรีคุณควรใช้คำสั่งนี้

rm -r <YOUR-DIRECTORY>

และถ้าคุณตรวจสอบโดยใช้git statusคุณจะเห็นไดเรกทอรีถูกลบออก


0

คำสั่ง git แรกจำเป็นต้องรู้ว่าคุณคือใครก่อนที่จะลบอะไร

  1. git init
  2. git config user.name "someone"
  3. git config user.email "someone@someplace.com"
  4. git rm -r
  5. คอมไพล์กระทำ -m "ลบ dir"
  6. git push ต้นกำเนิดมาสเตอร์

0

การรวมกันของ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.