我想將許多 git 儲存庫從我的舊 Windows 7 電腦 (git 2.6.3.windows.1) 轉移到 Ubuntu 16.04 (git 2.7.4) 下的新電腦。由於並非所有人都有遠端儲存庫,我決定簡單地複製它們。這應該有效。但是,所有儲存庫中的所有追蹤檔案都已取消暫存。實際上,其中可能有一些在回購協議轉移之前沒有提交,但大多數都已提交。
如果我使用命令查看diff
在儲存庫傳輸之前提交的檔案:
$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
它會傳回對該文件實際提交的最後一次提交的引用。上面範例中的提交是儲存庫中的第一個提交。
因此,由於某種原因,git 拒絕識別已提交的文件,而是將它們連結到實際提交的最後一次提交。
是不同git版本或平台的不相容問題還是其他什麼問題?如何解決這個問題並且不停止回購?
答案1
這些是實際的改變嗎?在我看來,git 只是抱怨檔案的屬性不同,這在不同的作業系統之間肯定會發生(因為 Windows 和 Linux 有不同的檔案系統和不同的元資料)。
創建一個“裸”克隆怎麼樣?
在 Windows 上
轉到某個資料夾,例如:
cd c:\mycode
使用以下命令將您的儲存庫本機複製到此資料夾中裸選項,這意味著不會檢查任何內容,只會檢查元資料:
git clone --bare <path_of_your_repo>
現在,壓縮生成的資料夾(例如“c:\mycode\<資料夾>.git”)並手動將其傳輸到Linux。
在 Linux 上
在 Linux 上,先從 Windows 複製壓縮資料夾,然後解壓縮。現在,克隆到一些新資料夾,例如:
mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git <--- i.e. this is the folder copied/unzipped from Windows
而且,如果您想丟棄解壓縮的 Windows 資料夾,現在可以更改來源。
git remote set-url origin <new_origin>
或者,將其完全刪除:
git remote rm origin
答案2
將它們推送到 github,然後在 Ubuntu 上克隆儲存庫怎麼樣? (本來想發表評論,但我還沒有 50 名代表)
如果您需要幫助,我可以提供更多說明。