将本地目录与现有的git仓库同步

10
标题可能听起来有些重复,但我找不到解决我的问题的答案。
我想在本地机器上克隆一个git仓库。然而,当我尝试使用shell进行此操作时,出现错误。大多数文件都被检出,但由于某种原因,其中一个图像文件引起了麻烦,我收到了“fatal: unable to checkout working tree”和“warning: clone succeeded, but checkout failed”的错误。所以现在我从github下载了repo文件作为zip文件,并将它们解压到了我的本地目录中。所以现在我在本地目录中拥有所有文件,但本地目录与github上的repo没有连接。是否有一条命令可以完成这个任务?
2个回答

24

这个问题似乎不完整。在这种情况下,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存储库的zip。 - 存储库包含某些深度目录层次结构,当前目录级别的检出结果是太长的路径,因此本地文件系统不支持。尝试对您可以访问的最短路径执行“git clone”。例如,文件系统根目录。一旦克隆成功,您可以尝试将其移动到其他位置。如果这样做无效,则下面的技术也将不起作用,甚至不需要尝试。 - 其他原因?最好在问题中包含详细信息。如果不知道确切原因,则无法确定下面的技术是否有效。
由于存储库来自GitHub并且可以下载内容的zip,因此失败的“git clone”的结果应该是一个至少部分完整的工作树。您可以将其解压缩到失败的克隆上。结果应该是一个工作树,其内容与“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 命令会告诉你工作树没有任何更改。但这并不总是情况,取决于 git clone 失败的原因。你可以尝试使用 git checkout -f HEAD 命令来修复,但很可能会出现相同的错误。


1
为什么要下载zp文件,如果pull可以工作的话?理想情况下,应该有一种方法可以在不使用pull的情况下同步zip下载。 - Siddharth
我认为我们需要进行拉取操作,以获取一段时间前下载的项目中的最新消息。这是一个非常普遍的问题。 - WebComer
@Siddharth,我重写了整个答案,它之前的完成程度并不好。即便如此,最好还是知道具体错误并进行调试,但我不指望现在,原问题已经过去4年了... - janos
这个方法虽然可行,但是我却想提交仓库中的每一个文件,而且修改后的版本和原始版本完全相同。所以文件没有任何变化,但是在我的情况下,Sourcetree显示所有行都是红色的,然后是完全相同的绿色行。我错在哪里了?如何解决这个问题? - Flion
1
@Flion 当差异视图显示所有行都已更改,但对人眼来说它们看起来相同时,这可能是因为行结尾不同。很可能仓库中的文件具有\n作为行结尾,在您的本地工作树中则为\n\r。尝试从一个文件中删除\r行结尾,并查看是否有所帮助。然后从所有文件中删除。 - janos

0

如果你使用的是Windows系统,请检查是否由于路径过长而导致结账失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接