不带.git目录的Git克隆

iq3niunx  于 2023-06-20  发布在  Git
关注(0)|答案(9)|浏览(448)

在执行克隆时,是否有一个标志要传递给git,比如不要克隆.git目录?如果没有,那么在克隆后删除.git目录的标志如何?

uwopmtnx

uwopmtnx1#

使用

git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo
rm -rf ./dirformynewrepo/.git
  • 深度选项将确保复制尽可能少的历史以获取该存储库。
  • 分支选项是可选的,如果不指定,将获得默认分支。
  • 第二行将使您的目录dirformynewrepo不再是Git仓库。
  • 如果你正在做递归子模块克隆,深度和分支参数不适用于子模块。
zzzyeukh

zzzyeukh2#

因为你只需要文件,所以你不需要把它当作git仓库。

rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .

而且这只适用于本地路径和远程ssh/rsync路径,如果远程服务器只提供git://或https://访问,它可能不起作用。

3b6akqbq

3b6akqbq3#

或者,如果安装了Node.js,则可以使用以下命令:
npx degit GIT_REPO
npx随Node一起提供,它允许您运行基于节点的二进制包,而无需先安装它们(或者,您可以先使用npm i -g degit全局安装degit)。
Degit是Rich Harris创建的一个工具,他是Svelte和Rollup的创建者,他用它来快速创建一个新项目,方法是克隆一个存储库,而不保留git文件夹。但它也可以用来克隆任何回购一次。。

fdbelqdn

fdbelqdn4#

git clone --separate-git-dir=$(mktemp -u) --depth=1 <repo> <dir> && rm <dir>/.git

我更喜欢这个解决方案,因为我不喜欢自动执行rm -rf操作。它只是rm的. git文件,这意味着它永远不会意外地rm -rf错误的. git目录。
它依赖于mktemp命令,所以它可以在 * nix系统上工作(从我所看到的来看,这需要进一步的工作,以便在MacOS上工作,所以如果有人想评论一个工作解决方案,我会添加它)
在zsh中,我将其作为一个函数,以确保定义了dir值:

alias np='node-project'
function node-project() {
  dir=${1:-.}
  git clone --separate-git-dir=$(mktemp -u) --depth=1 <my-node-repo> $dir && rm $dir/.git
}

说明

--separate-git-dir标志允许您指定. git目录的路径。生成的"project"将有一个. git文件(不是目录),其内容将是一行:

gitdir: <the dir you specified in the flag>

因为我们在mktemp命令中使用了一个tmp目录,所以实际的.git目录内容将以一个tmp目录结束。我们还使用了--depth=1,因此它在tmp目录上占用的空间更少。

vi4fp9gy

vi4fp9gy5#

对于那些怀疑the --depth 1 solution的人,因为它仍然下载.git目录,你需要手动删除它之后,也许你需要知道how git clone actually works
当你正常克隆一个repo时,git会将你所有的文件(跨提交)下载到.git目录。当你使用--depth 1进行克隆时,git只会将最新版本的文件下载到.git中。之后,git会将checkout或从.git中检索这些文件到工作目录中(不再下载)。
通常情况下,因为.git中的文件对象是压缩的,所以您可以通过使用git clone --depth 1下载文件而不是下载未压缩的文件来保存更多的带宽。而对于一些互联网速度慢的人来说,这是值得的价格(需要运行rm -rf)。
我个人认为the git archive solution更好,但由于GitHub不支持它,所以--depth 1是一种选择。

5f0d552i

5f0d552i6#

git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo1
rd /s /q  .\dirformynewrepo1\.git

这适用于windows系统

vaj7vani

vaj7vani7#

git archive --remote已经实现了这一点。

31moq8wy

31moq8wy8#

如果仓库在GitHub上,您可以简单地下载任何标签的ZIP文件:

curl -L https://github.com/<user>/<repo-name>/archive/refs/tags/v1.2.3.zip | tar xz

这将下载并解压缩存储库。内容将在<repo-name>-1.2.3中,没有.git文件夹。

tgabmvqs

tgabmvqs9#

你总是可以

git clone git://repo.org/fossproject.git && rm -rf fossproject/.git

相关问题