将本地目录与现有git存储库同步

时间:2013-12-06 02:51:10

标签: git github

标题可能听起来像是重复但我找不到我特定问题的答案。

我想在本地计算机上克隆一个git存储库。但是,当我尝试使用shell执行此操作时,我收到错误。大多数文件正在检出但由于某种原因,其中一个图像文件导致了问题,我收到错误“致命:无法检查工作树”和“警告:克隆成功,但结帐失败”。所以我现在做的是从github下载repo文件作为zip文件并将它们解压缩到我的本地目录中。所以现在我的本地目录中有所有文件,但是本地目录没有连接到github上的repo。是否有命令可以实现这一目标?

2 个答案:

答案 0 :(得分:14)

这个问题似乎不完整。在这种情况下,git clone的输出应如下所示:

<some errors specific to your situation here>
...
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry the checkout with 'git checkout -f HEAD'

首先,特定错误(在fatal: ...上方的消息中)应该有助于了解发生了什么以及如何解决它。

其次,您可以按照说明操作,运行git status查看已签出的内容,然后尝试git checkout -f HEAD进行修复。


我见过warning: Clone succeeded, but checkout failed.的一些原因:

  • 存储库包含符号链接,您要签出的文件系统不支持符号链接。使用GitHub仓库的拉链,查看下面可能有用的替代方案。

  • 存储库包含一些深层目录层次结构,这样在当前目录级别进行检出会导致路径太长,导致本地文件系统不支持。尝试git clone到您有权访问的最短路径。例如文件系统根目录。克隆成功后,您可以尝试将其移动到其他位置。如果这不起作用,那么下面的技术也不会起作用,甚至不需要尝试。

  • 其他?最好包括在问题中。下面的技术可能会或可能不会起作用,我不知道确切的原因。


失败的git clone的结果应该是至少部分完整的工作树。由于存储库来自GitHub,您可以下载内容的zip,您可以在失败的克隆之上解压缩。结果应该是一个工作树,其内容匹配master,你也将拥有Git历史记录,如“Clone succeeded”消息所暗示的那样。 git status可能会报告某些更改,可能是由于常规文件替换了符号链接,或者是不同的文件系统权限,但似乎这是您希望通过问题覆盖的状态。


作为获取存储库历史记录的另一种替代方法, 您可以将下载的zip初始化为新的Git存储库, 添加远程存储库,获取并重置它:

unzip project.zip
cd project
git init
git remote add origin url_on_github
git fetch origin
git reset origin/master
git status

git fetch步骤将获取历史记录。如果您在下载zip后没有对master进行新的提交,那么工作树的内容应该与origin/master的最新内容相同。 git reset origin/master将使工作树与其对应的历史记录中的点相关联。

理想情况下git status会告诉您工作树没有变化。 根据{{​​1}}失败的原因,情况可能并非总是如此。您可以尝试使用git clone进行修复,但可能会因同样的错误而失败。

答案 1 :(得分:0)

如果你在Windows上,还要检查检查是否由于路径长度过长而失败。