我在usb棒上有一个git存储库,想把它复制到我的硬盘上。我试过用rsync -rXP
,cp
和ubuntu中的gui复制它,但是在复制版本上,所有提交似乎都已消失了。当我输入git log
或git reflog
时,我会
fatal: your current branch 'master' does not have any commits yet
文件 .git / logs / HEAD 显示所有提交但git无法看到它们。
如何在不丢失任何数据的情况下移动存储库?
EDIT1 + 3 + 5: 使用的命令:
rsync -rXP usb_folder/ hdd_folder
cp -rp usb_folder hdd_folder
(hdd_folder位于/ home)rsync -a usb_folder/ hdd_folder
sudo chown
和sudo chmod -v -R a+rwx usb_folder
+复制更改所有权。文件权限实际上并没有改变(事实证明这不适用于fat32文件系统,应该已知-.-')当我将存储库复制到同一个USB存储棒上的新文件夹时,提交仍然存在
EDIT2:
由于here提到的原因,我不想使用git clone
,因为我需要测试一堆未跟踪的文件
EDIT4:
可能已使用git for Windows创建了存储库。 Windows行结尾或版本的问题?虽然提交了usb棒上的提交
EDIT5:
这似乎是文件系统的问题(usb棒是fat32)和/或git for windows(存储库可能是用git for windows创建的)。我可以将存储库复制到Windows 10 pc,而git bash中的git log
将正确显示所有提交。如果我使用ubuntu子系统进行检查,所有提交都会消失(尽管某些文件因某种原因而被暂存)
答案 0 :(得分:0)
虽然基本的Git存储库格式没有太大变化,但一些重要的事情已经发生了变化。可能最重要的是,packfiles更普遍。特别是packed refs可能导致Git无法看到主人。
如果它们有显着差异,请确保它们匹配,可能是通过升级目的地。
如果不起作用,请使用git clone
。然后根据自己的喜好修复克隆。
虽然简单的cp -a
通常足以复制git repo,但可能存在导致问题的任何问题。由于您从Windows迁移到Unit,因此它可能是行结尾。它可能是权限。可能是你的源和目标git版本是如此不同,你的Ubuntu版本并不完全理解它。
git clone
将为您处理这些内部git存储库格式问题。根据自己的喜好调整克隆所需的时间和精力远远少于找出副本无效的原因。
你可能不应该将你的repo复制到另一台机器,如果它处于这样一个活跃的开发中,你需要像reflog和stash这样的东西。如果这是一个大问题,请将旧回购保留一段时间。
复制活动的dev repo非常罕见,因此手动执行它并不是什么大问题。如果你发现自己做了很多,在我质疑你的工作流程发生了什么后,你可以编写一个脚本。
关于修复the individual concerns with cloning an active repo,以下是处理它们的方法。
它为克隆的存储库中的每个分支创建远程跟踪分支。
git remote rm origin
任何远程分支和其他引用都被完全忽略。
git remote -v
并使用git remote add
重新创建它们。你可能只有一个。
如果你有任何钩子,你就不会得到它们,你可能会忘记你拥有它们了!
复制.git/hooks/
。
更好的是,使用与克隆新存储库时使用的相同步骤来应用挂钩。无论是项目范围的程序,还是您自己的个人程序。如果挂钩对您或您的项目很重要,则应该有一个应用,更新和恢复它们的过程。
这也是为什么我不是客户端钩子成为工作流程一部分的忠实粉丝。他们适合个人剪裁,但确保每个人都有钩子。
您无法使用git reflog或其他方式获得“丢失”提交等。
(你也会失去藏匿处。)
您可以复制.git/logs/
,但我不是百分百确定。