Apa yang mungkin Anda lakukan untuk menyebabkan ini:
Hal semacam ini terjadi ketika Anda pergi untuk menggedor program kecil. Anda akan mengubah sesuatu yang sudah berfungsi, jadi Anda merapalkan mantra tingkat-3 yang tidak dapat dibatalkan selamanya:
machine1:~/proj1> git init
dan Anda mulai menambahkan / melakukan. Tapi kemudian , proyek mulai lebih terlibat dan Anda ingin mengerjakannya dari komputer lain (seperti PC atau laptop di rumah), jadi Anda melakukan sesuatu seperti
machine2:~> git clone ssh://machine1/~/proj1
dan itu klon dan semuanya terlihat bagus, dan Anda bekerja pada kode Anda dari machine2.
Kemudian ... Anda mencoba untuk mendorong komit Anda dari machine2, dan Anda mendapatkan pesan peringatan di judul.
Alasan untuk pesan ini adalah karena repo git yang Anda gunakan agaknya dimaksudkan untuk digunakan hanya untuk folder itu di machine1. Anda dapat mengkloningnya dengan baik, tetapi mendorong dapat menyebabkan masalah. Cara "tepat" untuk mengelola kode di dua lokasi berbeda adalah dengan repo "kosong", seperti yang disarankan. Repo telanjang tidak dirancang untuk melakukan pekerjaan apa pun di dalamnya, ini dimaksudkan untuk mengoordinasikan komitmen dari berbagai sumber. Inilah mengapa jawaban berperingkat teratas menyarankan menghapus semua file / folder selain dari folder .git setelah Andagit config --bool core.bare true
.
Mengklarifikasi jawaban teratas: Banyak komentar untuk jawaban itu mengatakan sesuatu seperti "Saya tidak menghapus file non-.git dari machine1 dan saya masih dapat melakukan dari machine2". Betul. Namun, file-file lain sepenuhnya "bercerai" dari git repo, sekarang. Coba git status
di sana dan Anda akan melihat sesuatu seperti "fatal: Operasi ini harus dijalankan di pohon kerja". Jadi, saran untuk menghapus file tidak agar komit dari machine2 akan bekerja ; itu agar Anda tidak bingung dan berpikir bahwa git masih melacak file-file itu. Tetapi, menghapus file adalah masalah jika Anda masih ingin mengerjakan file pada machine1, bukan?
Jadi, apa yang harus Anda lakukan?
Tergantung pada seberapa banyak Anda berencana untuk masih bekerja pada machine1 dan machine2 ...
Jika Anda selesai mengembangkan dari machine1 dan telah memindahkan semua pengembangan Anda ke machine2 ... lakukan saja apa yang disarankan oleh jawaban teratas: git config --bool core.bare true
dan kemudian, secara opsional, hapus semua file / folder selain .git dari folder itu, karena mereka Sedang tidak terlacak dan kemungkinan menyebabkan kebingungan.
Jika pekerjaan Anda pada machine2 hanya satu kali, dan Anda tidak perlu melanjutkan pengembangan di sana ... maka jangan repot-repot membuat repo telanjang; hanya ftp / rsync / scp / etc. file Anda dari mesin * 2 * di atas file di mesin * 1 *, komit / dorong dari mesin * 1 *, dan kemudian hapus file dari mesin * 2 *. Yang lain menyarankan untuk membuat cabang, tapi saya pikir itu sedikit berantakan jika Anda hanya ingin menggabungkan beberapa pengembangan yang Anda lakukan satu kali dari komputer lain.
Jika Anda perlu melanjutkan pengembangan pada machine1 dan machine2 ... maka Anda perlu mengatur semuanya dengan benar. Anda perlu mengubah repo Anda menjadi telanjang, maka Anda harus membuat kloning itu pada machine1 agar Anda dapat bekerja . Mungkin cara tercepat untuk melakukan ini adalah dengan melakukan
machine1:~/proj1> git config --bool core.bare true
machine1:~/proj1> mv .git/ ../proj1.git
machine1:~/proj1> cd ..
machine1:~> rm -rf proj1
machine1:~> git clone proj1.git
machine1:~> cd proj1
Sangat penting: karena Anda telah memindahkan lokasi repo dari proj1 ke proj1.git, Anda perlu memperbarui ini dalam file .git / config pada machine2 . Setelah itu, Anda dapat melakukan perubahan dari mesin2. Terakhir, saya mencoba untuk menyimpan repo kosong saya di lokasi pusat, jauh dari pohon kerja saya (yaitu jangan meletakkan 'proj1.git' dalam folder induk yang sama dengan 'proj1'). Saya menyarankan Anda untuk melakukan hal yang sama, tetapi saya ingin menjaga langkah-langkah di atas sesederhana mungkin.