tidak dapat menambahkan folder di git

21

Saya menambahkan folder baru (sebenarnya saya mengkloningnya dari repo lain, dan lupa itu), lalu saya melakukan beberapa perubahan di sana. Selain itu saya melakukan banyak perubahan di tempat lain, ketika saya mencoba melakukan git add

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   protected/ext/SpecificFolder (modified content)
#

Kemudian saya ingat bahwa mungkin ada folder .git (karena sebelumnya saya melakukan git clone di sana). Saya pergi ke folder itu dan menghapus file yang tidak diperlukan (folder) dan folder .git juga. Saya memeriksa status git, tidak ada yang aneh. Kemudian komit dan checkout ke cabang lain dan tiba-tiba saya mengetahui bahwa folder ini tidak ditambahkan ke komit terakhir. Sebenarnya folder ditambahkan tetapi file di dalamnya diabaikan. Sekarang bahkan ketika saya mencoba melakukan git adduntuk folder itu tidak ada yang terjadi dan git statustidak menunjukkan perubahan apa pun :(

Apa yang dapat saya ?

pengguna1016265
sumber
6
Seandainya ada orang lain yang berakhir pada halaman ini dengan masalah yang saya hadapi: Saya tidak dapat menambahkan file dalam sub-folder ke Git. Kemudian saya menemukan bahwa sub-folder memiliki .gitrepositori sendiri dan file semakin ditambahkan ke repositori itu daripada repositori di folder utama. Bahkan di Git GUI, sub-folder itu muncul sebagai file, bukan sebagai folder.
Nav

Jawaban:

29

Git tidak melacak direktori; tetapi hanya file di dalamnya.

Sepertinya Anda mungkin memiliki pola abaikan yang menyebabkan addtidak melakukan apa pun. Anda dapat melihat file yang diabaikan dengan git status --ignored; mereka kemudian dapat dilacakgit add --force protected/ext/SpecificFolder

Bryan
sumber
1
Tidak itu tidak hadir git status --ignored, entah bagaimana saya pikir itu terhubung dengan submodule
user1016265
1
Perintah ini adalah penyelamat hidup. Tanpa itu, saya tidak akan pernah tahu direktori mana yang diabaikan.
IgorGanapolsky
wow ..... Saya merasa benar-benar bodoh membaca fakta ini setelah menggunakan git untuk beberapa waktu sekarang ^^
XandruCea
1
Aha, akhirnya. Ini masalah saya. Saya telah menyalin .gitignore dari orang tua dan ke dalam submodules. Saya mengabaikan 'config /' dan kemudian saya membuat direktori di bawah sumber dir bernama config. Tidak bisa menambah keberanian. Masalah diselesaikan sekarang terima kasih :-)
Avec
7

Git tidak melacak direktori KOSONG. Jika Anda memiliki proyek dengan beberapa lapisan subdirektori, git sebenarnya melacak direktori w / file di dalamnya. Jika tidak, maka itu akan menjadi repositori flat file.

Ed Mangini
sumber
Wow ini hal yang sangat sederhana tapi sial. Saya membaca ini dan berkata, "Ya Tuhan, itulah persisnya"
Brian berkata Reinstate Monica
3

Saya kebetulan melakukan persis apa yang dilakukan pengguna ini: Menambahkan repositori git yang ada di dalam yang lain.

Gejalanya adalah bahwa git mengenali direktori tersebut sebagai file, dan karenanya tidak dapat menambahkan file direktori.

Untuk mengatasi pertanyaan itu, saya menghapus .gitfolder di folder, memindahkan folder itu di direktori lain, membersihkan indeks, menghapus direktori di mana di repo saya, dan kemudian saya bisa menambahkan direktori dengan benar.

Moral dari ini adalah: jangan menambahkan repositori di dalam yang lain.

Madmin
sumber
5
Itu juga dapat diperbaiki dengan menjalankangit rm --cached path_to_submodule
Victor Marchuk
2

Ada jawaban yang lebih baik di sini: penggunaan gitkeep

TL; DR, tambahkan .gitkeepfile ke direktori kosong Anda

Yarh
sumber
0

Coba tambahkan file di direktori itu.

$ git add my-dir/index.html

Jika Anda melihat output seperti di bawah ini:

The following paths are ignored by one of your .gitignore files:
my-dir/index.html
Use -f if you really want to add them.
fatal: no files added

Ada aturan di salah satu gitignores Anda yang mencegah Anda menambahkan direktori itu.

Gayan Weerakutti
sumber
0

Saya menemukan efek samping yang serupa setelah mencoba mengubah apa yang sebelumnya menjadi submodule menjadi subfolder normal.

Menambahkan kembali folder yang saya coba konversi tampaknya berfungsi, tetapi ternyata file di dalamnya sebenarnya tidak ditambahkan.

Mencoba secara khusus menambahkan file di dalamnya memberi saya peringatan yang lebih baik

git add sites/all/modules/contrib/transclusion/transclusion.module 
fatal: Pathspec 'sites/all/modules/contrib/transclusion/transclusion.module' is in submodule 'sites/all/modules/contrib/transclusion'
  • jadi itu terkait dengan cara saya mencoba secara manual untuk menghapus submodule lama, karena tidak ada proses yang terdokumentasi dengan baik untuk melakukannya dengan benar. - Saya baru saja menghapusnya dari .gitmodules. Hal-hal lain sebenarnya diperlukan untuk menghilangkan bayangan submodule.
dman
sumber