190

进行克隆时是否有要传递的标志git,例如不要克隆.git目录?.git如果不是,那么在克隆后删除目录的标志怎么样?

4

5 回答 5

270

利用

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

由于您只想要文件,因此不需要将其视为 git repo。

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

这仅适用于本地路径和远程 ssh/rsync 路径,如果远程服务器仅提供 git:// 或 https:// 访问,则可能无法正常工作。

于 2012-07-16T03:04:30.783 回答
20

或者,如果您安装了Node.js,则可以使用以下命令:

npx degit GIT_REPO

npx随 Node 一起提供,它允许您运行基于二进制节点的包而无需先安装它们(或者,您可以先degit使用全局安装npm i -g degit)。

Degit是由 Svelte 和 Rollup 的创建者 Rich Harris 创建的工具,他使用该工具通过克隆存储库而不保留 git 文件夹来快速创建新项目。但它也可以用来克隆任何回购一次......

于 2020-03-18T22:10:31.453 回答
3

对于那些怀疑解决方案的人--depth 1因为它仍然下载.git目录并且您需要在之后手动删除它,也许您需要知道git clone 的实际工作原理

当你通常克隆一个 repo 时,git 将你所有的文件(跨越提交)下载到.git目录中。当您使用 克隆时--depth 1,git 只会将最新版本的文件下载到.git. 之后,git 将checkout或从工作目录中检索这些文件.git(不再下载)。

并且通常,因为里面的文件对象是压缩的,你会通过下载文件而不是下载未压缩.git的文件来节省更多的带宽。git clone --depth 1对于一些网速慢的人来说,这是值得的(需要运行rm -rf)。

我个人认为git archive解决方案更好,但由于 GitHub 不支持它,因此--depth 1是可行的方法。

于 2021-03-22T16:26:06.387 回答
-1

你总能做到

git clone git://repo.org/fossproject.git && rm -rf fossproject/.git
于 2012-07-16T02:34:17.787 回答