Saya mengalami masalah dengan repositori saat ini, dan meskipun Git-fu saya biasanya bagus, saya sepertinya tidak bisa menyelesaikan masalah ini.
Ketika saya mengkloning repositori ini, kemudian cd
ke repositori, git status
menunjukkan beberapa file yang berubah. Catatan: Saya belum membuka repositori dalam editor apa pun atau apa pun.
Saya mencoba mengikuti panduan ini: http://help.github.com/dealing-with-lineendings/ , tetapi ini tidak membantu sama sekali dengan masalah saya.
Saya sudah mencoba git checkout -- .
berkali-kali, tetapi sepertinya tidak melakukan apa-apa.
Saya menggunakan Mac, dan tidak ada submodul dalam repositori itu sendiri.
Sistem file adalah sistem file "Jurnal HFS +" pada Mac dan tidak peka huruf besar-kecil. File-file ini satu-baris dan masing-masing sekitar 79 KB (ya, Anda dengar benar), jadi melihat git diff
itu tidak terlalu membantu. Saya telah mendengar tentang melakukan git config --global core.trustctime false
yang mungkin membantu, yang akan saya coba ketika saya kembali ke komputer dengan repositori di atasnya.
Saya mengubah detail sistem file dengan fakta! Dan saya mencoba git config --global core.trustctime false
trik yang tidak berhasil dengan baik.
* text=auto
harus dilakukan Apa artinya menghapusnya.gitattributes
? Saya melihatnya memperbaiki masalah ini untuk saya, tetapi saya tidak yakin mengapa ia melakukannya, dan apa yang sebenarnya dilakukannya, dan masalah apa yang mungkin terjadi?git add
dangit commit
yang menormalkan file dan menyingkirkan masalah.git config --global core.autocrlf input
memperbaikinya untukku. Terima kasih.Saya mendapatkannya. Semua pengembang lain berada di Ubuntu (saya pikir) dan dengan demikian memiliki sistem file case-sensitive. Saya, bagaimanapun, tidak (karena saya di Mac). Memang, semua file memiliki huruf kecil kembar ketika saya melihatnya menggunakan
git ls-tree HEAD <path>
.Saya akan meminta salah satu dari mereka untuk mengatasinya.
sumber
git ls-tree HEAD <path>
hanya menunjukkan satu file. Saya bisa melihat file duplikat di UI GitHub.com, dan juga menggunakan UI itu untuk menghapus satu versi.memecahkan masalah ini dalam kasus saya
https://git-scm.com/docs/git-config
TL; DR;
core.fileMode
Jika salah, perbedaan bit yang dapat dieksekusi antara indeks dan pohon kerja diabaikan; berguna pada sistem file yang rusak seperti FAT. Lihat git-update-index (1).
Default-nya benar, kecuali git-clone (1) atau git-init (1) akan menyelidiki dan menetapkan core.fileMode salah jika sesuai ketika repositori dibuat.
sumber
git diff
, saya menemukan bahwa perubahan hanya dalam mode file. git mengambilchmod -R 777 .
yang disebabkan ketika saya menjalankan proyek saya dan konfigurasi ini memungkinkan saya untuk mengabaikan perubahan chmod oleh git stackoverflow.com/q/1580596/6207775Saya berasumsi Anda menggunakan Windows. Halaman GitHub yang Anda tautkan memiliki detail mundur. Masalahnya adalah bahwa akhir baris CR + LF telah dikomit ke repositori dan karena Anda memiliki core.autocrlf yang disetel ke true atau input , Git ingin mengonversi akhiran baris ke LF, jadi
git status
menunjukkan bahwa setiap file diubah.Jika ini adalah repositori yang hanya ingin Anda akses, tetapi tidak terlibat, Anda dapat menjalankan perintah berikut untuk hanya menyembunyikan masalah tanpa benar-benar menyelesaikannya.
Jika ini adalah repositori yang Anda akan terlibat secara aktif dan dapat melakukan perubahan. Anda mungkin ingin memperbaiki masalah dengan membuat komit yang mengubah semua akhir baris dalam repositori untuk menggunakan LF alih-alih CR + LF dan kemudian mengambil langkah-langkah untuk mencegahnya terjadi lagi di masa mendatang.
Yang berikut ini diambil langsung dari halaman manual gitattributes dan harus dibentuk sebelumnya dari direktori kerja bersih.
Jika ada file yang tidak dinormalisasi muncul di
git status
, hapus atribut teks mereka sebelum berjalangit add -u
.Sebaliknya, file teks yang tidak terdeteksi oleh Git dapat mengaktifkan normalisasi secara manual.
sumber
git diff
menunjukkan untuk file-file yanggit status
mengatakan dimodifikasi, juga sistem file apa yang Anda gunakan?git config core.autocrlf false
sudah cukup). Kami tertipu oleh kenyataan bahwa klien berjalan di Linux (SL / RHEL), tetapi sesi Linux dimulai melalui x2go dari host Windows. Jadi ini mungkin solusi yang paling mungkin dalam konteks homogen Win + Lin.Silakan jalankan perintah berikut. Itu mungkin bisa menyelesaikan masalah.
sumber
Di Visual Studio, jika Anda menggunakan Git, Anda dapat secara otomatis membuat file .gitignore dan .gitattributes. File .getattributes yang dibuat secara otomatis memiliki baris berikut:
Baris ini berada di dekat bagian atas file. Kami hanya perlu mengomentari baris dengan menambahkan # di depannya. Setelah melakukan itu, semuanya berjalan seperti yang diharapkan.
sumber
Masalahnya mungkin juga muncul dari izin file yang berbeda , seperti halnya kasus saya:
Repositori hasil kloning baru (Windows, Cygwin):
Repositori jarak jauh kosong (Linux):
sumber
Saya ingin menambahkan jawaban yang lebih terarah pada "Mengapa" ini terjadi, karena sudah ada jawaban yang bagus tentang cara memperbaikinya.
Jadi,
.gitattributes
memiliki* text=auto
pengaturan, yang menyebabkan masalah ini.Dalam kasus saya, file di cabang utama GitHub memiliki
\r\n
akhiran. Saya telah memutar pengaturan pada repositori untuk check-in dengan\n
akhiran. Saya tidak tahu apa yang diperiksa Git. Seharusnya memeriksa dengan ujung asli ke kotak Linux saya (\n
), tapi saya kira itu memeriksa file dengan\r\n
ujung. Git mengeluh karena ia melihat\r\n
akhiran yang diperiksa di repositori dan memperingatkan saya bahwa ia akan memeriksa\n
pengaturan. Karenanya file "harus dimodifikasi".Itulah pengertian saya untuk saat ini.
sumber
Saya memiliki masalah yang sama. Juga dengan Mac. Melihat repositori pada mesin Linux saya perhatikan bahwa saya memiliki dua file:
geoip.dat dan GeoIP.dat
Saya menghapus yang sudah usang pada mesin Linux dan mengkloning repositori lagi ke Mac. Saya tidak dapat menarik, melakukan, menyimpan atau menarik dari salinan repositori saya ketika ada duplikat.
sumber
Masalah yang sama bagi saya. Saya bisa melihat beberapa gambar dengan nama yang sama, seperti "textField.png" dan "textfield.png" di repositori Git jarak jauh, tetapi tidak pada repositori lokal saya. Saya hanya dapat melihat "textField.png" yang tidak digunakan dalam kode proyek.
Ternyata sebagian besar rekan saya ada di Ubuntu menggunakan sistem file ext4 sedangkan saya di Mac menggunakan APFS.
Berkat jawaban Sam Elliott , solusinya cukup sederhana. Pertama saya meminta seorang kolega di Ubuntu untuk menghapus versi file yang berlebihan dengan huruf besar, kemudian komit dan tekan pada remote.
Kemudian saya menjalankan yang berikut:
Akhirnya, kami memutuskan bahwa setiap pengembang harus mengubah konfigurasi Git-nya untuk mencegah hal ini terjadi lagi:
atau
sumber
upvoted
@ kds !=
) karena akan berakhir diignorecase = =
dalam file konfigurasi.Saya juga baru saja mengalami masalah yang sama. Dalam kasus saya, saya mengkloning repositori dan beberapa file segera hilang.
Ini disebabkan oleh path ke file dan nama file terlalu panjang untuk Windows. Untuk mengatasinya, klon repositori sedekat mungkin dengan root drive hard disk untuk mengurangi panjang jalur ke file. Misalnya, klon ke
C:\A\GitRepo
bukanC:\Users Documents\yyy\Desktop\GitRepo
.sumber
Edit file yang disebut
.git/config
:Atau:
Isi
Ubah
filemode=true
menjadifilemode = false
.sumber
git config core.Filemode false
Untuk versi baru macOS ini dapat disebabkan oleh fitur keamanan OS.
Dalam repositori yang saya kerjakan, ada file biner yang memiliki * .app sebagai tipe file.
Itu hanya beberapa data serial, tetapi macOS memperlakukan semua file * .app sebagai aplikasi dan karena file ini tidak diunduh oleh pengguna, sistem menganggapnya tidak aman dan menambahkan
com.apple.quarantine
atribut file yang memastikan file tidak dapat dieksekusi.Tetapi pengaturan atribut ini pada file juga mengubah file dan oleh karena itu muncul dalam set perubahan Git tanpa ada cara untuk mengembalikannya.
Anda dapat memeriksa apakah Anda memiliki masalah yang sama dengan menjalankan
$ xattr file.app
.Solusinya cukup sederhana, selama Anda tidak harus bekerja dengan file tersebut. Tambahkan saja
*.app binary
ke.gitattributes
.sumber
Saya menyalin repositori lokal saya ke folder lain dan sekelompok file yang dimodifikasi muncul. Solusi saya adalah: Saya menyembunyikan file yang dimodifikasi dan menghapus simpanan . Repositori menjadi bersih.
sumber
Saya menemukan bahwa Git memperlakukan file saya (.psd dalam kasus ini) sebagai teks. Mengaturnya ke tipe biner di .gitattributes menyelesaikannya.
sumber
Saya mencoba melakukan rebase interaktif, tetapi mengklaim ada beberapa file yang dimodifikasi, jadi tidak akan membiarkan saya melakukannya sekarang. Saya mencoba segalanya untuk kembali ke repositori bersih, tetapi tidak ada yang berhasil. Tidak ada jawaban lain yang membantu. Tapi ini akhirnya berhasil ...
Ledakan! Bersihkan repositori. Masalah terpecahkan. Kemudian saya hanya harus membuang komit terakhir ketika saya melakukan saya
rebase -i
dan akhirnya semuanya bersih lagi. Aneh!sumber
Kalau-kalau itu membantu orang lain, mungkin ada penyebab lain untuk masalah ini: versi Git yang berbeda. Saya menggunakan versi default yang diinstal dari Git pada kotak Ubuntu 18.04 (Bionic Beaver) dan semuanya bekerja dengan baik, tetapi ketika mencoba untuk mengkloning repositori menggunakan Git pada Ubuntu 16.04, beberapa file muncul sebagai dimodifikasi.
Tidak ada jawaban lain di sini yang memperbaiki masalah saya, tetapi memutakhirkan versi Git agar sesuai dengan kedua sistem memang memperbaiki masalah.
sumber