不带.Git目录的Git克隆

不带.Git目录的Git克隆,git,version-control,git-clone,Git,Version Control,Git Clone,进行克隆时是否有一个标志要传递给git,比如不要克隆.git目录?如果没有,那么在克隆后添加一个删除.git目录的标志怎么样?您可以随时这样做 git clone git://repo.org/fossproject.git && rm -rf fossproject/.git 因为您只需要这些文件,所以不需要将其视为git回购 rsync -rlp --exclude '.git' user@host:path/to/git/repo/ . 这只适用于本地路径和远程ssh/

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

您可以随时这样做

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

因为您只需要这些文件,所以不需要将其视为git回购

rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .
这只适用于本地路径和远程ssh/rsync路径,如果远程服务器只提供git://或https://访问,则可能无法使用

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

或者,如果已安装,则可以使用以下命令:

npx吉特回购协议

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

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

对于那些怀疑的人,因为它仍然下载
.git
目录,您需要在之后手动删除它,也许您需要知道

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

通常,由于
.git
中的文件对象是压缩的,因此您可以使用
git clone--depth 1
下载文件,而不是下载未压缩的文件,从而节省更多带宽。对于一些网速较慢的人来说,这是值得的(需要运行
rm-rf


我个人认为这样更好,但由于GitHub不支持它,
--depth 1
是一个不错的选择。

下载所有内容并稍后删除目录?例如,emacs在.git中有95%的1GB。因此--depth=1显然是这里的解决方案。当我进行depth时,仍然可以看到.git文件夹=1@AryehArmon你当然看到了。使用--depth并不能阻止.git的创建,它只是使它成为一个浅拷贝,因此.git的大小要小得多。但是,如果你根本不想让它出现在那里,那么你需要在事后将其删除。这个问题不是一个骗局。此问题询问如何在没有
.git
目录的情况下克隆(远程)存储库。所谓的被骗者询问如何导出已有
.git
目录.Agree的现有存储库。您不能像“可能重复”的解决方案所说的那样
git archive
远程存储库。对于那些感兴趣的人来说,这是Bash和zsh中功能的一部分。有没有办法获得repo中所有分支的深度=1?不只是主分支或指定分支您可以使用--no single branch选项来实现这一点,因为--depth意味着--single branch,您可以使用--no single branch取消暗示它。(摘自git clone手册页)回答得很好,这在从gitlab进行克隆并希望重新开始时非常有用。
$,虽然在本例中在技术上是正确的,但对不认识语法的人理解实际问题的答案没有任何帮助。它还依赖于第一个命令之后的第二个命令,并且在同一个shell中。如果有人忽略了这些隐含的需求,他们可能最终会完全删除其他东西。因此,我建议您可以通过明确指定名称
dirformynewrepo
作为
rm
命令的参数来改进您的答案,因为这将使两个命令之间的连接更加清晰。这不会考虑.gitignore?itub是对的,这只是复制工作树。git checkout过去可以正确地完成这项工作,但现在已经不能了。那么,如果服务器只提供git://access,您该怎么办?