通过复制来转移 git 存储库

通过复制来转移 git 存储库

我想将许多 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 个代表)

如果您需要帮助,我可以提供更多说明。

相关内容