没有.git目录的Git克隆

时间:2012-07-16 02:26:17

标签: git version-control git-clone

  

可能重复:
  How to do a “git export” (like “svn export”)

执行克隆时是否有传递给git的标志,比如不克隆.git目录?如果没有,克隆后删除.git目录的标志怎么样?

5 个答案:

答案 0 :(得分:192)

使用

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

答案 1 :(得分:26)

由于您只需要这些文件,因此您无需将其视为git repo。

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

并且这仅适用于本地路径和远程ssh / rsync路径,如果远程服务器仅提供git://或https:// access,则它可能无效。

答案 2 :(得分:11)

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

Queue<int> q; q.enQueue(12345); q.enQueue(67890); q.printListForward();

npx degit GIT_REPO是Node附带的,它允许您运行基于二进制节点的二进制程序包而无需先安装它们(或者,您可以先使用npx在全局安装degit)。

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

答案 3 :(得分:0)

你可以随时

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

答案 4 :(得分:0)

对于那些怀疑 the --depth 1 solution 的人,因为它仍然下载 .git 目录并且您之后需要手动删除它,也许您需要知道 how git 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 是要走的路。