59

我正在尝试在github上克隆一个远程存储库,但是它很大并且我的连接似乎不够稳定,所以我无法成功克隆它。

但是我已经成功下载了存储库的 .zip。

有没有办法使用这个 zip,因为它是由 git clone 创建的,所以我可以推、拉等。

4

5 回答 5

40

此处的相关帖子提供了获取.git目录并简化umläute提供的答案所需的信息:

  • .git通过克隆一个裸存储库来获取目录

    $ mkdir repo
    $ git clone --bare http://github/user/repo repo
    
  • 创建.git目录并移动克隆的文件

    $ mkdir repo/.git
    $ mv repo/* repo/.git
    
  • 解压存储库

    $ unzip repo.zip
    
  • 重新初始化存储库

    $ cd repo
    $ git init
    
  • 验证您已同步

    $ git pull
    
  • 重置 HEAD 以清理状态

    $ git reset HEAD
    
  • 这是回购的日志......回购位置 - http://github.com/udacity/fullstack-nanodegree-vm

    $ git log
    commit ebcbda650bc81d7f4856f5314a0689cea5b43086
    Merge: 574774b b5b787e
    Author: Karl Krueger <karl@udacity.com>
    Date:   Tue Apr 7 11:39:54 2015 -0700`
    
            Merge pull request #3 from pmallory/sharedDirAlert
    
            Add a login alert to explain how to access Vagrant's shared directory
    
    commit b5b787efdb1ecec0c3c9c7f9c0fd4732f984fcb3
    Author: Philip Mallory <philip@udacity.com>
    Date:   Mon Apr 6 15:40:32 2015 -0700`
    
           move the alert into the motd
    
    commit b8012f33c86b0d19fc4c2b972af092e88d00978f
    Author: Philip Mallory <philip@udacity.com>
    Date:   Mon Apr 6 14:32:01 2015 -0700`
    
           Add a login alert to explain how to access Vagrant's shared directory
    
    commit 574774ba29ccd661154431d5600240f090440c37
    Author: Lorenzo Brown <lorenzo@udacity.com>
    Date:   Wed Mar 11 14:08:02 2015 -0700`
    
           Update pg_config.sh
    
           Added installs for Auth&Auth
    
    commit 88fc5537b1a0017a1d76af4587a22412473809a4
    Author: Lorenzo Brown <lorenzo@udacity.com>
    Date:   Wed Mar 4 13:00:25 2015 -0800`
    
           Update and rename vagrant to vagrant/catalog/README.txt
    
    commit f978cdc14c62b7295d8da1a95452faaa1bd108b8
    Author: Lorenzo Brown <lorenzo@udacity.com>
    Date:   Wed Feb 4 11:06:03 2015 -0800`
    
           Update Vagrantfile
    
           switched to port forwarding on 8080
    
    commit d6a3a26578ef3c6d01d28abca76d817938892c7f
    Author: Lorenzo Brown <lorenzo@udacity.com>
    Date:   Tue Feb 3 14:52:34 2015 -0800`
    
           Update Vagrantfile
    
           Added:
    
           config.vm.network "forwarded_port", guest: 80, host: 8080
           config.vm.network "forwarded_port", guest: 5000, host: 5000
    
           FSF uses these two ports for lessons 2 & 3 respectively.
    
    commit 752a79e408c7328ef7f1766d1b97bb468ffed90a
    Author: Mike Wales <michael.wales@udacity.com>
    Date:   Mon Feb 2 11:21:29 2015 -0800`
    
           Removed .vagrant directory
    
    commit 5af9d19adf9ab19b1d886f6cc78e556f864b42dd
    Author: Mike Wales <michael.wales@udacity.com>
    Date:   Mon Feb 2 11:16:45 2015 -0800`
    
           Initial commit.
    
于 2015-08-03T06:49:26.597 回答
16

如果您已经下载了存储库(包括.git目录),这非常简单。

  • 解压缩存储库

    $ unzip repo.zip
    
  • 在您的存储库中配置一个remote指向克隆 URI

    $ cd repo
    $ git init
    $ git remote add origin https://github.com/user/repo.git
    
  • 重新同步存储库

    $ git pull
    

实际上,从 github 下载的“zip”似乎不包含该.git目录,所以这无济于事:-(

最好的选择可能是在具有稳定访问权限的机器上进行克隆,然后压缩 .git 目录并以某种方式获取它......

于 2013-03-28T12:49:31.730 回答
13

虽然接受的答案可以解决问题,但这似乎更直截了当。

unzip <repo>.zip
cd <repo>
git init
git add .
git remote add origin https://github.com/<user>/<repo>.git
git remote update
git checkout master

只需确保将<user>&替换<repo>为您的 github 用户名和您的 repo 名称;)

于 2016-08-12T02:38:21.743 回答
3

克隆的唯一类似 zip 的替代方法是交换“捆绑包”,但恐怕 github 不提供捆绑包的创建/下载。

可从 github 下载的 zip 存档只是您的存储库历史记录(通常是分支的尖端)的一个特定提交的快照,它不包含任何历史记录——这个工具旨在自动为您的代码库的用户提供 (不是开发人员!),可以方便地下载项目源代码的快照。请注意,单纯的用户,例如为操作系统打包软件的下游维护者,通常不会克隆整个历史记录,而是使用 tarball。

换句话说,下载 zip 存档就像git archive在远程端运行,然后将生成的文件传递给您。

另请注意,托管在 github(和其他 Git 托管服务提供商)上的存储库是“裸”的,也就是说,它们不包含“.git”子目录。

无论如何,解决这个问题的唯一方法似乎是找到一个快速可靠的链接并使用它进行初始下载。

但请注意,如果您对没有完整的历史记录感到满意,情况就会发生变化。然后,您可以通过将“--depth”命令行参数传递给git clone.

于 2013-03-29T16:29:13.710 回答
0

根据您的用例,初始化可能不是要走的路。如果有一个非常大的存储库(我的存储库是 16GB 并且需要这样做),这将特别乏味,并且实际上refs+objects如果您的存档代表一个远程不再存在的存档,那么这将是不好的。

您需要分两步复制存储库:

  1. “数据文件”(HEAD 修订版可能未暂存)
  2. 指数和对象,即。history+refs+objects :这会记录你的基线、增量、分支指针和标签。

目的是减少必须从远程克隆或无法从不再存在的远程重新创建的对象的数量。此外,您希望您的配置不与最初创建存储库的本地配置文件冲突

您希望为远程中不再存在或您不想复制的对象和引用保留存储库布局(例如,它们是大图像资产)。出于这个原因,你不想初始化和拉动,特别是如果你没有遥控器了。

相反,存储库已经处于可接受的状态,引用和对象完好无损。唯一的问题可能是遥控器不再正确设置并且您的配置可能设置不正确。

运行git config --local -l以验证提交标识未在存储库中本地设置,并以您不希望的方式更改任何覆盖全局设置的键。

现在它已配置好,现在将存储库视为您自己的(因为它是),git 被设计为分布式工作,因此一旦您更改任何本地配置,它实际上与克隆它没有什么不同。剩下的唯一事情是您必须确保您的遥控器设置正确。

如果您没有远程但希望创建一个,请使用在远程服务器上创建它,git init --bare然后像往常一样添加一个远程并推送所有 refs git push --all。使存储库裸露意味着它将接受第一次推送,而不会抱怨历史分歧。

如果您有现有的远程存储库,请将其添加为远程并拉取。存档分支可能指向错误的 url,具体取决于存档的制作时间,如果是这种情况,请使用git remote将它们分配到新位置或删除任何无效的 url。

一旦设置了遥控器,就可以获取并拉取最新版本。如果有分离的 HEAD,请检查所需的分支。如果归档存储库的历史与远程不同,git 将产生合并冲突,正常解决,必要时隐藏更改。

于 2018-10-21T04:04:27.833 回答