Transfer git repositori dengan menyalin

0

Saya ingin mentransfer banyak repositori git dari mesin Windows 7 lama saya (git 2.6.3.windows.1) ke yang baru di bawah Ubuntu 16.04 (git 2.7.4). Karena tidak semua dari mereka memiliki repo jarak jauh, saya memutuskan untuk menyalinnya. Ini seharusnya bekerja. Namun, semua file yang dilacak di semua repo menjadi tidak dipentaskan. Sebenarnya ada kemungkinan beberapa dari mereka yang tidak berkomitmen sebelum repo mentransfer tetapi mayoritas dari mereka berkomitmen.

Jika saya melihat difffile yang dilakukan sebelum repo mentransfer dengan perintah:

$git log -p -1 .gitignore
commit c566830cd3ffdf96556d29aee8dd1dc95d359872
Author: Pavel <[email protected]>
Date:   Fri May 13 18:07:25 2016 +0300

    Start

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2535fe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+__pycache__
+.idea
+test

itu mengembalikan referensi ke komit terakhir di mana file ini sebenarnya dilakukan. Komit dalam contoh di atas adalah yang pertama di repo.

Jadi, untuk beberapa alasan git menolak untuk mengenali file yang dikomit tetapi menghubungkannya dengan komit terakhir di mana mereka sebenarnya dikomit.

Apakah ini masalah ketidakcocokan berbagai versi git atau platform atau sesuatu yang lain? Dan bagaimana cara mengatasi masalah ini dan jangan rem repo?

DrDom
sumber

Jawaban:

2

Apakah ini perubahan yang sebenarnya? Menurut saya git hanya mengeluh bahwa atribut file berbeda, yang pasti akan terjadi antara OS yang berbeda (karena Windows dan Linux memiliki sistem file yang berbeda dengan metadata yang berbeda).

Bagaimana kalau membuat klon "telanjang".

TENTANG WINDOWS

Buka beberapa folder, misalnya:

cd c:\mycode

Kloning repo Anda ke folder ini menggunakan opsi kosong , ini berarti TIDAK ADA yang akan diperiksa, cukup metadata:

git clone --bare <path_of_your_repo>

Sekarang, buka zip folder yang dihasilkan (mis. "C: \ mycode \ <folder> .git" ) dan transfer secara manual ke Linux.

PADA LINUX

Di Linux, salin dulu folder zip dari Windows, dan unzip. Sekarang, clone ke beberapa folder baru, misalnya:

mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git    <--- i.e. this is the folder copied/unzipped from Windows

Dan, Anda sekarang dapat mengubah asal jika Anda ingin membuang folder Windows yang tidak di-zip.

git remote set-url origin <new_origin>

ATAU, hapus saja semuanya:

git remote rm origin
jehad
sumber
Tidak, ini bukan perubahan yang sebenarnya, jadi tebakan Anda mungkin benar. Terima kasih atas solusi yang disarankan, sepertinya masuk akal. Namun, saya tidak dapat memeriksanya sekarang, tetapi ketika saya akan memiliki akses ke mesin Windows saya akan memeriksanya dan melaporkan.
DrDom
Ya, itu berhasil! Saya memiliki salinan repo di mesin Ubuntu saya, saya mengkloninginya dengan opsi kosong dan kemudian mengkloning kembali dari repo yang diperoleh. Jadi ini dapat dilakukan bahkan setelah repo disalin pada mesin tujuan Ubuntu. Tentu saja saya kehilangan informasi tentang repo jarak jauh yang nyata tetapi ini bukan masalah besar untuk memperbaikinya. Terima kasih!
DrDom
Senang itu membantu. Saya telah membaca dan bereksperimen dengan cara "telanjang" repo yang ada, sehingga Anda tidak menghancurkan metadata seperti asal. Sepertinya itu hanya dapat dilakukan dengan menghapus barang secara manual dan mengganti nama folder, dan saya belum menemukan cara sederhana untuk melakukannya (harus ada beberapa perintah rahasia untuk membuat repo). Jika seseorang tahu caranya, maka itu akan mengurangi solusi saya menjadi dua langkah sederhana; # 1 telanjang repo dan, # 2, salin repo telanjang ke mesin / lokasi lain.
jehad
0

Bagaimana dengan mendorong mereka ke github, lalu mengkloning repo di Ubuntu Anda? (Akan berkomentar, tapi saya belum memiliki 50 rep)

Jika Anda memerlukan bantuan dengan itu saya dapat memberikan lebih banyak instruksi.

nzaleski
sumber
Terima kasih, itu adalah solusi yang jelas, tetapi ada banyak repo dan tidak semuanya publik dan dapat diunggah di github. Salinan sederhana biasanya berfungsi, tetapi tidak dalam kasus ini dan saya ingin memahami mengapa dan memperbaikinya.
DrDom