我正在尝试在github上克隆一个远程存储库,但是它很大并且我的连接似乎不够稳定,所以我无法成功克隆它。
但是我已经成功下载了存储库的 .zip。
有没有办法使用这个 zip,因为它是由 git clone 创建的,所以我可以推、拉等。
此处的相关帖子提供了获取.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.
如果您已经下载了存储库(包括.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 目录并以某种方式获取它......
虽然接受的答案可以解决问题,但这似乎更直截了当。
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 名称;)
克隆的唯一类似 zip 的替代方法是交换“捆绑包”,但恐怕 github 不提供捆绑包的创建/下载。
可从 github 下载的 zip 存档只是您的存储库历史记录(通常是分支的尖端)的一个特定提交的快照,它不包含任何历史记录——这个工具旨在自动为您的代码库的用户提供 (不是开发人员!),可以方便地下载项目源代码的快照。请注意,单纯的用户,例如为操作系统打包软件的下游维护者,通常不会克隆整个历史记录,而是使用 tarball。
换句话说,下载 zip 存档就像git archive
在远程端运行,然后将生成的文件传递给您。
另请注意,托管在 github(和其他 Git 托管服务提供商)上的存储库是“裸”的,也就是说,它们不包含“.git”子目录。
无论如何,解决这个问题的唯一方法似乎是找到一个快速可靠的链接并使用它进行初始下载。
但请注意,如果您对没有完整的历史记录感到满意,情况就会发生变化。然后,您可以通过将“--depth”命令行参数传递给git clone
.
根据您的用例,初始化可能不是要走的路。如果有一个非常大的存储库(我的存储库是 16GB 并且需要这样做),这将特别乏味,并且实际上refs+objects
如果您的存档代表一个远程不再存在的存档,那么这将是不好的。
您需要分两步复制存储库:
目的是减少必须从远程克隆或无法从不再存在的远程重新创建的对象的数量。此外,您希望您的配置不与最初创建存储库的本地配置文件冲突
您希望为远程中不再存在或您不想复制的对象和引用保留存储库布局(例如,它们是大图像资产)。出于这个原因,你不想初始化和拉动,特别是如果你没有遥控器了。
相反,存储库已经处于可接受的状态,引用和对象完好无损。唯一的问题可能是遥控器不再正确设置并且您的配置可能设置不正确。
运行git config --local -l
以验证提交标识未在存储库中本地设置,并以您不希望的方式更改任何覆盖全局设置的键。
现在它已配置好,现在将存储库视为您自己的(因为它是),git 被设计为分布式工作,因此一旦您更改任何本地配置,它实际上与克隆它没有什么不同。剩下的唯一事情是您必须确保您的遥控器设置正确。
如果您没有远程但希望创建一个,请使用在远程服务器上创建它,git init --bare
然后像往常一样添加一个远程并推送所有 refs git push --all
。使存储库裸露意味着它将接受第一次推送,而不会抱怨历史分歧。
如果您有现有的远程存储库,请将其添加为远程并拉取。存档分支可能指向错误的 url,具体取决于存档的制作时间,如果是这种情况,请使用git remote
将它们分配到新位置或删除任何无效的 url。
一旦设置了遥控器,就可以获取并拉取最新版本。如果有分离的 HEAD,请检查所需的分支。如果归档存储库的历史与远程不同,git 将产生合并冲突,正常解决,必要时隐藏更改。