在进行克隆时,是否有传递给git的标志,比如不要克隆。git目录?如果没有,那么在克隆完成后使用标记删除.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 dirformynewrepo1
rd /s /q  .\dirformynewrepo1\.git

这适用于Windows系统

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

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

这只适用于本地路径和远程ssh/rsync路径,如果远程服务器只提供git://或https://访问,它可能不起作用。

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存档——远程已经实现了这个。