我想将许多 git 存储库从旧的 Windows 7 计算机(git 2.6.3.windows.1)转移到 Ubuntu 16.04 下的新计算机(git 2.7.4)。由于并非所有存储库都有远程存储库,我决定直接复制它们。这应该可行。但是,所有存储库中的所有跟踪文件都变为未暂存文件。实际上,可能有些文件在存储库转移之前未提交,但大多数文件已提交。
如果我使用命令查看diff
在 repo 传输之前提交的文件:
$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
它返回对该文件实际提交的最后一个提交的引用。上例中的提交是 repo 中的第一个提交。
因此,由于某种原因,git 拒绝识别已提交的文件,而是将它们链接到它们实际提交的最后一次提交。
这是不同 git 版本或平台不兼容的问题还是其他问题?如何解决这个问题而不破坏 repos?
答案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 上克隆 repo 怎么样?(本来想评论的,但我还没有 50 个代表)
如果您需要帮助,我可以提供更多说明。