Lihat di bawah garis padat untuk pertanyaan awal saya.
Saya memiliki folder di direktori lokal saya yang tidak terlacak. Ketika saya berlari git status
, saya mendapatkan:
Changed but not updated:
modified: vendor/plugins/open_flash_chart_2 (modified content, untracked content)
Ketika saya mengetik git add vendor/plugins/open_flash_chart_2
lalu mencoba git status
lagi, masih dikatakan tidak terlacak. Apa yang sedang terjadi?
Berikut ini ringkasan sederhana setengah jam terakhir saya:
Menemukan bahwa repo Github saya tidak melacak
vendor/plugins/open_flash_chart_2
plugin saya . Secara khusus, tidak ada konten dan itu menunjukkan panah hijau pada ikon folder.Mencoba
git submodule init
No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
Mencoba
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
vendor/plugins/open_flash_chart_2 already exists in the index
git status
modified: vendor/plugins/open_flash_chart_2 (untracked content)
Diburu untuk file apa pun yang bernama
.gitmodules
di direktori repositori / lokal saya tetapi tidak dapat menemukannya.
Apa yang harus saya lakukan agar submodul saya berfungsi sehingga git dapat mulai melacak dengan benar?
Ini mungkin tidak terkait (saya sertakan kalau-kalau itu membantu), tetapi setiap kali saya mengetik git commit -a
daripada yang biasa git commit -m "my comments"
, itu memunculkan kesalahan:
E325: ATTENTION
Found a swap file by the name ".git\.COMMIT-EDITMSG.swp"
dated: Thu Nov 11 19:45:05 2010
file name: c:/san/project/.git/COMMIT_EDITMSG
modified: YES
user name: San host name: San-PC
process ID: 4268
While opening file ".git\COMMIT_EDITMSG"
dated: Thu Nov 11 20:56:09 2010
NEWER than swap file!
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Saya benar-benar seorang pemula di Github dan meskipun mencoba membaca dokumentasi, saya agak bingung dengan masalah-masalah khusus ini. Terima kasih.
sumber
git submodule add
,git submodule update --init
.tracking
tag tampaknya digunakan untuk topik 'pelacakan pengunjung situs web', sehingga tidak berlaku juga.Jawaban:
Anda telah menambahkan
vendor/plugins/open_flash_chart_2
entri "gitlink", tetapi tidak pernah mendefinisikannya sebagai submodule. Secara efektif Anda menggunakan fitur internal yang digunakan git submodule (entri gitlink) tetapi Anda tidak menggunakan fitur submodule itu sendiri.Anda mungkin melakukan sesuatu seperti ini:
Perintah terakhir ini adalah masalahnya. Direktori
vendor/plugins/open_flash_chart_2
dimulai sebagai repositori independen Git. Biasanya sub-repositori seperti itu diabaikan, tetapi jika Anda memberi tahu git menambahkan untuk menambahkannya secara eksplisit, maka itu akan membuat entri gitlink yang menunjuk ke komit HEAD sub-repositori alih-alih menambahkan isi direktori. Mungkin menyenangkan jika git menambahkan menolak untuk membuat "semi-submodules".Direktori normal direpresentasikan sebagai objek pohon di Git; objek pohon memberi nama, dan izin ke objek yang dikandungnya (biasanya objek pohon dan gumpalan lainnya — direktori dan file, masing-masing). Submodules direpresentasikan sebagai entri “gitlink”; entri gitlink hanya berisi nama objek (hash) dari komit HEAD dari submodule. “Repositori sumber” untuk komit gitlink ditentukan dalam
.gitmodules
file (dan.git/config
file setelah submodule diinisialisasi).Apa yang Anda miliki adalah entri yang menunjuk ke komit tertentu, tanpa merekam repositori sumber untuk komit itu. Anda dapat memperbaikinya dengan membuat gitlink Anda menjadi submodule yang tepat, atau dengan menghapus gitlink dan menggantinya dengan konten “normal” (file biasa dan direktori).
Mengubahnya menjadi Submodule yang Tepat
Satu-satunya bit yang Anda lewatkan untuk didefinisikan dengan benar
vendor/plugins/open_flash_chart_2
sebagai submodule adalah.gitmodules
file. Biasanya (jika Anda belum menambahkannya sebagai entri gitlink kosong), Anda hanya akan menggunakangit submodule add
:Seperti yang Anda temukan, ini tidak akan berfungsi jika jalur sudah ada dalam indeks. Solusinya adalah untuk menghapus entri gitlink sementara dari indeks dan kemudian menambahkan submodule:
Ini akan menggunakan sub-repositori Anda yang sudah ada (yaitu tidak akan mengkloning kembali repositori sumber) dan menampilkan
.gitmodules
file yang terlihat seperti ini:Itu juga akan membuat entri serupa di repositori utama Anda
.git/config
(tanpapath
pengaturan).Komit itu dan Anda akan memiliki submodule yang tepat. Ketika Anda mengkloning repositori (atau mendorong ke GitHub dan mengkloning dari sana), Anda harus dapat menginisialisasi ulang submodule via
git submodule update --init
.Ganti dengan Konten Biasa
Langkah selanjutnya mengasumsikan bahwa sub-repositori Anda di
vendor/plugins/open_flash_chart_2
tidak memiliki riwayat lokal yang ingin Anda pertahankan (yaitu semua yang Anda pedulikan adalah pohon kerja sub-repositori saat ini, bukan riwayat).Jika Anda memiliki riwayat lokal di sub-repositori yang Anda pedulikan, maka Anda harus membuat cadangan
.git
direktori sub-repositori sebelum menghapusnya di perintah kedua di bawah ini. (Pertimbangkan juga contoh subtit git di bawah ini yang menjaga sejarah HEAD sub-repositori).Kali ini ketika menambahkan direktori, ini bukan sub-repositori, jadi file-file tersebut akan ditambahkan secara normal. Sayangnya, karena kami menghapus
.git
direktori, tidak ada cara super mudah untuk menjaga hal-hal terbaru dengan repositori sumber.Anda dapat mempertimbangkan menggunakan penggabungan subtree saja. Melakukan hal itu akan membuat Anda dengan mudah menarik perubahan dari repositori sumber sambil menjaga file "flat" di repositori Anda (tanpa submodul). Perintah subtree git pihak ketiga adalah pembungkus yang bagus di sekitar fungsionalitas penggabungan subtree.
Kemudian:
git subtree juga memiliki
--squash
opsi yang memungkinkan Anda menghindari memasukkan riwayat repositori sumber ke dalam riwayat Anda, tetapi masih memungkinkan Anda melakukan perubahan hulu.sumber
rm -rf vendor/plugins/open_flash_chart_2/.git
dan mengatakan 'rm' tidak dikenali. Lalu saya mencobagit rm -rf vendor/plugins/open_flash_chart_2/.git
dan katanyafatal: pathspec 'vendor/plugins/open_flash_chart_2/.git' did not match any files
(tapi saya bisa sampai di sana di windows explorer!)..git
dir sub-repositori dan menambahkan kembali file-file dengan "datar" (opsi "Konten Biasa" pertama).subtree
tidak harus bingung dengan penggabungan subtree. Itu bukan pembungkus. Penulis berkata: Pgit readtree --prefix=path
penggabungan subtree:git merge
dengan-s subtree
atau-Xsubtree=path
). Ini memiliki tambahan bagus "di atas", juga:--squash
mode,split
perintah, danpush
danpull
pembantu.Saya hanya punya masalah yang sama. Alasannya adalah karena ada subfolder yang berisi folder ".git". Menghapusnya membuat git senang.
sumber
.git
folderURL referensi https://danielmiessler.com/blog/git-modified-untracked/#gs.W0C7X6U
sumber
Untuk menunjukkan apa yang harus saya gali dari obrolan Chris Johansen dengan OP (ditautkan dari balasan ke jawaban):
git add vendor/plugins/open_flash_chart_2
# akan menambahkan gitlink, konten akan tetap tidak terlacakgit add vendor/plugins/open_flash_chart_2/
# PEMBERITAHUAN SLASH !!!!Bentuk kedua akan menambahkannya tanpa gitlink, dan konten dapat dilacak. Dir. Git dengan mudah & secara otomatis diabaikan. Chris terima kasih!
sumber
Saya menggunakan trik yang disarankan oleh Peter Lada setiap saat, dijuluki "submodules palsu":
http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb
Ini sangat berguna dalam beberapa skenario (pe saya menggunakannya untuk menyimpan semua konfigurasi Emacs saya di repositori, termasuk HEAD saat ini dari semua repositori git di dalam direktori paket elpa / el-get, sehingga saya dapat dengan mudah memutar kembali / meneruskan ke yang diketahui versi yang berfungsi ketika beberapa pembaruan merusak sesuatu).
sumber
http://progit.org/book/ch6-6.html
Saya pikir Anda harus membaca ini untuk belajar sedikit tentang submodule. Ini ditulis dengan baik, dan tidak butuh banyak waktu untuk membacanya.
sumber
Saya memiliki masalah yang sama dengan proyek besar dengan banyak submodul. Berdasarkan jawaban Chris Johnsen di sini dan VonC di sini saya membuat skrip bash pendek yang beriterasi melalui semua entri gitlink yang ada dan menambahkannya sebagai submodul yang tepat.
Ini memperbaikinya bagi saya, saya harap itu bisa membantu.
sumber
Ini berhasil bagi saya:
git update-index --skip-worktree
Jika tidak bekerja dengan pathname, coba nama file. Beri tahu saya jika ini juga berhasil untuk Anda.
Sampai jumpa!
sumber
Punya masalah yang sama, tetapi tidak diselesaikan dalam diskusi ini.
Saya menekan juga masalah submodule seperti yang dijelaskan dalam pembukaan utas.
Melihat diff saya mengenali -dirty ditambahkan ke hash: Membaca dokumen lagi, memecahkan masalah bagi saya. http://web.mit.edu/jhawk/mnt/spo/git/git-doc/user-manual.html Lihat bagian "Perangkap dengan submodula"
Alasannya adalah, ada perubahan atau konten yang tidak terlacak dalam submodule. Saya pertama kali harus masuk ke direktori submodule, lakukan "git add" + "git commit" untuk mendapatkan semua konten yang dilacak dalam submodule.
Sekarang KEPALA baru ini dari submodule dapat dikomit ke modul master.
sumber
Baru-baru ini saya mengalami masalah ini saat mengerjakan proyek kontrak (dianggap rahasia). Sistem di mana saya harus menjalankan kode tidak memiliki akses internet, tentu saja untuk tujuan keamanan, dan dengan demikian menginstal dependensi, menggunakan komposer dan npm, menjadi sangat menyakitkan.
Setelah banyak pertimbangan dengan kolega saya, kami memutuskan untuk hanya menggantinya dan menyalin tempel ketergantungan kami daripada melakukan pemasangan komposer atau menginstal npm.
Ini menyebabkan kami TIDAK menambahkan vendor dan npm_modules di gitignore. Inilah saat saya mengalami masalah ini.
Saya googled ini sedikit dan menemukan utas bermanfaat ini di SO. Tidak terlalu banyak pro di Git, dan menjadi sedikit mabuk saat mengerjakannya, saya hanya mencari semua submodules di folder vendor
Ini memberi saya beberapa 4-5 dependensi yang memiliki git pada mereka. Saya menghapus semua folder .git dan voila ini, itu berhasil. Saya tahu ini hack, dan bukan yang sangat culun. O Dewa SO, maafkan aku! Lain kali saya berjanji untuk membaca tentang gitlink dan mematuhi O Linus Tovalds yang perkasa.
sumber
Pertanyaan ini sudah dijawab, tetapi saya pikir saya akan menambahkan pada campuran apa yang saya temukan ketika saya menerima pesan-pesan ini.
Saya memiliki repo bernama
playground
yang berisi sejumlah aplikasi kotak pasir. Saya menambahkan dua aplikasi baru dari tutorial keplayground
direktori dengan mengkloning repo tutorial. Hasilnya adalah hal-hal git aplikasi baru menunjuk ke repo tutorial dan bukan ke repo saya. Solusinya adalah menghapus.git
direktori dari masing-masing direktori aplikasi, direktorimv
aplikasi di luarplayground
direktori, dan kemudianmv
kembali dan berjalangit add .
. Setelah itu berhasil.sumber
Saya memecahkan masalah ini dengan menghapus file .git dari subfolder saya.
sumber
Pertama pergi ke Direktori : vendor / plugins / open_flash_chart_2 dan DELETE
KEMUDIAN :
KELUARAN
sumber