Bagaimana cara menghapus direktori dari repositori git?

1236

Saya memiliki 2 direktori pada repositori GitHub saya. Saya ingin menghapus salah satunya. Bagaimana saya bisa melakukan itu tanpa menghapus dan menciptakan kembali seluruh repositori?

Sahat Yalkabov
sumber
1
Apakah ada file di direktori?
Fred Foo
3
@Iarsmans: Ya 6 file. Kedua direktori identik kecuali satu huruf besar, yang lain adalah huruf kecil.
Sahat Yalkabov

Jawaban:

2328

Hapus direktori dari git dan lokal

Anda dapat checkout 'master' dengan kedua direktori;

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)

Hapus direktori dari git tetapi BUKAN lokal

Seperti disebutkan dalam komentar, apa yang biasanya ingin Anda lakukan adalah menghapus direktori ini dari git tetapi tidak menghapusnya sepenuhnya dari sistem file (lokal)

Dalam hal ini gunakan:

git rm -r --cached myFolder
karmakaze
sumber
8
Saya memiliki situasi yang persis sama. Ketika saya mencoba git rm -r myFolderitu berhasil, tetapi juga menghapus semuanya dari direktori "MyFolder". Harus mengembalikan semua yang ada di direktori "MyFolder" dan kemudian melakukan.
Justin
240
@Justin Untuk hanya menghapus dari git dan membiarkan filesystem apa adanya, gunakangit rm -r --cached myFolder
karmakaze
32
Pesan kesalahan yang saya dapatkan adalah: fatal: pathspec 'direktori' tidak cocok dengan file apa pun.
user2441441
3
@ user2441441 Saya memiliki kesalahan ini muncul ketika saya mencoba untuk menghapus folder / file yang tidak ditambahkan ke repo sama sekali
lukeatdesignworks
3
git rm -r --cached directory/hanya menghilangkan dari git yang dilacak, tetapi struktur repositori tetap ada.
Néstor
287

Untuk menghapus folder / direktori hanya dari repositori git dan bukan dari lokal coba 3 perintah sederhana.


Langkah-langkah untuk menghapus direktori

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

Langkah-langkah untuk mengabaikan folder itu di commit berikutnya

Untuk mengabaikan folder itu dari commit selanjutnya, buat satu file di root bernama .gitignore dan masukkan nama folder itu ke dalamnya. Anda dapat menempatkan sebanyak yang Anda inginkan

File .gitignore akan terlihat seperti ini

/FolderName

hapus direktori

eirenaios
sumber
1
Anda juga perlu melakukan git rm -r --cached FolderName git commit -m "Folder dihapus dari repositori" di komputer Anda yang lain dan kemudian melakukan tarikan untuk tetap selaras.
Simon
1
Apakah ini akan menghapus direktori dari titik itu ditambahkan ke repositori sampai sekarang? Atau apakah itu hanya untuk menghapus direktori dan mengembalikannya ke repo .git?
alpha_989
1
Bagus! Kerja!
BeingCoders
2
Dijelaskan dengan baik, jawaban yang bagus
Rakshit Shah
1
sudah selesai dilakukan dengan baik. Di mesin saya, langkah ketiga tidak berhasil. Tetapi berfungsi jika diubah menjadi $ git push
Hong
82

Jika, karena alasan tertentu, apa yang dikatakan karmakaze tidak berfungsi, Anda dapat mencoba menghapus direktori yang ingin Anda gunakan atau dengan peramban sistem file Anda (mis. Di Windows File Explorer). Setelah menghapus direktori, mengeluarkan perintah:
git add -A
dan kemudian
git commit -m 'deleting directory'
dan kemudian
git push origin master.

cmcculloh
sumber
4
Ini berhasil untuk saya. Bisakah Anda menjelaskan argumen -A?
Arun
2
@Arun -A adalah kependekan dari --all dan tambahkan perubahan dari semua file yang dilacak dan tidak terlacak
Joachim Rohde
Ini berhasil untuk saya.
UVM
20

Anda dapat mencoba ini: git rm -rf <directory_name>

Ini akan memaksa menghapus direktori.

Breen ho
sumber
3
ini juga akan dihapus dari direktori lokal
abdul rehman kk
18

Jika Anda menghapus file di direktori (dengan git rmjawaban yang lain menjelaskan), maka direktori tersebut tidak ada lagi sejauh menyangkut git. Anda tidak dapat melakukan direktori kosong, Anda juga tidak bisa menghapusnya.

Ini tidak seperti subversi di mana Anda harus secara eksplisit svn rm emptyfolder/, dan kebetulan mengapa manhalaman untuk git menggambarkan dirinya sebagai "pelacak konten bodoh"

Jawaban tentang "Bagaimana cara menambahkan direktori kosong ke repositori git" ke FAQ tentang hal ini :

Saat ini desain indeks git (area pementasan) hanya memungkinkan file untuk didaftar, dan tidak ada yang cukup kompeten untuk membuat perubahan untuk memungkinkan direktori kosong telah cukup peduli tentang situasi ini untuk memperbaikinya.

Direktori ditambahkan secara otomatis ketika menambahkan file di dalamnya. Yaitu, direktori tidak perlu ditambahkan ke repositori, dan tidak dilacak sendiri.

Anda dapat mengatakan " git add <dir>" dan itu akan menambah file di sana.

Jika Anda benar-benar membutuhkan direktori untuk ada di checkout Anda harus membuat file di dalamnya. .gitignore berfungsi dengan baik untuk tujuan ini; Anda dapat membiarkannya kosong, atau mengisi nama file yang Anda harapkan muncul di direktori.

dbr
sumber
9

Saya sudah melakukan folder sebelumnya dan ingin menghapus direktori dalam sejarah juga.

Saya melakukan yang berikut:

Tambahkan folder ke .gitignore:

echo Folder_Name/ >> .gitignore

Hapus dari semua komit:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

hapus referensi dari komitmen lama:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

Pastikan semua referensi lama dihapus sepenuhnya

rm -Rf .git/logs .git/refs/original

Lakukan pengumpulan sampah

git gc --prune=all --aggressive

mendorong Anda perubahan ke repositori online:

git push

Anda selesai di sini.

Tapi Anda bisa ke yang berikut untuk mendorong semua perubahan ke semua cabang dengan: Tapi hati-hati dengan perintah ini!

git push origin --all --force
git push origin --tags --force

Setelah itu folder dihapus dari git, tetapi tidak dihapus dari disk lokal.

Skyborg
sumber
7

untuk menghapus folder Kosong

saya ingin menghapus direktori kosong (folder) yang saya buat, git tidak dapat menghapusnya, setelah beberapa penelitian saya mengetahui bahwa Git tidak melacak direktori kosong. Jika Anda memiliki direktori kosong di pohon kerja Anda, Anda harus menghapusnya dengan

rm -r folderName

Tidak perlu melibatkan Git.

Ridha Rezzag
sumber
1
Terima kasih! Itulah yang saya butuhkan.
SpyrosKo
6

Pergi ke Direktori git Anda lalu ketik perintah berikut: rm -rf < Direktori Nama >

Setelah Menghapus direktori, lakukan perubahan dengan: git commit -m "Pesan Komit Anda"

Kemudian Cukup dorong perubahan pada direktori GIT jarak jauh: git push origin < Nama cabang >

anky
sumber
4

Anda dapat menghapus folder secara lokal dan kemudian mendorong, sebagai berikut:

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

Saya biasanya menggunakan git add --alluntuk menghapus file / folder dari repositori jarak jauh

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

master dapat diganti oleh cabang repositori lainnya.

ettanany
sumber
2

Anda dapat menggunakan Attlasian Source Tree (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Cukup pilih file dari pohon dan tekan tombol "Hapus" di bagian atas. File akan dihapus dari repositori lokal dan database git lokal. Lalu Komit, lalu dorong.

Sergey Groshev
sumber
Ini yang saya lakukan juga. Telah membuatnya sangat mudah untuk dilakukan, meskipun, mempelajari perintah git adalah hal yang baik untuk diketahui.
Micah Montoya
1

Salah satu kolega saya menyarankan BFG Repo-Cleaner yang menurut saya kuat. Ini tidak hanya menghapus data yang tidak diinginkan tetapi juga membersihkan repositori Anda dari informasi komit terkait.

thanh.h.le
sumber
1

Untuk menambah direktori baru:

mkdir <YOUR-DIRECTORY>

Tetapi sekarang Git tidak mengetahui direktori baru ini, karena Git menyimpan jejak file bukan direktori DIRECTORY

git status

Git tidak akan sadar dengan perubahan yang kami buat, jadi kami menambahkan .keepfile tersembunyi untuk membuat Git menyadari perubahan baru ini.

touch /YOUR-directory/.keep

Sekarang, jika Anda menekan git statusGit akan menyadari perubahan tersebut.

Dan Jika Anda ingin menghapus direktori, Anda harus menggunakan perintah ini.

rm -r <YOUR-DIRECTORY>

Dan Jika Anda memeriksa dengan menggunakan git status, Anda akan melihat direktori telah dihapus.

Abo3atef
sumber
0

Perintah pertama git perlu tahu siapa Anda sebelum menghapus apa pun

  1. git init
  2. git config user.name "seseorang"
  3. git config user.email "[email protected]"
  4. git rm -r
  5. git commit -m "menghapus dir"
  6. git dorong master asal
Zeus
sumber
0

Kombinasi dari 2 jawaban berhasil untuk saya

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

jika masih menunjukkan peringatan, hapus file secara manual

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
pengguna3821178
sumber