使用 Git,是否可以在不克隆 repo 的情况下下载修订版?
With Git, is it possible to download a revision without cloning the repo?
基本上,我想下载特定版本的工作树而不克隆任何东西。特别是,我不希望在生成的下载中有任何 .git 目录。另一种思考我所要求的方法是裸仓库的逆向:裸工作树。
当您只想使用代码或数据而不打算修改它或玩弄历史时,用例非常简单。
我知道 git clone --depth 1
,但根据我的经验,克隆的存储库仍然是单独的工作树的两倍。
git archive
可以胜任
尝试:git archive -vvv --remote=<REPO_URL> -o output.zip <REF>
请注意:REF
应该只是一个命名的 ref - 分支、标签等。它不允许您选择特定的提交。
更新
下载并解压 oneliner
$ git archive -vvv --remote=<REPO_URL> -o archive.tar <REF> && tar -xvvf archive.tar && rm archive.tar
更新 2
更好的单线
$ git archive -vvv --remote=<REPO_URL> <REF> | tar -xvf -
您可以使用 git archive
的 --prefix
标志来添加前缀目录,或者您可以参考 tar
文档将内容提取到其他目录。
例如
$ git archive -vvv --prefix=stack/ --remote=<REPO_URL> <REF> | tar -xvf -
将 repo 的内容提取到 stack
目录中。
基本上,我想下载特定版本的工作树而不克隆任何东西。特别是,我不希望在生成的下载中有任何 .git 目录。另一种思考我所要求的方法是裸仓库的逆向:裸工作树。
当您只想使用代码或数据而不打算修改它或玩弄历史时,用例非常简单。
我知道 git clone --depth 1
,但根据我的经验,克隆的存储库仍然是单独的工作树的两倍。
git archive
可以胜任
尝试:git archive -vvv --remote=<REPO_URL> -o output.zip <REF>
请注意:REF
应该只是一个命名的 ref - 分支、标签等。它不允许您选择特定的提交。
更新
下载并解压 oneliner
$ git archive -vvv --remote=<REPO_URL> -o archive.tar <REF> && tar -xvvf archive.tar && rm archive.tar
更新 2
更好的单线
$ git archive -vvv --remote=<REPO_URL> <REF> | tar -xvf -
您可以使用 git archive
的 --prefix
标志来添加前缀目录,或者您可以参考 tar
文档将内容提取到其他目录。
例如
$ git archive -vvv --prefix=stack/ --remote=<REPO_URL> <REF> | tar -xvf -
将 repo 的内容提取到 stack
目录中。