在进行克隆时,是否有传递给git的标志,比如不要克隆。git目录?如果没有,那么在克隆完成后使用标记删除.git目录如何?
当前回答
git clone --separate-git-dir=$(mktemp -u) --depth=1 <repo> <dir> && rm <dir>/.git
我更喜欢这个解,因为我不喜欢自动的rm - rfs。它只是rm一个。git文件,这意味着它永远不会意外rm -rf一个错误的。git目录
它依赖于mktemp命令,所以它将工作*nix系统(从我看到的情况来看,mktemp需要进一步的工作才能在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目录指定一个路径。结果“项目”将有一个.git文件(不是目录),其内容将是一行:
gitdir: <the dir you specified in the flag>
因为我们在mktemp命令中使用了tmp目录,所以实际的.git目录内容将在tmp目录中结束。我们还使用了——depth=1,这样它在tmp dirs上占用的空间更少。
其他回答
或者,如果你安装了Node.js,你可以使用下面的命令:
NPX degit GIT_REPO
npx随Node一起提供,它允许你运行基于二进制节点的包,而不需要先安装它们(或者,你可以先使用npm i -g degit全局安装degit)。
Degit是Rich Harris (slvelte和Rollup的创建者)创建的工具,他使用它通过克隆存储库而不保留git文件夹来快速创建新项目。但它也可以用来克隆任何回购一次…
你可以一直这样做
git clone git://repo.org/fossproject.git && rm -rf fossproject/.git
git clone --separate-git-dir=$(mktemp -u) --depth=1 <repo> <dir> && rm <dir>/.git
我更喜欢这个解,因为我不喜欢自动的rm - rfs。它只是rm一个。git文件,这意味着它永远不会意外rm -rf一个错误的。git目录
它依赖于mktemp命令,所以它将工作*nix系统(从我看到的情况来看,mktemp需要进一步的工作才能在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目录指定一个路径。结果“项目”将有一个.git文件(不是目录),其内容将是一行:
gitdir: <the dir you specified in the flag>
因为我们在mktemp命令中使用了tmp目录,所以实际的.git目录内容将在tmp目录中结束。我们还使用了——depth=1,这样它在tmp dirs上占用的空间更少。
Git存档——远程已经实现了这个。
对于那些怀疑——depth 1解决方案的人,因为它仍然下载.git目录,然后你需要手动删除它,也许你需要知道git克隆实际上是如何工作的。
当你通常克隆一个repo, git下载你所有的文件(跨越提交)到.git目录。当使用——depth 1进行克隆时,git只会将最新版本的文件下载到.git中。之后,git会将这些文件从.git签出或检索到工作目录(不再下载)。
通常情况下,因为.git中的文件对象是压缩的,所以使用git clone—depth 1下载文件会比下载未压缩的文件节省更多带宽。对于一些网速较慢的人来说,这是值得的(需要运行rm -rf)。
我个人认为git存档解决方案更好,但由于GitHub不支持它,——depth 1是正确的选择。
推荐文章
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别
- GitHub -致命:无法读取用户名https://github.com':没有这样的文件或目录
- 撤消git平分错误
- 使用.gitconfig配置diff工具
- 如何配置Mac OS X术语,使git有颜色?
- Visual Studio Code: .git文件夹/文件隐藏