如何从其zip中克隆git存储库

时间:2013-03-28 12:19:29

标签: git github zip git-clone

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

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

有没有办法使用这个由git clone创建的zip,所以我可以推,拉等...?

5 个答案:

答案 0 :(得分:23)

相关帖子here提供了抓取.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
    
  • 这里是repo的日志... repo location - 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.
    

答案 1 :(得分:12)

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

  • 解压缩存储库

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

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

    $ git pull
    

实际上,似乎github 的“zip”下载不包含.git目录,所以这没有帮助: - (

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

答案 2 :(得分:6)

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

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>&amp; <repo>使用您的github用户名和回购名称;)

答案 3 :(得分:1)

克隆的唯一 zip-like 替代方法是交换"bundles",但我担心github不会提供捆绑包的创建/下载。

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

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

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

在任何情况下,似乎你解决这个问题的唯一方法就是找到一个快速可靠的链接并使用它进行初始下载。

但请注意,如果您没有完整的历史记录,事情会发生变化。然后,您可以通过将“--depth”命令行参数传递给git clone来使用所谓的“浅层克隆”。

答案 4 :(得分:0)

根据您的用例,初始化可能不是走的路。如果有一个很大的存储库(我的存储空间是16GB并且需要Ineeded来完成),这将特别繁琐,并且实际上会浪费本地refs+objects,如果您的档案文件代表一个远程文件,而没有已经存在了。

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

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

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

您要保留对象和参考的存储库布局,这些存储库布局在远程中不再存在或您不想复制(例如,它们是大型图像资产)。因此,您不想初始化和拉动,尤其是如果您没有遥控器了。

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

运行git config --local -l来验证未在存储库中本地设置提交身份,并以不需要的方式更改覆盖全局设置的所有键。

现在,它已经配置好,就好像对待您自己的存储库一样(因为是这样),git被设计为可分布式工作,因此一旦您更改任何本地配置,它实际上就好像被克隆了一样。剩下的唯一一件事就是您必须确保正确设置了遥控器。

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

如果您有现有的远程系统信息库,请将其添加为远程系统并提取。归档分支可能指向错误的URL,具体取决于归档的时间是多久以前的;如果是这种情况,请使用git remote将其分配到新位置或删除任何无效的URL。

一旦设置了遥控器,就可以获取并拉动它以获取最新信息。如果有分离的HEAD,请签出所需的分支。如果已存档的存储库的历史记录与远程记录有所不同,则git会产生合并冲突,请按正常方式解决,并在必要时存储更改。