Git克隆:只是文件,请?

我想克隆一个GIT仓库, .git是以一个.git目录结束。 换句话说,我只是想要的文件。 有没有办法做到这一点?

git clone --no-checkout与我想要的完全相反(只给了我.git目录)。

我试图做一个远程回购,而不是本地的,这意味着这不是一个重复的“ 如何做一个”git出口“(如”svn导出“) (即使解决scheme可能最终成为相同)。

git命令将会是你所寻找的最接近的git archive
请参阅备份使用git的项目 :它将在档案中包含所有文件(包括使用git-archive-all脚本的子模块)

然后你可以在任何地方使用这个压缩文件,只提供文件,不需要.git目录。

 git archive --remote=<repository URL> @ | tar -t 

如果您需要从第一级开始的文件夹和文件:

 git archive --remote=<repository URL> @ | tar -t --exclude="*/*" 

仅列出远程回购的第一级文件夹:

 git archive --remote=<repository URL> @ | tar -t --exclude="*/*" | grep "/" 

另一个select是做一个浅层克隆(如下所述),但在其他地方find.git文件夹。

 git --git-dir=/path/to/another/folder.git clone --depth=1 /url/to/repo 

repo文件夹将只包含文件,不包含.git

注意: git --git-dirgit命令的一个选项,而不是git clone


使用Git 2.14.X / 2.15(2017年第4季度)更新: 确保避免添加空文件夹

git archive ”,尤其是与pathspec一起使用时,在其输出中存储了一个空目录,即使Git本身从不这样做。
这已被修复。

参见RenéScharfe(“)的 提交4318094 (2017年9月12日) 。
build议: 杰夫·金( peff ) 。
(由Junio C gitster合并- gitster -在2017年9月25日的gitster 提交 )

archive :不要将空目录添加到归档

虽然git没有跟踪空目录,但git archive可能会被骗入一些档案。
虽然这是由对象数据库支持的,但它不能在索引中表示,因此不太可能在野外发生。

由于空目录不被git支持,它们也不应该写入档案。
如果真的需要一个空目录,那么可以通过在其中放置一个空的.gitignore文件来进行跟踪和归档。

 git archive --format=tar --remote=<repository URL> HEAD | tar xf - 

从这里采取

你可以创build一个浅层克隆,只获得最后几个版本:

  git clone --depth 1 git://url 

那么要么简单地删除.git目录,要么使用git archive来导出你的树。

为什么不执行克隆,然后删除.git目录,以便只有一个裸工作副本?

编辑:或者实际上为什么要使用克隆呢? 当你说你想要一个git仓库但没有.git目录时,有点混乱。 如果你的意思是你只是想要一个树状态的副本,那么为什么不在shell中做cp -R而不是git clone,然后删除.git

这听起来像你只是想要一个源代码的副本。 如果是这样,为什么不复制目录并从副本中排除.git目录?